rest - HTTP RESTful Web 服务注销 : Which is correct or better practice - POST or DELETE?

标签 rest http http-post http-delete

Which HTTP method should Login and Logout Actions use in a "RESTful" setup 中接受的答案所述建议使用 HTTP POST(= 创建)登录 RESTful 网络服务(例如 /webservice/login/)。 POST 既不幂等也不安全 ( http://restcookbook.com/HTTP%20Methods/idempotency/ )。

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

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

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

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

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

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

最佳答案

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

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

  • 您的 token 在类似/sessions/[id] 的 url 中表示
  • 您在该 url 上发出 DELETE

对我来说,您删除了一个像 /webservice/logout/ 这样的 url 是没有意义的。

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

关于rest - HTTP RESTful Web 服务注销 : Which is correct or better practice - POST or DELETE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40245154/

相关文章:

c++ - 通过 ifstream 提供一个 png 文件

angularjs - 如何在我的多部分/表单数据请求上指定边界?

c# - 如何通过 HTTP GET ASP.NET C# 获取链接中的参数

java - Spring Rest 按后缀/文件扩展名过滤

javascript - 如何查询XMLHttpRequest的方法类型?

java - 如何使用 HttpURLConnection 让此 HTTP/1.1 POST 在 Java 中工作?

python - 如何使用单个 multipartform post header key 上传可变数量的文件

c# - 类型 xxxx 不应使用 xmlinclude 或 soapinclude

asp.net-mvc - odata 和 web api 在同一个 Controller 中

javascript - 浏览器中来自 Javascript 的 REST API 身份验证