gpt4 book ai didi

rest - 公开一对多关系的 RESTful 端点

转载 作者:行者123 更新时间:2023-12-02 00:08:08 25 4
gpt4 key购买 nike

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

  • 学院拥有许多院系
  • 教师属于学院

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

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

  • 在这个农场的这所大学里创建一个新的教员。一种可能的方法是通过两次操作来完成此操作。
    • POST/faculties/
    • PUT/学院/1/学院
  • 从该学院中删除一名教员。又进行了两次操作
    • GET/college/1/faculties:相关院系列表。每个都包含一个 self 网址,例如 /faculties/1
    • DELETE/college/1/faculties/1:网址看起来更好,但如何公开此网址?
  • 在该学院下添加一个或多个院系。
    • PUT/college/1/faculties 接受该学院院系的完整列表。
  • 完全删除该特定扇区。
    • DELETE/sectors/1:看起来不错,但需要处理 /faculties/1/sectors 的缓存。

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

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

  • 学院设有多个部门
  • 系里有很多实验室等等。

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

有什么建议吗?

最佳答案

我过去写过一篇关于 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 .

我认为您可以利用两种情况来最大限度地减少请求数量:使用引用或提供内容。我的意思是,如果资源检测(基于内容或自定义 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 requestHow to Update a REST Resource Collection 。这种方法允许您在一次调用中创建元素,然后附加它们。它允许收集元素的处理。

希望我说得清楚并且对你有帮助,蒂埃里

关于rest - 公开一对多关系的 RESTful 端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29237255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com