是吗:
GET api/stuff?ids[]=123&ids[]=456&ids[]=789&ids[]=101112&etc...
是吗:
POST api/stuff/batch
body: ids: [123, 456, 789, 101112, etc]
第一个看起来在语义上是正确的,但除了有一个令人难以置信的粗略网址之外,还有消息来源说这可能会限制获取的长度,那么如果我有一个巨大的ID呢?
第二个似乎更好,因为没有粗略的网址,但我对休息的理解是POST应该做出改变,而不是幂等...
因此,这纯粹是一个语义问题,并且没有真正的"正确的"方式是什么?
答案 0 :(得分:3)
没有一种“正确”的方式,它实际上取决于REST服务器的特殊要求。但是,对于带有查询字符串的GET
,它可能看起来更像是这样:
GET api/stuff?ids=123+456+789+101112+...
或者像这样:
GET api/stuff?ids=123,456,789,101112,...
或者这个:
GET api/stuff?ids=123|456|789|101112|...
服务器想要使用哪种分隔符。
答案 1 :(得分:3)
与REST中的许多内容一样,并不总是纯粹的。
一种解决方案是灵活定义资源的定义。然后,获取多个资源本身就是一种资源。
如果这对您的API最有用,那么POST可以是幂等的。这只是PUT应该始终是幂等的,而POST可以承受不起。只需正确记录端点。
您可以允许接受来自GET和POST的ID。然后,根据发送的ID数量,客户端可以选择其中之一。只需正确记录即可。
指导原则是API的易用性和一致性。了解制作API是一个用户体验问题。
答案 2 :(得分:1)
我会使用POST,因为:
POST requests are never cached (by browser)
POST requests have no restrictions on data length
了解详情:HTTP Methods: GET vs. POST
POST,GET也是在REST之前定义的。因此,对某些只读请求使用(有时!)POST并不是一种耻辱。