端点设计的正确方法
Correct way to design endpoints
我正在设计 REST。我有用户,用户有不同类型的联系人。根据 REST,我的端点应该是什么样的?
这看起来很合理:
GET /users/:id/contacts
GET /contacts
在用户端点上,我检查另一个用户的联系人,在联系人端点上,我检查登录用户的联系人,但是如果我需要获取所有用户的所有联系人,我需要做一个过滤器:
GET /contacts?user_id=:id
并使此端点成为 return 所有联系人。这使得用户端点变得多余。
根据 REST 的正确方法是什么?
What should my endpoints be like according to REST? [...] What is correct way to do it according to REST?
这是一个误解。
REST 架构不强制执行任何 URI 设计(参见下面的注释)。选择能更好地识别您的资源的 URI 完全取决于您。
URI 语法在 RFC 3986 中定义。作为一般规则,路径以分层形式组织(分段由 /
分隔)并且可以在查询组件中包含非分层数据(以 ?
开头)。
所以 /users/{id}/contacts
似乎可以很好地识别 属于特定用户的联系人集合 。
注 1:Roy T. Fielding 的论文 chapter 5 中描述了 REST 架构风格,它定义了一组约束,遵循这种架构的应用程序必须紧随其后。然而,它没有说明 URI 必须是什么样的。
注释 2: Martin Fowler 编写的 popular article 的 examples 解释了定义的模型作者:Leonard Richardson 建议 一个看起来友好且易于阅读的 URI 结构。
我正在设计 REST。我有用户,用户有不同类型的联系人。根据 REST,我的端点应该是什么样的?
这看起来很合理:
GET /users/:id/contacts
GET /contacts
在用户端点上,我检查另一个用户的联系人,在联系人端点上,我检查登录用户的联系人,但是如果我需要获取所有用户的所有联系人,我需要做一个过滤器:
GET /contacts?user_id=:id
并使此端点成为 return 所有联系人。这使得用户端点变得多余。
根据 REST 的正确方法是什么?
What should my endpoints be like according to REST? [...] What is correct way to do it according to REST?
这是一个误解。
REST 架构不强制执行任何 URI 设计(参见下面的注释)。选择能更好地识别您的资源的 URI 完全取决于您。
URI 语法在 RFC 3986 中定义。作为一般规则,路径以分层形式组织(分段由 /
分隔)并且可以在查询组件中包含非分层数据(以 ?
开头)。
所以 /users/{id}/contacts
似乎可以很好地识别 属于特定用户的联系人集合 。
注 1:Roy T. Fielding 的论文 chapter 5 中描述了 REST 架构风格,它定义了一组约束,遵循这种架构的应用程序必须紧随其后。然而,它没有说明 URI 必须是什么样的。
注释 2: Martin Fowler 编写的 popular article 的 examples 解释了定义的模型作者:Leonard Richardson 建议 一个看起来友好且易于阅读的 URI 结构。