REST API批准/拒绝用户

时间:2017-07-24 03:35:18

标签: rest

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

此资源旨在由管理员审核用户。管理员可以批准或拒绝用户请求。该请求需要user_idupdated_status,可能是approvedrejected

我有两个选择:

1)将其分为两个apis:

PUT api/users/:user_id/approve/
PUT api/users/:user_id/reject/

OR

2)

PUT api/users/:user_id/review/
   -status passed through request body

非常感谢任何建议或建议。

2 个答案:

答案 0 :(得分:1)

为了使这更加RESTful,你有2个真正的选择:

  1. 您向用户添加approvedstatus属性,只允许管理员修改。
  2. 如果您想要单独的资源路由,则不应创建2个描述操作的资源,而是创建描述状态的单个资源。因此,应该有一个名为api/users/:user_id/approve的资源,而不是api/users/:user_id/rejectapi/users/:user_id/approval-status。此资源应包含告知客户端用户是否已获批准的实际信息,管理员可能会更改此信息。
  3. 根据经验,如果您的网址中有动词,您可能会做一些不是RESTful的事情。您的案例中的动词为approverejectreview,绝对是错误的。

答案 1 :(得分:1)

我无法回忆一下人们通常会遵循的具体REST API设计标准。我怀疑有没有,但你确实想知道一些anti-patterns被认为是"糟糕的REST设计"。

1)过分依赖querystring

GET http://api.example.com/services?op=approve_request&userid=12345

这是一个经典的糟糕设计,因为API services过于通用且不具描述性。

你基本上可以只使用API​​ services做任何事情。此外,HTTP方法的使用也是不正确的,描述fetch / retrieve的GET应该保留用于其目的。如需更新,则应为PUT,创建时应为POST

另一个不好的一点是可维护性,因为它过于笼统,所以发起编码肯定会成为一场噩梦。

2)资源命名错误。

GET http://api.example.com/update_customer/12345

这个名词和动词合并update_customer。通常最好在名词中命名API。例如。 customer/account

这更实际,因为通过关闭帐户DELETE来修改帐户的详细信息可以表示PUT,其中修改详细信息可以在请求的有效负载中进行描述。< / p>

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

一般情况下,您不需要使用&quot;更新&#39;等创造&#39;或者&#39;删除&#39;在URL中,因为预期的操作可以从HTTP方法动词派生。

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

同样,动词不应包含在URL中。这很令人困惑,因为你有PUT http方法,动词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