我目前正在创建一个小型API。我有一些错误条件,在这种情况下有问题的是:
按此顺序。我最初决定可以为每个错误分配一个状态代码(即按顺序为400,403和404),但后来意识到我无法设置多个HTTP状态代码。
如何解决这个问题?我应该使用HTTP状态代码吗?
答案 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
并处理错误。