我的项目正在从浏览器返回JSON到Ajax调用 . 我想知道正确的状态代码是什么用于发送回无效(但成功处理)数据提交的响应 .
例如,jQuery在发出Ajax请求时有以下两个特定的回调:
success
:200 / 2xx状态代码与响应一起发送时触发 .
error
:在4xx,5xx等状态下,状态代码随响应一起被触发 .
如果用户尝试创建一个新的“Person”对象,我会在成功时发回新创建的对象的JSON表示,从而允许javascript访问新对象的必要唯一ID等 . 当然,这会被发送拥有200状态代码 .
如果用户提交格式错误或无效的数据(例如,无效/不完整的“名称”字段),我想通过JSON发回验证错误消息 . (我不明白为什么这会是一件坏事) .
My question is: 这样做,我应该发送 200 状态代码,因为我成功处理了他们的无效数据?因此,我将使用jQuery success
回调,但只是检查错误...
Or ,我应该使用 4xx 状态代码,也许'Bad Request',因为他们发给我的数据无效? (因此,使用 error
回调来执行必要的客户端通知) .
2 回答
我同意400 Bad Request回复 .
为了获得灵感,你可以看看Twitter(广泛使用的JSON服务)如何做到这一点:https://dev.twitter.com/overview/api/response-codes
代码文本说明
200
OK
- 成功!304
Not Modified
- 没有新的数据要返回 .400
Bad Request
- 请求无效或无法以其他方式提供 . 随附的错误消息将进一步解释 . 没有身份验证的请求被视为无效,并将产生此响应 .401
Unauthorized
- 身份验证凭据丢失或不正确 . 在其他情况下也会返回(例如,对API v1 endpoints 的所有调用都返回401) .403
Forbidden
- 请求已被理解,但已被拒绝或不允许访问 . 随附的错误消息将解释原因 . 由于更新限制而拒绝请求时使用此代码 . 返回此状态的其他原因与下表中的响应代码一起列出 .404
Not Found
- 请求的URI无效或请求的资源(例如用户)不存在 . 当请求的方法不支持请求的格式时,也会返回 .406
Not Acceptable
- 在请求中指定了无效格式时返回 .410
Gone
- 此资源消失了 . 用于指示API endpoints 已关闭 .420
Enhance Your Calm
当应用程序受到速率限制时返回 .422
Unprocessable Entity
- 无法处理上传到POST帐户/ update_profile_banner的图像时返回 .429
Too Many Requests
- 由于应用程序的资源限制已用尽而无法提供请求时返回 . 请参阅速率限制 .500
Internal Server Error
=有些东西坏了 . 如果其他人遇到类似问题,请将您的请求的其他详细信息发布到开发人员论坛 .502
Bad Gateway
- Twitter已关闭或正在升级 .503
Service Unavailable
- Twitter服务器已启动,但请求超载 . 稍后再试 .504
Gateway Timeout
- Twitter服务器已启动,但由于堆栈中的某些故障,无法提供请求 . 稍后再试 .我会发回'400 Bad Request' Headers ,以回应json中出现问题的信息 . 然后用jquerys $ .ajaxError()事件处理程序捕获事件并解析我得到的错误消息,以便向最终用户提供良好的反馈 .
您可以阅读有关ajaxError事件处理程序here的更多信息!