如 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 注销。我可以想到两个可能的原因:
如果 session 不存在,服务器可能会返回 404 - 一个 否则成功回答(两种回答)
注销可能会触发例如包含注销的数据库更新 用户等的信息,因此注销操作将 不是幂等的
那么哪种 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/