2

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

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

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

4

3 回答 3

2

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

获取 /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;
于 2012-06-26T08:58:33.190 回答
1

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

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

于 2012-06-26T08:52:33.550 回答
-2

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

于 2012-06-26T14:38:25.350 回答