这是How to design a RESTful collection resource?的后续行动。我认为在提供的答案中仍然没有解决资源批量更新(和批量删除)的主要问题。因此这个新问题。
假设我的收集资源为items
http://example.com/items
我可以通过item
item_id
GET http://example.com/items/{item_id}
并请求使用
更新单个项目PUT http://example.com/items/{item_id}
PUT
特别好:它是幂等的:
请求方法被视为"幂等"如果使用该方法对服务器的多个相同请求的预期效果与单个此类请求的效果相同。在本规范定义的请求方法中,PUT,DELETE和安全请求方法是幂等的。
我想在一个请求中更新多个项目。
我有几个看起来毫无疑问的选择" RESTful"但有其缺点。
PUT
并发送请求中的所有项目。 (如果实际上只更改了集合的一小部分,则开销太大。)PATCH
或POST
(非幂等)。由于PUT
和DELETE
是唯一的幂等方法,DELETE
显然不适用于此(参见rfc7231 section 4.3.5),我需要坚持PUT
}。
作为一种可能的解决方案,我想出了以下内容。
我为更新请求添加了一个资源,用于更改items
集合。
http://example.com/updateitems
PUT
multipart/mixed
请求(是RESTful吗?)GET
。HTTP
,因此没有"随后的GET"请求该资源可能违反PUT
PUT
有{"等同的陈述"到items/{item_id}
请求的表示。 (参见rfc7231 section 4.3.4)该方法的问题:
我还没想出如何使它符合HATEOAS标准。可能应该有一个"集合"将每个items
资源表示链接到updateitems
资源和"编辑"指向PUT
资源的链接。我应该隐藏 xcode-select --install
单个项目的可能性,以便将客户指向"批量修改"? (参见iana link relations)
在我看来,我的方法似乎符合我能想到的任何REST或HTTP要求。但是,我的印象是我在某种程度上滥用了语义,客户将很难弄清楚如何实际使用这个API。
有什么想法?提前谢谢!