jav*_*eek 1 rest http http-put http-method http-delete
我想使用适合以下场景的适当方法来设计我的休息端点。
有一个团体。每个小组都有成员。会员必须经过群管理员批准才能成为会员。如果管理员拒绝,用户将无法成为该组的成员。
我有以下端点来解决这种情况。
当用户加入群组时
POST /projects/api/v1/projects/{project id}/members/{member id}
用于
PUT /groups/api/v1/groups/{group id}/members/{member id}/approve批准会员资格
但是,我无法确定拒绝会员资格的正确端点。我应该使用
PUT /projects/api/v1/projects/{project id}/members/{member id}/reject
Run Code Online (Sandbox Code Playgroud)
或者
DELETE /projects/api/v1/projects/{project id}/members/{member id}
Run Code Online (Sandbox Code Playgroud)
说白了,你使用的 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字段。
这里的额外好处是,管理员可以将用户的状态设置为“拒绝”、“撤销”、“暂停”等,并且不需要做任何特别的事情。尽管您确实需要确保您的服务器正在验证这些选择,否则您最终会遇到各种愚蠢的情况。您还可以允许管理员直接添加用户,而无需用户先请求权限。例如,如果管理员想要快速添加某人作为版主。
| 归档时间: |
|
| 查看次数: |
2885 次 |
| 最近记录: |