如Which HTTP method should Login and Logout Actions use in a "RESTful" setup中接受的答案所述,建议使用http post(=create)登录restful webservice(例如/webservice/login/
)。post既不等幂也不安全(http://restcookbook.com/HTTP%20Methods/idempotency/)。
不过,注销如何(例如/webservice/logout/)。我应该使用post还是delete?
删除是幂等的——无论服务器上是否存在会话(或任何),它都被删除,并且来自Web服务器的答案是没有任何内容的OK。我觉得这很自然。
post不是等幂的,一些关于类似问题的海报建议post进行rest注销。我可以想到两个可能的原因:
如果会话不存在,服务器可能返回404—AN。
否则回答成功(两种回答)
注销可能会触发,例如包含注销的数据库更新
用户等的信息,因此注销操作将
不是等幂的
那么,哪个http方法更适合注销post或删除?
最佳答案
通常,您的web服务器既不应该有会话,也不应该有注销功能。rest服务应该是无状态的,身份验证信息应该随每个请求一起发送。
但是,如果您正在使用某个令牌对用户进行身份验证,并且您希望显式地告诉服务器使令牌过期,并且您希望以restful的方式来表示这一点,那么我认为:
您的令牌在url中表示,如/sessions/[id]
你在那个网址上发了一个DELETE
。
对我来说,你删除了一个类似于/webservice/logout/
的url是没有意义的。
使用一些信息发出post请求以发出“注销”操作是一种合理的http api设计方法,但这不是rest。