【问题标题】:Rest API path with many to many relationship具有多对多关系的 Rest API 路径
【发布时间】:2019-06-21 10:18:57
【问题描述】:

我正在为多对多关系定义一条休息路径。 我想获取作为公司客人的用户列表。 下面的路径够吗?

/api/v1/users/companies/{companyId}/guests

因为我把它放在了 UserController 中所以它不能是

/api/v1/companies/{companyId}/guests

你有什么建议吗?

【问题讨论】:

    标签: spring rest api


    【解决方案1】:

    我本来是想写评论的,但是太长了,所以我写了一个答案。

    首先,REST 是一种架构风格,而不是用于设计 URI 的食谱。 REST 不强制执行任何 URI 设计(只要它符合 RFC 3986),完全由您来选择更好地识别您的资源的 URI。


    你有什么建议吗?

    这个问题的答案往往几乎完全基于意见,而不是事实、参考资料或特定专业知识。您将从这一点读到的是我的个人意见

    如果 guestscompanies 资源可以独立管理,我会使用以下映射:

    /companies
    
    /guests
    

    然后您可以使用 查询参数 来过滤给定公司的客人:

    GET /guests?company={id} HTTP/1.1
    Host: example.org
    

    要为给定公司创建 guest 资源,您可以使用:

    POST /guests HTTP/1.1
    Host: example.org
    Content-Type: application/json
    
    {
      "name": "John Appleseed",
      "companyId": 1
    }
    

    【讨论】:

    • 我明白休息路径设计没有规则。我正在寻找一个好的设计。你的建议很棒。我刚申请了。谢谢。
    【解决方案2】:

    REST 不关心您对资源标识符使用什么拼写,只要它们与RFC 3986 中定义的生产规则一致。

    /api/v1/users/companies/{companyId}/guests
    

    没关系

    /api/v1/companies/{companyId}/guests
    

    这样也好。

    /d4158568-c40f-4c51-93cd-25642f6f42e2
    

    那也是。

    /api/v1/companies/guests?companyId={companyId}
    

    在网络上,您可能更有可能看到这样的标识符;表单是一种使客户端能够提供数据的有用方式,HTML 具有从表单中的数据创建 URI 的生产规则。当然,HTTP 也有一些机制允许您redirect 客户端将注意力从一个 URI 转移到另一个 URI,因此您不必将标识符限制为适合特定客户端的标识符。

    【讨论】:

    • 我认为 /api/v1/companies/{companyId}/guests 是比 /api/v1/companies/guests?companyId={companyId} 更好的设计
    猜你喜欢
    • 2019-12-15
    • 1970-01-01
    • 1970-01-01
    • 2018-05-13
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多