【问题标题】:How to PUT multiple resources via a REST API如何通过 REST API 放置多个资源
【发布时间】:2021-05-15 09:25:43
【问题描述】:

我正在尝试找出通过 REST API 将多个用户添加到组的最佳方法。

现在,我认为这是一次添加单个用户的最佳方式:

PUT /groups/123/{userID}

然后,从组中删除用户:

DELETE /groups/123/{userID}

但是我如何将多个用户同时添加到组中?这是最好的方法吗?

PUT /groups/123

作为数组的内容主体:

[
  "user1",
  "user2",
  "user3"
]

...要从组中删除用户,我会通过 DELETE 请求执行相同的操作。

这种设置有什么“错误”吗,还是有更好、更“行业标准”的方法?

【问题讨论】:

    标签: json api rest http


    【解决方案1】:

    如何通过 REST API 放置多个资源

    你不要那样做——HTTP 中的每个请求都有一个完全一致的目标 resourcePUT 请求的语义是请求的消息体是资源的替换表示。


    资源是文档的概括。

    拥有代表某个群体成员的文档是完全合理的。

    PUT /groups/123
    
    [
      "user1",
      "user2",
      "user3"
    ]
    

    这个请求的意思是“用这个副本替换你的 /groups/123 副本”。它纯粹是一个文档编辑命令。

    有用的工作——比如实际更改主组成员列表,是副作用使您的文档副本看起来像提供的副本。见Webber 2011

    在这种风格中,从组中“删除”用户看起来像是对 /groups/123 文档的另一次编辑

    PUT /groups/123
    
    [
      "user1",
      "user3"
    ]
    

    当然,不需要远程创作语义;你可以这样做:

    POST /groups/123
    
    Please remove user1
    

    POST /groups/123
    
    action=addUser&id=user4
    

    要从组中删除用户,我会通过 DELETE 请求做同样的事情

    小心 - DELETE(如 PUT)表示 HTTP 中的特定内容,而这可能不是您的意思。

    相对较少的资源允许使用 DELETE 方法

    DELETE 的语义完全属于transfer documents over a network 域,而不是“管理用户和组”域。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-13
      • 1970-01-01
      • 2016-01-27
      • 1970-01-01
      • 2013-12-01
      • 2021-12-30
      相关资源
      最近更新 更多