10

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

  • 学院有很多院系
  • 教师属于一所大学

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

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

  • 在这个农场的这所大学中创建一个新教师。在两个操作中执行此操作的一种可能方法。
    • 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。

有什么建议吗?

4

1 回答 1

5

我过去写过一篇关于 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。这种方法允许您在一次调用中创建元素,然后附加它们。它允许收集对元素的处理。

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

于 2015-03-24T17:38:37.163 回答