正确的HTTP状态代码到错误的输入

Mar*_*era 149 api validation http

什么是最佳HTTP响应代码不报告200(一切正常)但输入错误?

比如,你向服务器提交一些数据,它会回应你的数据是错误的

使用500看起来更像服务器问题
使用200警告/错误响应文本是坏的(允许缓存,一切都不好)
使用204和返回任何东西,可能是好的(但很好支持?)如果请求的路径(脚本)可用,则
使用404错误在适当的地方

Kee*_*ego 173

我们在制作API时遇到了同样的问题.我们正在寻找相当于一个的HTTP状态代码InvalidArgumentException.在阅读下面的源文章后,我们最终使用了422 Unprocessable Entity哪些状态:

422(不可处理实体)状态代码表示服务器理解请求实体的内容类型(因此415(不支持的媒体类型)状态代码是不合适的),并且请求实体的语法是正确的(因此400(错误请求) )状态代码不合适)但无法处理包含的指令.例如,如果XML请求主体包含格式正确(即语法正确)但语义错误的XML指令,则可能发生此错误情况.

来源:https://www.bennadel.com/blog/2434-http-status-codes-for-invalid-data-400-vs-422.htm


esa*_*saj 135

以4(4xx)开头的代码用于客户端错误.也许400(不良请求)可能适合这种情况?http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html中的定义说:

"由于语法错误,服务器无法理解请求.客户端不应该在没有修改的情况下重复请求."

  • "400 Bad Request"并不错,但通常应该保留格式错误的语法.OP似乎更关注具有格式良好的语法但无效值的情况.加400是一个相当普遍的"哦,糟糕的东西是不对的"响应代码,你可能想要区别于错误输入的特定情况. (10认同)
  • 请注意,措辞已在RFC 7231中更新,并且“由于语法错误,服务器无法理解该请求”已更新为“由于某些东西被认为是客户端,服务器无法或不会处理该请求”错误(例如,格式错误的请求语法,无效的请求消息框架或欺骗性的请求路由)”。 (2认同)

Mob*_*Mob 13

除了RFC规范, 您还可以看到这一点.查看推特和Facebook的回复.

https://developer.twitter.com/en/docs/ads/general/guides/response-codes

http://www.fb-developers.info/tech/fb_dev/faq/general/gen_10.html

  • 如果从链接中提取示例,您可能会得到更多的赞成. (18认同)

Ale*_*tin 6

409 Conflict 可能是一个可接受的解决方

根据:https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

由于与资源的当前状态冲突,无法完成请求.此代码仅在预期用户可能能够解决冲突并重新提交请求的情况下才允许.响应主体应该包含足够的信息供用户识别冲突的来源.理想情况下,响应实体将包含足够的信息供用户或用户代理解决问题; 但是,这可能是不可能的,也不是必需的.

该文档继续举例:

冲突最有可能发生在响应PUT请求时.例如,如果正在使用版本控制并且包含PUT的实体更改为与早期(第三方)请求所产生的资源冲突的资源,则服务器可能会使用409响应来指示它无法完成请求.在这种情况下,响应实体可能包含由响应Content-Type定义的格式的两个版本之间的差异列表.


在我的例子中,我想通过API将一个字符串(必须是唯一的)输入数据库.在将它添加到数据库之前,我正在检查它是否已经在数据库中.

如果是的话,我会回来的"Error: The string is already in the database", 409.

我相信这是OP想要的:适用于数据未通过服务器标准的错误代码.