【问题标题】:REST API: How to search for other attributeREST API:如何搜索其他属性
【发布时间】:2012-06-27 13:10:10
【问题描述】:

我使用 node.js 作为 REST API。 有以下可用操作:

  1. /contacts, GET, 查找所有联系人
  2. /contacts, POST, 创建新联系人
  3. /contacts/:id, GET, 通过其 id 显示或获取特定联系人
  4. /contacts/:id,PUT,更新特定联系人
  5. /contacts/:id,DELETE,删除特定联系人

现在搜索、查询用户的逻辑路径是什么? 我应该把它放在 3. 路线还是应该创建一个额外的路线?

【问题讨论】:

    标签: api node.js rest express


    【解决方案1】:

    有趣的问题。这是我多次讨论过的。

    我认为没有明确的答案,或者可能有,但我只是不知道或不同意。我会说您应该添加一个新路由:/contacts/_search 在联系人列表上执行操作,在本例中为搜索。清楚并定义你当时所做的事情。

    【讨论】:

    • 我认为这将是一个额外的搜索引擎的好方法。但只是查询会比显示操作更符合逻辑。
    • 我的印象是你有兴趣做的事情。但是 lindstromhenrik 也有一个不错的方法
    【解决方案2】:

    我相信你会在这个问题上得到很多不同的意见。就我个人而言,我会将“搜索”视为对“所有联系人”的过滤:

    GET /contacts?filter=your_filter_statement

    您可能已经在 GET /contacts 上设置了过滤参数,以允许分页与过滤器语句配合使用。

    编辑: 使用它来解析您的查询字符串:

    var url = require('url');
    

    在您的处理程序中(“请求”是您的 nodejs http-request 对象):

    var parsedUrl = url.parse(request.url, true);
    var filterStatement = parsedUrl.query.filter;
    

    【讨论】:

    • 嗨,你能给我一个示例代码吗?我不常用 express/node 中的 url 查询
    • 好的,我把filterStatement放到mongoose find表达式里面。那么我现在如何使用 url 进行过滤。我尝试了 GET /contacts?filter=username 但这根本不过滤,我该如何定义多个过滤器?
    • 至于 Mongoose/MongoDB 查找语法,我建议您查看 Mongoose 文档:mongoosejs.com/docs/finding-documents.html 和 MongoDB 查询:mongodb.org/display/DOCS/Advanced+Queries
    【解决方案3】:

    GET /contacts 查找所有联系人。您想要所有联系人的子集。 URI 中的什么分隔符表示子集?它不是 ”?”;这是非等级的。 “/”字符用于分隔分层路径段。因此,对于一部分联系人,请尝试使用 /contacts/like/dave//contacts/by_name/susan/ 之类的 URI。

    这种按路径段对数据进行子集化的概念不仅仅适用于集合——它的应用范围更广。您的整个站点是一个集合,每个顶级路径段都定义了它的一个子集:http://yoursite.example/contactshttp://yoursite.example/ 的一个子集。它也适用于更窄的范围:/contacts/:id/contacts 的子集,/contacts/:id/firstname/contacts/:id 的子集。

    【讨论】:

      猜你喜欢
      • 2023-04-08
      • 2015-08-19
      • 1970-01-01
      • 2013-08-30
      • 1970-01-01
      • 1970-01-01
      • 2020-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多