REST API标准实践

时间:2018-08-22 06:26:51

标签: rest

  

对于我在开发过程中遇到的情况有些困惑   其余API。

     

我想按POST请求获取我拥有的某些资源。   {contextPath} / {apiName} / {someResource}:POST

     

请求主体包含一些属性。例如:

{
    "property1": "value1",
    "property2": "value2",
    ....
    "propertyN": "valueN"
}
     

请求主体中的一个属性引用一个持久性对象   在我的database.value中的请求主体是它的主键   持久性对象。我有一条逻辑可以验证   持久性对象是否存在。如果可以,我将创建一个新资源   并返回201创建的http状态。如果持久性对象不是   找到后,我应该发送什么状态码作为响应?我的第一本能   是404。但是API的目的是创建一个资源   由于我的数据库中存在一些持久性对象,因此无法实现。因此   我不相信404。

1 个答案:

答案 0 :(得分:1)

  

因此我不相信404。

我也不是-404,非常宽松,引起了对请求目标的关注,但是在这里,您希望引起对请求主体的关注。

T A指出,400是可接受的答案。

  

客户必须理解第一个数字所指示的任何状态码的类别,并且将无法识别的状态码视为等同于该类别的x00状态码,但接收者不得缓存响应带有无法识别的状态代码。

如果您需要更加精确,请HTTP status code registry记录标准化选项。我看到的最接近的匹配是409 Conflict

  

409(冲突)状态代码表示请求无法      由于与目标的当前状态冲突而完成      资源。

422 Unprocessable Entity

  

422(不可处理实体)状态代码表示服务器      了解请求实体的内容类型(因此      415(不受支持的媒体类型)状态码不正确),并且      请求实体的语法正确(因此为400(错误请求)      状态代码不正确),但无法处理其中的内容      说明。例如对于如果XML可能会出现此错误情况      请求正文包含格式正确(即语法正确)的内容,但      语义错误的XML指令。