REST API:如何search其他属性

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

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

什么现在将是一个逻辑路由search,在用户后查询? 我应该把这个到3路线,还是我应该创build一个额外的路线?

我相信你会在这个问题上得到很多不同的意见。 就我个人而言,我会看到“search”作为筛选“所有联系人”给予:

GET / contacts?filter = your_filter_statement

您可能已经在GET / contacts上具有过滤参数,以允许与filter-statement很好的分页。

编辑:使用此parsing您的查询string:

var url = require('url'); 

并在你的处理程序('request'是你的nodejs http-request对象):

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

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

我不认为有一个明确的答案,或者可能有,我只是不知道或不同意。 我想说,你应该添加一个新的路线: / contacts / _search在联系人列表上执行一个操作,在这个例子中是一个search。 清楚并明确你所做的事情。

GET /contacts查找所有联系人。 你想要所有联系人的一个子集。 URI中的分隔符代表子集? 不是 ”?”; 这是非分层的。 “/”字符用于分隔层级path段。 因此,对于联系人的一个子集,请尝试一个URI,如/contacts/like/dave//contacts/by_name/susan/

通过path段对数据进行子集化的概念不仅仅是集合 – 它应用更广泛。 整个网站是一个集合,每个顶级path段都定义了它的一个子集: http://yoursite.example/contactshttp://yoursite.example/contacts的一个子集。 它也适用于更狭义的: /contacts/:id/contacts的子集,而/contacts/:id/firstname/contacts/:id的子集。