gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 16:48:31 26 4
gpt4 key购买 nike

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com