正如Which HTTP method should Login and Logout Actions use in a "RESTful" setup中接受的答案所述,建议在RESTful网络服务(例如/webservice/login/
)中使用HTTP POST(= create)进行登录。 POST既不是幂等的也不是安全的(http://restcookbook.com/HTTP%20Methods/idempotency/)。
然而注销如何(例如/ webservice / logout /)。我应该使用POST还是删除?
DELETE是幂等的 - 无论服务器上是否存在会话(或其他),它都会被删除,并且来自网络服务器的答案没有任何进一步的内容。这对我来说有点自然。
POST不是幂等的,并且类似问题的一些海报建议POST用于REST注销。我可以想到两个可能的原因:
如果会话不存在,服务器可能会返回404 - an 否则成功回答(两种答案)
注销可能触发,例如包含注销的数据库更新 用户等的信息,因此注销操作会 不是幂等的
那么哪种HTTP方法更适合注销 - POST或DELETE?
答案 0 :(得分:7)
通常,您的网络服务器既不应具有会话功能,也不应具有注销功能。 REST服务应该是无状态的,并且每个请求都会发送身份验证信息。
但是,如果您使用某个令牌对用户进行身份验证,并且您希望明确告诉服务器使令牌过期,和您希望以RESTful方式表达它,那么这将是有意义的对我说:
DELETE
我删除了/webservice/logout/
之类的网址对我没有意义。
发布包含一些信息的POST请求以发出'注销' action是一种合理的HTTP API设计方法,但它不是REST。