用户提交的无效数据的HTTP响应是什么?

时间:2011-09-07 20:04:21

标签: php javascript json http

我正在尝试使用JSON和http响应代码。我通过AJAX请求提交表单,显然我需要验证服务器端的数据。

如果帖子成功,我的想法是回复“200 OK”回复(确认消息为正文)。如果用户发送的数据无效,我不知道该怎么回应。

7 个答案:

答案 0 :(得分:11)

您可以发送400: Bad Request标头。如果这不是你的一杯茶,也许请查看W3C's Status Code Definitions

答案 1 :(得分:7)

发送回JSON对象:

$message = array(
   'error' => true,
   'code' => 'some error number relevant to you',
   'message' => 'A nice human-readable+relevant error message'
);

echo json_encode($message);

我更喜欢以这种方式向服务发送信号错误。摆弄HTTP状态代码似乎不对,因为关于实际HTTP请求本身的一切工作正常 - 只是请求不符合服务的期望。

答案 2 :(得分:7)

只需实施JSON-RPC等标准协议即可。它有错误处理,参数传递等。

请求:

{"method": "postMessage", "params": ["Hello all!"], "id": 99}

响应:

{"result": 1, "error": null, "id": 99}

出错:

{"result": null, "error": "Duplicate Message", "id": 99}

非常灵活,标准 ......

答案 3 :(得分:1)

取决于API的用途。如果它是你的(私人),那么以Nightfirecat建议的HTTP状态400回答。如果是公共API,则发送有意义的错误消息以帮助开发人员。

答案 4 :(得分:0)

以下是HTTP状态代码的complete list。第一个考虑到你的情况的是400 Bad Request,但这通常用于指示HTTP语法中的错误而不是正文内容中的错误。但是,如果没有更多信息,我会选择那个。

在特定情况下,根据您收到的数据的确切性质,我可以看到403,404,410,413中的任何一个,或者其他可能是适当的响应。

答案 5 :(得分:0)

我通常看到这样做的方式是让HTTP响应代码用于与HTTP协议相关的事情,而不是用于应用程序错误。然后,从HTTP响应中,返回指示成功或失败的JSON以及任何所需的返回数据。例如,您可以返回:

{
    statusCode: 0,     // 0 = successful, negative value = error code
    statusMsg: "success",   // you can put any human readable status msg here
    data: {
        confirmationMsg: "Data sent successfully."
    }
}

然后,查看响应的代码首先查看statusCode,并根据是否成功,查找其他数据。

如果您想象调用者将如何使用此响应,我发现应用程序级错误与传输级错误的代码路径不同是很有价值的。如果您考虑jQuery.ajax()电话。当http状态代码是成功的代码时,将调用成功处理程序。当http状态代码不成功时,将调用错误处理程序。这样做,您可以使用一个ajax错误处理程序为所有传输级错误提供通用错误处理程序,然后您可以通过检查返回的JSON中的应用程序级状态代码,将您的特定应用程序级错误处理放在成功处理程序中。如果你使用错误400,那么你必须为每个ajax调用编写一个完整的不同错误处理程序来处理传输错误和应用程序级错误。

答案 6 :(得分:0)

400(通用),或者如果您想更具体:http://greenbytes.de/tech/webdav/rfc4918.html#STATUS_422