我使用 node.js 作为 REST API。有以下可用操作:
- /contacts, GET, 查找所有联系人
- /contacts, POST, 创建新联系人
- /contacts/:id, GET, 通过它的 id 显示或获取指定联系人
- /contacts/:id, PUT, 更新特定联系人
- /contacts/:id, DELETE, 删除特定联系人
现在搜索、查询用户的逻辑路径是什么?我应该把它放到 3. 路线还是应该创建一个额外的路线?
我相信你会在这个问题上得到很多不同的意见。就我个人而言,我会将“搜索”视为对“所有联系人”的过滤:
获取 /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;
有趣的问题。这是我多次讨论过的问题。
我认为没有明确的答案,或者可能有,但我只是不知道或不同意。我会说您应该添加一个新路由:/contacts/_search在联系人列表上执行操作,在本例中为搜索。清楚并定义你当时所做的事情。
GET /contacts
查找所有联系人。您想要所有联系人的子集。URI 中的什么分隔符表示子集?它不是 ”?”; 这是非等级的。“/”字符用于分隔分层路径段。因此,对于一部分联系人,请尝试使用 URI,例如/contacts/like/dave/
or /contacts/by_name/susan/
。
这种按路径段对数据进行子集化的概念不仅仅适用于集合——它的应用范围更广。您的整个站点是一个集合,每个顶级路径段都定义了它http://yoursite.example/contacts
的一个子集:是http://yoursite.example/
. 它也适用于更狭窄的范围:/contacts/:id
是 的子集/contacts
,并且/contacts/:id/firstname
是 的子集/contacts/:id
。