HTTP RESTful Web服务注销:哪个是正确的或更好的做法 - POST还是DELETE?

时间:2016-10-25 16:29:47

标签: rest http http-post http-delete

正如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注销。我可以想到两个可能的原因:

  1. 如果会话不存在,服务器可能会返回404 - an 否则成功回答(两种答案)

  2. 注销可能触发,例如包含注销的数据库更新     用户等的信息,因此注销操作会     不是幂等的

  3. 那么哪种HTTP方法更适合注销 - POST或DELETE?

1 个答案:

答案 0 :(得分:7)

通常,您的网络服务器既不应具有会话功能,也不应具有注销功能。 REST服务应该是无状态的,并且每个请求都会发送身份验证信息。

但是,如果您使用某个令牌对用户进行身份验证,并且您希望明确告诉服务器使令牌过期,您希望以RESTful方式表达它,那么这将是有意义的对我说:

  • 您的令牌会在/ sessions / [id]
  • 等网址中显示
  • 您在该网址上发出DELETE

我删除了/webservice/logout/之类的网址对我没有意义。

发布包含一些信息的POST请求以发出'注销' action是一种合理的HTTP API设计方法,但它不是REST。