尝试注销而未登录后返回的HTTP状态

时间:2016-03-25 12:33:17

标签: rest http status

假设我有一个RESTful身份验证端点:

http://example.com/api/v1/auth

  • 带有电子邮件和密码的POST请求允许登录。请求得到反对,HTTP 200响应正确登录或403错误。
  • DELETE请求允许注销。

很明显,在成功注销后,我应该返回HTTP 200.如果用户尝试在不登录的情况下注销,我应该返回什么HTTP响应代码?

2 个答案:

答案 0 :(得分:11)

很明显,您应该返回状态200以成功注销?一点也不。如果您没有返回具有该状态的响应,那么204或205将更合适(205 =“无内容,刷新”),因为没有要返回的内容,并且客户端应该刷新其视图。

如果用户未登录:请考虑客户对此的看法。客户端不知道用户没有登录。或者客户端不确定用户是否未登录,并以其他方式登出。通话结束后,用户退出。提供与以前登录用户不同的状态的目的是什么?即使客户端正确检测到这样的状态,客户端可以做些什么呢?

我会给出完全相同的回复。不要将其视为“我已退出”,将其视为“我尚未登录”。如果确实想要报告它,请返回状态200,其中包含已登录用户和未登录用户的不同内容。

答案 1 :(得分:0)

您问题的简短答案是 404 。原因如下:DELETE的意思是“删除由URL标识的资源 ”,因此,对DELETE /api/v1/auth的成功请求应删除/api/v1/auth所标识的内容,从而导致后续请求DELETE /api/v1/auth返回404 Not Found

DELETE的问题在于,理想情况下,/api/v1/auth与任何其他URL一样,应该代表相同的资源,而不管当前用户是否登录以及该用户的身份如何。登录用户;因此,如果一个用户要求服务器DELETE占用此资源并收到 2xx 响应,则任何用户 POST /api/v1/auth的任何后续请求(登录)或DELETE /api/v1/auth(退出)应失败并返回404。

因此,我认为最好通过POST实现两种不同的资源来实现登录和注销。 /api/v1/auth/login/api/v1/auth/logout