考虑两个资源之间的以下关系
显然,Faculty不是这里的一流资源。
现在我需要端点来执行以下操作。
POST /faculties/
PUT /college/1/faculties
GET /college/1/faculties
:相关院系列表。每个都会包含一个类似/faculties/1
的自我网址。DELETE /college/1/faculties/1
:网址看起来更好但是如何公开这个网址?PUT /college/1/faculties
接受这所大学院系的完整名单。DELETE /sectors/1
:看起来不错但需要处理/faculties/1/sectors
的缓存。在这种情况下,更好的方法是什么?我已经读过有关公开会员资源的内容,但是如果有一个大学有10个院系,那么需要10个单独的http电话才能从会员资格中获得所有这些资源。
此外,这只是完整关系树的一小部分。为了进一步扩展,请说系统有
此外,在RESTful架构中,客户端永远不应填充URL。
有什么建议吗?
答案 0 :(得分:2)
我过去曾写过一篇关于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。
我认为您可以利用两种情况来最小化请求数量:使用引用或提供内容。我的意思是,如果资源检测到(基于内容或自定义标头)发送的内容,那么它知道它是否只需要处理引用(仅附件)或内容(创建和附件)。
我会看到以下可能的多基数请求(大学 - > faculties):
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和How to Update a REST Resource Collection。这种方法允许您在一个调用中创建元素,然后附加它们。它允许收集元素的处理。
希望我很清楚它对你有帮助, 亨利