构建用于批准或拒绝用户的RESTful资源的正确方法是什么?
此资源旨在由管理员审核用户。管理员可以批准或拒绝用户请求。该请求需要user_id
和updated_status
,可能是approved
或rejected
。
我有两个选择:
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
非常感谢任何建议或建议。
答案 0 :(得分:1)
为了使这更加RESTful,你有2个真正的选择:
approved
或status
属性,只允许管理员修改。api/users/:user_id/approve
的资源,而不是api/users/:user_id/reject
和api/users/:user_id/approval-status
。此资源应包含告知客户端用户是否已获批准的实际信息,管理员可能会更改此信息。根据经验,如果您的网址中有动词,您可能会做一些不是RESTful的事情。您的案例中的动词为approve
,reject
和review
,绝对是错误的。
答案 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
也在那里。
对于你的情况。您有user
和request
作为资源。
我认为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
。