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

Php REST API-HTTP状态代码有多个错误,php,ajax,api,rest,Php,Ajax,Api,Rest,我目前正在创建一个小API。我有一些错误条件,本例中的3个问题是: 使用POST以外的任何方法发出请求的用户 未经身份验证的用户 未找到实体;导致无法采取任何行动 按这个顺序。我最初决定可以为这些错误中的每一个分配一个状态码(即400、403和404,按顺序),但后来意识到我不能设置多个HTTP状态码 如何处理这个问题?我应该使用HTTP状态代码吗?在我看来,它应该按照您指定的顺序检查每个条件,如果其中一个条件失败,则应立即返回相应的错误代码 因此,只会返回1个错误代码。使用HTTP状态代码是可

我目前正在创建一个小API。我有一些错误条件,本例中的3个问题是:

  • 使用POST以外的任何方法发出请求的用户
  • 未经身份验证的用户
  • 未找到实体;导致无法采取任何行动
  • 按这个顺序。我最初决定可以为这些错误中的每一个分配一个状态码(即400、403和404,按顺序),但后来意识到我不能设置多个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。尼尔,这就是我最终选择的方法。