为一对多关系公开 RESTful 个端点

Exposing RESTful endpoints for a one to many relationships

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

显然教员不是这里的第一个 class 资源。

现在我需要用于以下操作的端点。

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

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

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

有什么建议吗?

我以前写过一篇post关于OData如何实现这些方面(特性"navigation properties")。看到这个 link:https://templth.wordpress.com/2014/12/08/updating-data-links-of-odata-v4-services-with-olingo/.

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

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

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

  • 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 request and How to Update a REST Resource Collection。这种方法允许您在一次调用中创建元素,然后附加它们。它允许对元素进行收集处理。

希望我说的很清楚,对你有帮助, 蒂埃里