Php REST API-HTTP状态代码有多个错误
我目前正在创建一个小API。我有一些错误条件,本例中的3个问题是:Php REST API-HTTP状态代码有多个错误,php,ajax,api,rest,Php,Ajax,Api,Rest,我目前正在创建一个小API。我有一些错误条件,本例中的3个问题是: 使用POST以外的任何方法发出请求的用户 未经身份验证的用户 未找到实体;导致无法采取任何行动 按这个顺序。我最初决定可以为这些错误中的每一个分配一个状态码(即400、403和404,按顺序),但后来意识到我不能设置多个HTTP状态码 如何处理这个问题?我应该使用HTTP状态代码吗?在我看来,它应该按照您指定的顺序检查每个条件,如果其中一个条件失败,则应立即返回相应的错误代码 因此,只会返回1个错误代码。使用HTTP状态代码是可
如何处理这个问题?我应该使用HTTP状态代码吗?在我看来,它应该按照您指定的顺序检查每个条件,如果其中一个条件失败,则应立即返回相应的错误代码
因此,只会返回1个错误代码。使用HTTP状态代码是可以的,但这取决于谁在使用您的API。有时最好只返回200OK,然后在正文中包含错误信息 带有状态代码 如果使用状态代码,只返回遇到的第一个错误,那么在进一步处理请求时没有任何用处,因此在pseudo中:
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
,否则处理错误。我实际上会切换1和2的顺序。你不应该透露超过必要的系统信息。另一个解决方案,因为它是一个API,将状态代码设置为200,并返回一个错误描述,准确解释出错的原因@SaniHuttunen。尼尔,这就是我最终选择的方法。