REST接口API和ACID中的项目列表

时间:2017-11-28 09:58:33

标签: rest

我正在创建REST API,我将在其中分配一些项目进行分组:

POST /rest/group/<group1>/item

[
    {id: 'item1'},
    {id: 'item2'},
    {id: 'item3'},
    ...
]

问题是我需要涵盖以下用例:

  1. 将项目分配给新组
  2. 将项目分配给已分配项目的现有组 物品必须保持不变
  3. 从群组中删除项目 - 所有项目
  4. 并删除部分内容
  5. 可能需要
  6. 来组合这些用例
  7. 我无法使用PATCH方法。

    归档此内容的最佳选择是什么?

    我想到的就是这样:

    [
        {id: 'item1', action: 'add'},
        {id: 'item2', action: 'add'},
        {id: 'item3', action: 'remove'},
        ...
    ]
    

    我在问,因为为此目的可能有更有效的解决方案。

    我也需要存档ACID,所以不要发送多个请求。

1 个答案:

答案 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的项目。根据您的项目模型,也可以应用其他过滤删除的方式。