Rest 失败的post请求的api状态代码

Rest 失败的post请求的api状态代码,rest,Rest,我有一个post api调用,该调用当前在我的预订系统中创建约会 如果api调用发送约会请求,并且api可以成功创建约会,则api将返回201已创建状态代码 当前,如果没有创建约会请求(由于各种原因,如时间不再可用或房间正在使用),api将返回400错误请求状态代码 “400错误请求-响应状态代码表示服务器无法或将不会处理请求,原因是被认为是客户端错误” 发送的数据不是无效语法,可能会重新发送并成功 对于创建资源失败,是否有更相关的状态代码。在这种情况下,422不可处理实体是否是有效的响应?如果

我有一个post api调用,该调用当前在我的预订系统中创建约会

如果api调用发送约会请求,并且api可以成功创建约会,则api将返回201已创建状态代码

当前,如果没有创建约会请求(由于各种原因,如时间不再可用或房间正在使用),api将返回400错误请求状态代码

“400错误请求-响应状态代码表示服务器无法或将不会处理请求,原因是被认为是客户端错误”

发送的数据不是无效语法,可能会重新发送并成功


对于创建资源失败,是否有更相关的状态代码。在这种情况下,422不可处理实体是否是有效的响应?

如果错误是由于服务器上出现了错误,并且客户端没有故障,则可以使用
5xx
范围(服务器错误)
4xx
错误保留给客户端引起的错误。在这种情况下,通常使用
500内部服务器错误

因此:

  • 客户端故障-->
    4xx

  • 服务器故障-->
    5xx


    • 409可以适合此用例(以及我个人的偏好):

      “由于与当前请求冲突,请求无法完成 目标资源的状态。此代码用于以下情况: 用户可能能够解决冲突并重新提交 请求。”

      通常在PUT中使用,但在这种情况下可以工作。例如,他们可以更改请求中的建议时间。或者,如果房间可用,他们可以稍后重试

      422还可用于指示字段级错误

      无论哪种方式,一个重要的事情是伴随着一个良好的错误消息指示问题。从rfc7231:

      服务器应发送一个包含以下内容解释的表示: 错误情况,以及它是暂时的还是永久的情况。这些状态代码适用于任何请求方法

      […]如果没有创建预约请求(由于各种原因,如时间不再可用或房间正在使用)[…]

      状态代码用于指示服务器试图理解和满足客户端请求的结果。考虑到这是一个客户端错误,最合适的状态代码应该在该范围内

      对于问题中描述的情况,您可以使用:

      409
      (冲突)状态代码表示请求无法执行 由于与目标的当前状态冲突而无法完成 资源。此代码用于用户可能需要的情况 能够解决冲突并重新提交请求。服务器 应该为用户生成包含足够信息的有效负载 认识到冲突的根源。[……]


      400
      vs
      422
      通常,用于指示有效负载中的语法错误或URL中的无效参数。和用于指示有效负载中的语义问题。查看如何定义每个状态代码:

      400
      (错误请求)状态代码表示服务器无法处理请求,原因是被认为是客户端错误(例如,格式错误的请求语法、无效的请求消息帧或欺骗性的请求路由)

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

      还考虑已知API返回的状态代码:

      API调用中可能存在三种类型的客户端错误 接收请求机构:

    • 发送无效的JSON将导致
      400错误请求
      响应。[……]

    • 发送错误类型的JSON值将导致
      400错误的请求响应
      。[……]

    • 发送无效字段将导致
      422不可处理实体
      响应。[……]


    • 在选择最合适的状态代码时,这是一个非常有见地的方法。有关
      4xx
      状态代码,请参见下图:


      我的建议是使用412前置条件失败状态代码,该代码表示服务器无法处理POST请求,因为其他条件或业务逻辑失败/被拒绝

      请参阅:

      IMO,在这里也是一个有效的选项。它只是指示请求失败,因为请求与目标资源冲突。无法创建约会资源,因为在请求的时间点没有可用的房间。这符合409的语义,很好