对于我在开发过程中遇到的情况有些困惑 其余API。
我想按POST请求获取我拥有的某些资源。 {contextPath} / {apiName} / {someResource}:POST
请求主体包含一些属性。例如:
{ "property1": "value1", "property2": "value2", .... "propertyN": "valueN" }
请求主体中的一个属性引用一个持久性对象 在我的database.value中的请求主体是它的主键 持久性对象。我有一条逻辑可以验证 持久性对象是否存在。如果可以,我将创建一个新资源 并返回201创建的http状态。如果持久性对象不是 找到后,我应该发送什么状态码作为响应?我的第一本能 是404。但是API的目的是创建一个资源 由于我的数据库中存在一些持久性对象,因此无法实现。因此 我不相信404。
答案 0 :(得分:1)
因此我不相信404。
我也不是-404,非常宽松,引起了对请求目标的关注,但是在这里,您希望引起对请求主体的关注。
T A指出,400是可接受的答案。
客户必须理解第一个数字所指示的任何状态码的类别,并且将无法识别的状态码视为等同于该类别的x00状态码,但接收者不得缓存响应带有无法识别的状态代码。
如果您需要更加精确,请HTTP status code registry记录标准化选项。我看到的最接近的匹配是409 Conflict
409(冲突)状态代码表示请求无法 由于与目标的当前状态冲突而完成 资源。
422(不可处理实体)状态代码表示服务器 了解请求实体的内容类型(因此 415(不受支持的媒体类型)状态码不正确),并且 请求实体的语法正确(因此为400(错误请求) 状态代码不正确),但无法处理其中的内容 说明。例如对于如果XML可能会出现此错误情况 请求正文包含格式正确(即语法正确)的内容,但 语义错误的XML指令。