我有一个用JavaScript编码的客户端。该客户端在我的服务器上调用用PHP编码的API方法。该API方法是“ GET / user”,可以返回200状态或204状态。
200状态适用于经过身份验证的用户。 204状态适用于来宾用户,将来可能会变成200,其中包含有关这些来宾用户的信息(例如前端授权)。
我遇到了一些开发人员,他们认为如果用户是访客,我的API应该返回401状态。但是我说没有客户端错误,因为客户端只是询问身份验证状态以及有关非访客用户的一些信息。
所以我的问题很简单:我的API中是否存在误解?
答案 0 :(得分:0)
我都不建议。
看看section 10 of the HTTP/1.1 RFC,看看是否可以将响应代码与返回的内容进行匹配。
如果您要从GET / users返回数据(无论经过身份验证的客户端还是访客),则204 No Content
不适合:
204响应必须不包含消息正文,因此始终由标头字段之后的第一个空行终止。
401 Unauthorized
仅在被认证的客户端只能访问被调用的方法时才适用。您实质上是在告诉客户他们做了不允许做的事情。
如果期望API的客户端既是经过身份验证的用户又是来宾用户,我建议将200 OK
返回给这两个客户端,并在返回的正文中明确区分任何内容。
答案 1 :(得分:0)
我完全同意@Johnson的回答。请勿更改状态码的含义。如果请求有效,则应返回200。
这里的问题是您定义的端点不是面向资源的端点(问题= REST API设计准则实际上并不适用,因为它们主要集中在面向资源的API上)。在您的情况下,/user
似乎返回状态而不是资源。 401
有助于告诉客户端它未经身份验证,因此无法获取请求的资源。
在您的情况下,客户端检查其登录状态只是一个信息端点,从技术角度来看,这两种状态(已登录和未登录)都是成功的答案,因此需要200
响应。要告诉客户端登录状态,您应该使用响应正文,而不是状态代码。