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

HTTP RESTful Webservice Logout: Which is correct or better practice - POST or DELETE?

如 it is recommendable to use HTTP POST (= create) for a login in a RESTful webservice (e.g. /webservice/login/). POST is neither idempotent nor safe (http://restcookbook.com/HTTP%20Methods/idempotency/ 中接受的答案所述。

但是注销怎么样(例如/webservice/logout/)。我应该使用 POST 还是 DELETE?

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

POST 不是幂等的,一些关于类似问题的发帖者建议 POST 用于 REST 注销。我可以想到两个可能的原因:

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

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

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

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

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

  • 您的令牌在 url 中表示,例如 /sessions/[id]
  • 你在 url
  • 上发出 DELETE

我觉得你删除了 /webservice/logout/ 之类的 url。

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