假设我有一个RESTful身份验证端点:
http://example.com/api/v1/auth
POST
请求允许登录。请求得到反对,HTTP 200响应正确登录或403错误。DELETE
请求允许注销。很明显,在成功注销后,我应该返回HTTP 200.如果用户尝试在不登录的情况下注销,我应该返回什么HTTP响应代码?
答案 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
。