我正在创建REST API,我将在其中分配一些项目进行分组:
POST /rest/group/<group1>/item
体
[
{id: 'item1'},
{id: 'item2'},
{id: 'item3'},
...
]
问题是我需要涵盖以下用例:
我无法使用PATCH方法。
归档此内容的最佳选择是什么?
我想到的就是这样:
[
{id: 'item1', action: 'add'},
{id: 'item2', action: 'add'},
{id: 'item3', action: 'remove'},
...
]
我在问,因为为此目的可能有更有效的解决方案。
我也需要存档ACID,所以不要发送多个请求。
答案 0 :(得分:1)
您不需要在您的身体中发送动作,因为您拥有可以表达该行为的HTTP方法。
首先,为了让您的请求更加RESTful,我强烈建议您使用/rest/groups/<group1>/items
,因为guidelines建议将资源用于复数形式。
将项目分配到新组:
(POST) /rest/groups/<group1>/items
使用json体内的物品。
(PUT) /rest/groups/<group1>/items
将新项目添加到json正文中。在您的应用程序中,请确保您将其识别为(PUT)请求,如果是,则仅将它们添加到现有项目列表中。 (POST)应覆盖整个列表,以便您可以根据需要快速更改项目集合。
(DELETE) /rest/groups/<group1>/items
删除该组的整个项目集合。
(DELETE) /rest/groups/<group1>/items/<item1>
不禁止在(DELETE)方法中发送实体主体,但这是大多数已知API倾向于避免的做法。您应该通过将其ID作为路径变量发送来删除特定项目。
要批量删除项目,您可以使用以下查询参数:
(DELETE) /rest/groups/<group1>/items?ids=1,5,7
这应该删除ID为1,5和7的项目。根据您的项目模型,也可以应用其他过滤删除的方式。