我正在试图弄清楚如何最好地布置一组Restlet API。 我有一个User实体,它可能有标准的CRUD操作,非常适合休息,但还有其他的实体,如“重置密码”或“终止”。
最好的解决方法是什么?
这就是我的想法:
/1.0/user/update //perhaps this would just be a PUT on /1.0/user
/1.0/user/resetPassword //This would reset the password, but also send an email.
/1.0/user/terminate //This might do some additional cleanup
然后我会创建一个真正附加的UserResource
/1.0/user/{actionType}
处理代码可能如下(psuedo):
action = request.getAttributes().get("actionType");
if (action == "update") {
do update
} elif (action == "resetpassword") {
do resetpassword
} elif (action == "terminate") {
do terminate
}
真的不好主意?真的忍者的想法?
答案 0 :(得分:1)
我认为这是一个好主意。如果您希望应用程序是RESTful的,那么您必须在User资源的表示中提供链接,并将它们记录为执行所选操作的URI。
Sun Cloud API does just this:
正如您所看到的,如果您使用/1.0/user/resetPassword
或/1.0/user?op=resetPassword
或/1.0/resetPassword?userId=xyzzy
有点无关紧要,因为客户真的不应该关心,它仅仅跟随表示中的链接。
此外,请记住使用POST进行此类操作,因为它们通常不是幂等的,并且可能有副作用。
答案 1 :(得分:1)
这些怎么样?
PUT /user/bob
DELETE /user/bob/password
DELETE /user/bob
并且不要忘记mogsie的观点,即客户端应该从其他文档中发现这些URL,它不应该事先知道它们。