c# - 一种更新所有资源的 RESTful 方式
问题描述
我想对 API 公开的所有资源进行共同更改。例如,假设一个 API 公开了一个班级的所有学生,并且您想为所有学生设置一门通用课程。
一种方法是查询 API,并逐个或批量更新资源的属性。但是,这需要首先获取所有资源,然后更新它们的属性,然后发送和发布请求。
相反,我对 RESTful 设计感兴趣,您可以在其中发送属性及其值,这些属性将应用于通过 API 公开的所有资源(例如,前面示例中的学生)。
关于如何通过 RESTful 设计实现这一点的任何建议?
更新1:
换句话说,我想将所有资源的一个字段更新为一个共同的值,而不必先获取资源。因此,我不想实现以下内容,因为我有数百万个资源,我不想先获取它们的所有 ID,然后创建一个 json 对象,如下所示:
PATCH /items
[ { id: 1, name: 'foo' }, { id: 2, name: 'bar' } ]
解决方案
使用补丁。有关详细信息,请参阅RFC5789和RFC6902。
样本:
PATCH /api/classes/123/students
[ { id: 1, name: 'foo' }, { id: 2, name: 'bar' } ]
您将不得不选择如何处理您的响应错误,无论是否是原子的。
- 对于原子,失败的行将发出您的整个请求
400
。 - 对于非原子,您将从
200
服务器获得其正文中的错误详细信息。
从 API 消费者的角度来看,这两种情况各有利弊。应根据您的用例做出决定。
更新1:
通过不向没有特定 ID 的端点提供列表,您正在对整个集合执行该操作。
提供这样的 JSON 主体应该将所有提供的属性设置为为该集合中的每个记录指定的值:
PATCH /api/classes/123/students
{ courses: [ commonCourse1, commonCourse2 ] }