REST API - 具有多个错误的HTTP状态代码

时间:2014-01-06 23:12:27

标签: php ajax api rest

我目前正在创建一个小型API。我有一些错误条件,在这种情况下有问题的是:

  1. 使用POST以外的任何方法发出请求的用户
  2. 未经过身份验证的用户
  3. 未找到的实体;导致无法采取任何行动。
  4. 按此顺序。我最初决定可以为每个错误分配一个状态代码(即按顺序为400,403和404),但后来意识到我无法设置多个HTTP状态代码。

    如何解决这个问题?我应该使用HTTP状态代码吗?

2 个答案:

答案 0 :(得分:3)

在我看来,它应该按照你指定的顺序检查每个条件,如果其中一个条件失败,应立即返回相应的错误代码。

因此只返回1个错误代码。

答案 1 :(得分:2)

使用HTTP状态代码是可以的,但这取决于谁在使用您的API。有时最好只返回200 OK然后在正文中包含错误信息。

使用状态代码

如果您使用状态代码只是返回遇到的第一个错误,则无论如何都无法进一步处理请求,所以在伪:

if (request is not POST) return 405; //abort here
//we know request is POST here
if (request not auhtorized) return 401; //abort here
//we know request is POST and authorized
if (request requests a not exisiting entity) return [404, 422, ..., 5xx] either will do; // abort here
// we now know the request is POST, autorized and requests valid information
processRequest();

没有状态代码

作为替代方案,由于您标记了ajax,我假设您正在返回JSON,因此只需返回200 OK并在JSON答案中包含字段success : [true|false]errorMessage : ["Not POST"|"Bad Auth"|"Bad Request or Unknown resource"|"OK"]

您也可以将两种方式结合使用,但根据ajax客户端的不同,所有状态代码都可以正常使用。根据答案中的信息,您需要做的就是检查是否success === true并处理错误。