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 注销。我可以想到两个可能的原因:
如果会话不存在,服务器可能 return 一个 404 - 一个
否则成功回答(两种回答)
注销可能会触发,例如包含注销的数据库更新
用户等的信息,因此注销操作将
不是幂等的
那么哪种 HTTP 方法更适合注销 - POST 或删除?
通常您的网络服务器不应具有会话或注销功能。 REST 服务应该是无状态的,身份验证信息随每个请求一起发送。
但是,如果您使用某些令牌对用户进行身份验证,并且您希望明确告诉服务器使令牌过期,和您希望在 RESTful 方式,这对我来说是有意义的:
- 您的令牌在 url 中表示,例如 /sessions/[id]
- 你在 url
上发出 DELETE
我觉得你删除了 /webservice/logout/
之类的 url。
发出带有一些信息的 POST 请求以发出 'logout' 操作是一种明智的 HTTP API 设计方法,但它不是 REST。
如 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 注销。我可以想到两个可能的原因:
如果会话不存在,服务器可能 return 一个 404 - 一个 否则成功回答(两种回答)
注销可能会触发,例如包含注销的数据库更新 用户等的信息,因此注销操作将 不是幂等的
那么哪种 HTTP 方法更适合注销 - POST 或删除?
通常您的网络服务器不应具有会话或注销功能。 REST 服务应该是无状态的,身份验证信息随每个请求一起发送。
但是,如果您使用某些令牌对用户进行身份验证,并且您希望明确告诉服务器使令牌过期,和您希望在 RESTful 方式,这对我来说是有意义的:
- 您的令牌在 url 中表示,例如 /sessions/[id]
- 你在 url 上发出
DELETE
我觉得你删除了 /webservice/logout/
之类的 url。
发出带有一些信息的 POST 请求以发出 'logout' 操作是一种明智的 HTTP API 设计方法,但它不是 REST。