【问题标题】:Designing of a RESTful API endpoint filter and search设计一个 RESTful API 端点过滤器和搜索
【发布时间】:2016-05-20 14:52:49
【问题描述】:

我正在开发一些自定义 API 端点(使用 loopback.io),在其现有的 CRUD 端点之上。

过去我曾使用过其他一些 Node RESTful API 框架进行原型设计,并且非常喜欢它们提供的开箱即用的强大过滤功能。

我想做的是为自定义端点提供类似的一组(或子集)某种过滤。端点只是执行一个 SQL 查询(带有一些 JOIN)并返回一个对象数组。

我应该使用某种标准化方法来设计一些过滤吗?例如,我可能想要过滤基表的字段,或过滤关系。我喜欢 loopback.io 和 sequelize 允许相对简单地指定 includes 以链接相关对象的方式,以及它们的过滤语法。

完成自定义实现后,通常如何解决此类问题?

【问题讨论】:

    标签: api rest loopbackjs


    【解决方案1】:

    您可能已经注意到 CRUD 端点,LoopBack 通过filter 参数提供了开箱即用的querying。您可以在API Explorer 中很好地进行试验。如果您想公开对自定义 remote method 的查询,只需将过滤器也添加为参数。

    example-model.js

    module.exports = ExampleModel => {
      const search = async (filter = {}) => {
        return await ExampleModel.find(filter)
      }
    
      ExampleModel.remoteMethod('search', {
        description: 'Returns a set of ExampleModel based on provided query.',
        accepts: [
          {arg: 'filter', type: 'object', required: false}
        ],
        http: {path: '/search', verb: 'get'},
        returns: {root: true}
      })
    
      ExampleModel.search = search
    }
    

    【讨论】:

    • 问题是,过滤器只适用于环回模型。对于一些更高级的查询,我发现唯一的方法是编写一些自定义 SQL。但是,最好有某种形式的过滤(基本的位置、顺序、限制、偏移),以便端点类似于 CRUD 端点。
    猜你喜欢
    • 2014-08-09
    • 1970-01-01
    • 2015-05-20
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    • 2021-02-23
    • 1970-01-01
    相关资源
    最近更新 更多