REST API 批准/拒绝用户

Toa*_*ran 7 rest

构建用于批准或拒绝用户的 RESTful 资源的正确方法是什么?

此资源旨在由管理员审查用户。管理员可以批准或拒绝用户请求。请求需要具有user_id并且updated_status可能是approvedrejected

我拥有的两个选项是:

1)将其分类为两个api:

PUT api/users/:user_id/approve/
PUT api/users/:user_id/reject/
Run Code Online (Sandbox Code Playgroud)

或者

2)

PUT api/users/:user_id/review/
   -status passed through request body
Run Code Online (Sandbox Code Playgroud)

任何意见或建议将不胜感激。

Sam*_*Toh 5

我不记得人们通常遵循的具体 REST API 设计标准。我怀疑有什么,但你确实想知道一些anti-patterns被认为是“糟糕的 REST 设计”。

1)过度依赖querystring

GET http://api.example.com/services?op=approve_request&userid=12345
Run Code Online (Sandbox Code Playgroud)

这是一个典型的糟糕设计,因为 APIservices过于通用且缺乏描述性。

基本上,您只需使用 API 就可以做任何事情services。此外,HTTP 方法的使用也是不正确的,GET这表明 fetch/retrieve 应该保留用于其目的。对于更新应该是PUT并且创建应该是POST

另一个缺点是可维护性,底层代码肯定会是一场噩梦,因为它的目的太通用了。

2) 错误的资源命名。

GET http://api.example.com/update_customer/12345
Run Code Online (Sandbox Code Playgroud)

这个是名词和动词结合起来的update_customer。通常最好用API名词来命名 your。例如customer/account

这更实用,因为DELETE通过关闭帐户PUT来修改帐户的详细信息,可以在请求的有效负载中描述修改详细信息。

GET另外,此处不应使用HTTP 方法。

一般来说,您不需要在 URL 中使用“更新”、“创建”或“删除”等动词,因为预期的操作可以从 HTTP 方法动词派生。

3)令人困惑的动词 PUT http://api.example.com/customers/12345/update

同样,动词不应包含在 中URL。这很令人困惑,因为你有PUThttp 方法,而且动词update也在那里。


建议的解决方案

对于你的情况。你拥有userrequest作为资源。我认为API可以设计为;

批准请求

PUT http://api.example.com/user/12345/request

创建新请求

POST http://api.example.com/user/12345/request

拒绝请求

DELETE http://api.example.com/user/12345/request

不要删除实际请求,而是将状态更新为Reject