gpt4 book ai didi

rest - 使用哪种 HTTP 方法 : PUT or DELETE?

转载 作者:可可西里 更新时间:2023-11-01 17:02:17 24 4
gpt4 key购买 nike

我想针对以下场景使用适当的方法设计我的休息端点。

有一群人。每个组都有成员。成员必须得到组管理员的批准才能成为成员。如果管理员拒绝,则用户不能成为该组的成员。

我有以下端点来解决这种情况。

  1. 当用户加入群组时POST/projects/api/v1/projects/{project id}/members/{member id}

  2. 用于批准成员资格PUT/groups/api/v1/groups/{group id}/members/{member id}/approve 批准成员资格

但是,我无法确定拒绝成员资格的正确端点。我应该使用

PUT   /projects/api/v1/projects/{project id}/members/{member id}/reject

DELETE  /projects/api/v1/projects/{project id}/members/{member id}

最佳答案

说白了,你用错了URI。 “批准”等“操作”不应成为 URI 的一部分。

多个列表

我想这样做的一种“显而易见”的方式是让一个小组拥有一份已批准成员和等待被接受的成员的列表。如果要添加用户,他可能会POST/groups/{group id}/waitlist/{user id}。这使得管理员很容易拒绝,他们可以DELETE/groups/{group id}/wait_list/{user id}。如果管理员希望批准,他可以POST/groups/{group id}/users/{user id}

现在,您可能会在这里看到的问题之一是,我们知道该用户同时位于“已批准用户”列表和“等待批准用户”列表中。根据您管理此用户列表的精确程度,这可能不是问题。但是,如果您希望用户只在这些列表之一中,则必须在批准后将他们从等待列表中删除。

乍一看很简单。我想到了两个选项,一个是当您批准用户时,通过将他们添加到“用户”列表中,服务器也会将他们从“等待列表”中删除。这是一件有点脏的事情,POST 并不意味着有那样的副作用。所以实际上,我们需要客户(管理员)提出第二个请求。

给人们打补丁!

当然,如果使用 PATCH 方法,这一切都可以变得容易得多。一个组可以有一个用户列表,与他们在该组中的状态配对。当你想被添加到一个组中时,你可以发出类似 PATCH/group/{group id}/users/{'user id': 666, 'status':'request access'} 的请求.当管理员批准/拒绝时,他们会发出几乎相同的请求,只是更新 status 字段。

这里的额外好处是,管理员可以将用户的状态设置为“已拒绝”、“已撤销”、“已暂停”等,并且实际上不需要发生任何特别的事情。尽管您确实需要确保您的服务器正在验证这些选择,否则您最终会遇到各种愚蠢的事情。您还可以允许管理员直接添加用户,而无需用户先请求权限。例如,如果管理员想快速添加某人作为版主。

关于rest - 使用哪种 HTTP 方法 : PUT or DELETE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24227401/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com