我的API方法应该返回401还是204?

时间:2019-09-01 15:44:48

标签: api-design

我有一个用JavaScript编码的客户端。该客户端在我的服务器上调用用PHP编码的API方法。该API方法是“ GET / user”,可以返回200状态或204状态。

200状态适用于经过身份验证的用户。 204状态适用于来宾用户,将来可能会变成200,其中包含有关这些来宾用户的信息(例如前端授权)。

我遇到了一些开发人员,他们认为如果用户是访客,我的API应该返回401状态。但是我说没有客户端错误,因为客户端只是询问身份验证状态以及有关非访客用户的一些信息。

所以我的问题很简单:我的API中是否存在误解?

2 个答案:

答案 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响应。要告诉客户端登录状态,您应该使用响应正文,而不是状态代码。