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

Bla*_*bam 1 rest http http-post http-delete

正如在"RESTful"设置中使用HTTP方法登录和注销操作所接受的答案所述,建议在RESTful Web服务(例如/webservice/login/)中使用HTTP POST(= create)进行登录.POST既不是幂等的也不是安全的(http://restcookbook.com/HTTP%20Methods/idempotency/).

但是如何注销(例如/ webservice/logout /).我应该使用POST还是DELETE?

DELETE是幂等的 - 无论服务器上是否存在会话(或其他),它都会被删除,并且来自网络服务器的答案没有任何进一步的内容.这对我来说有点自然.

POST不是幂等的,类似问题的一些海报建议POST用于REST注销.我可以想到两个可能的原因:

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

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

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

Eve*_*ert 7

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

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

  • 您的令牌表示在/ sessions/[id]等网址中
  • DELETE在该网址上发布了一个

我有一个/webservice/logout/你删除的网址是没有意义的.

发出带有一些信息以发出"注销"操作的POST请求是一种明智的HTTP API设计方法,但它不是REST.