【问题标题】:Exposing RESTful endpoints for a one to many relationships为一对多关系公开 RESTful 端点
【发布时间】:2015-05-28 00:53:28
【问题描述】:

考虑以下两个资源之间的关系

  • 学院有很多院系
  • 教师属于学院

显然,教员在这里不是一流的资源。

现在我需要端点来进行以下操作。

  • 在这个农场的这所大学中创建一个新教师。在两个操作中执行此操作的一种可能方法。
    • POST /faculties/
    • PUT /college/1/faculties
  • 从这所学院中删除教职员工。再次进行两次操作
    • GET /college/1/faculties:相关院系名单。每个都将包含一个自我网址,例如/faculties/1
    • DELETE /college/1/faculties/1: url 看起来更好但是如何暴露这个url?
  • 在该学院下添加一个或多个学院。
    • PUT /college/1/faculties 接受该学院的完整学院名单。
  • 完全删除该特定扇区。
    • DELETE /sectors/1:看起来不错,但需要注意/faculties/1/sectors的缓存。

在这种情况下,什么是更好的方法?我已经阅读过有关公开会员资源的信息,但是通过这种方法,如果一所大学有 10 个学院,则需要 10 次单独的 http 调用才能从会员中获取所有这些。

此外,这只是完整关系树的一小部分。为了进一步扩展,假设系统有

  • 学院有很多部门
  • 部门有很多实验室等等。

此外,在 RESTful 架构中,客户端永远不应填充 URL。

有什么建议吗?

【问题讨论】:

  • 顺便说一句,我认为你应该与复数的使用保持一致——你在大学使用单数,对院系和部门使用复数。就我个人而言,我总是使用单数,因为我喜欢匹配资源名称的路径。选择什么并不重要,但要保持一致。

标签: rest restful-architecture apiblueprint


【解决方案1】:

我过去写过一篇关于 OData 如何实现这些方面的文章(功能“导航属性”)。请参阅此链接:https://templth.wordpress.com/2014/12/08/updating-data-links-of-odata-v4-services-with-olingo/

这个其他链接也可以给你一些有趣的提示,因为它在末尾描述了 URL 和相应的有效负载:http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/odata-v4/entity-relations-in-odata-v4

我认为您可以利用两种情况来最大限度地减少请求数量:使用参考或提供内容。我的意思是如果资源检测到(基于内容或自定义标头)发送的内容,那么它知道它是否只需要处理引用(仅附件)或内容(创建和附件)。

我会看到以下可能的多个基数要求(大学 -> 院系):

  • POST /faculties/: 加个学院没有归属感的教员
  • POST /college/1/faculties:将教员附加到学院,如果不存在,则最终创建它(基于发送的内容)
  • DELETE /college/1/faculties/?ref=/faculties/1 将教员从大学中分离出来

您还可以考虑将学院的引用放在教职员工中(请求 POST /faculties)。因此,您可以在创建元素时附加它。

否则这样做PUT /college/1/faculties 旨在替换整个代表,以便所有附属于特定大学的学院。

您还可以使用 POST 或 PATCH 方法来最小化请求数。您可以查看这些答案以了解更多详细信息:REST API - Bulk Create or Update in single requestHow to Update a REST Resource Collection。这种方法允许您在一次调用中创建元素,然后附加它们。它允许对元素进行收集处理。

希望我说的很清楚,它可以帮助你, 蒂埃里

【讨论】:

    猜你喜欢
    • 2017-08-03
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    • 2015-03-17
    • 1970-01-01
    相关资源
    最近更新 更多