REST API:如何search其他属性
我使用node.js作为REST API。 有以下可用的操作:
- /联系人,GET,查找所有联系人
- /联系人,POST,创build新的联系人
- / contacts /:id,GET,通过它的id显示或获取指定的联系人
- / contacts /:id,PUT,更新一个特定的联系人
- / 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/contacts
是http://yoursite.example/contacts
的一个子集。 它也适用于更狭义的: /contacts/:id
是/contacts
的子集,而/contacts/:id/firstname
是/contacts/:id
的子集。