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

ric*_*h97 7 javascript php json http

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

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

Nig*_*cat 11

你可以发一个400: Bad Request标题.如果这不是你的一杯茶,也许可以查看W3C的状态代码定义

  • 如果这不是你的一杯茶:**418我是一个茶壶** (14认同)

Mar*_*c B 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);
Run Code Online (Sandbox Code Playgroud)

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

  • 实际上,http状态代码400就是为了这个,所以它应该"看似正确".但是,如果它是一个公共API,它对开发人员没有多大帮助. (2认同)
  • Marc B - 这是滥用HTTP作为隧道.它是一个应用层协议,因此4xx是正确的错误类. (2认同)
  • Marc B - 胡说八道.HTTP是关于访问资源的.服务器内部如何工作完全无关紧要.重要的是HTTP URI标识的资源以及客户端请求的操作. (2认同)

irc*_*ell 7

只需实现像JSON-RPC这样的标准协议.它有错误处理,参数传递等.

请求:

{"method": "postMessage", "params": ["Hello all!"], "id": 99}
Run Code Online (Sandbox Code Playgroud)

响应:

{"result": 1, "error": null, "id": 99}
Run Code Online (Sandbox Code Playgroud)

并且出错:

{"result": null, "error": "Duplicate Message", "id": 99}
Run Code Online (Sandbox Code Playgroud)

它非常灵活,是标准的 ......