Rest 失败的post请求的api状态代码
我有一个post api调用,该调用当前在我的预订系统中创建约会 如果api调用发送约会请求,并且api可以成功创建约会,则api将返回201已创建状态代码 当前,如果没有创建约会请求(由于各种原因,如时间不再可用或房间正在使用),api将返回400错误请求状态代码 “400错误请求-响应状态代码表示服务器无法或将不会处理请求,原因是被认为是客户端错误” 发送的数据不是无效语法,可能会重新发送并成功Rest 失败的post请求的api状态代码,rest,Rest,我有一个post api调用,该调用当前在我的预订系统中创建约会 如果api调用发送约会请求,并且api可以成功创建约会,则api将返回201已创建状态代码 当前,如果没有创建约会请求(由于各种原因,如时间不再可用或房间正在使用),api将返回400错误请求状态代码 “400错误请求-响应状态代码表示服务器无法或将不会处理请求,原因是被认为是客户端错误” 发送的数据不是无效语法,可能会重新发送并成功 对于创建资源失败,是否有更相关的状态代码。在这种情况下,422不可处理实体是否是有效的响应?如果
对于创建资源失败,是否有更相关的状态代码。在这种情况下,422不可处理实体是否是有效的响应?如果错误是由于服务器上出现了错误,并且客户端没有故障,则可以使用
5xx
范围(服务器错误)4xx
错误保留给客户端引起的错误。在这种情况下,通常使用500内部服务器错误
因此:
- 客户端故障-->
4xx
- 服务器故障-->
5xx
- 409可以适合此用例(以及我个人的偏好):
“由于与当前请求冲突,请求无法完成
目标资源的状态。此代码用于以下情况:
用户可能能够解决冲突并重新提交
请求。”
通常在PUT中使用,但在这种情况下可以工作。例如,他们可以更改请求中的建议时间。或者,如果房间可用,他们可以稍后重试
422还可用于指示字段级错误
无论哪种方式,一个重要的事情是伴随着一个良好的错误消息指示问题。从rfc7231:
服务器应发送一个包含以下内容解释的表示:
错误情况,以及它是暂时的还是永久的情况。这些状态代码适用于任何请求方法
[…]如果没有创建预约请求(由于各种原因,如时间不再可用或房间正在使用)[…]
状态代码用于指示服务器试图理解和满足客户端请求的结果。考虑到这是一个客户端错误,最合适的状态代码应该在该范围内
对于问题中描述的情况,您可以使用:
409
(冲突)状态代码表示请求无法执行
由于与目标的当前状态冲突而无法完成
资源。此代码用于用户可能需要的情况
能够解决冲突并重新提交请求。服务器
应该为用户生成包含足够信息的有效负载
认识到冲突的根源。[……]
400
vs422
通常,用于指示有效负载中的语法错误或URL中的无效参数。和用于指示有效负载中的语义问题。查看如何定义每个状态代码:
400
(错误请求)状态代码表示服务器无法处理请求,原因是被认为是客户端错误(例如,格式错误的请求语法、无效的请求消息帧或欺骗性的请求路由)
422
(不可处理实体)状态代码表示服务器
了解请求实体的内容类型(因此
415
(不支持的媒体类型)状态代码不合适),并且
请求实体的语法正确(因此是400
(错误请求)
状态代码不合适),但无法处理包含的
说明书例如,如果XML
请求主体包含格式良好的(即语法正确的),但
语义错误的XML指令
还考虑已知API返回的状态代码:
API调用中可能存在三种类型的客户端错误 接收请求机构:400错误请求
响应。[……]400错误的请求响应
。[……]422不可处理实体
响应。[……]在选择最合适的状态代码时,这是一个非常有见地的方法。有关
4xx
状态代码,请参见下图:
我的建议是使用412前置条件失败状态代码,该代码表示服务器无法处理POST请求,因为其他条件或业务逻辑失败/被拒绝 请参阅:IMO,在这里也是一个有效的选项。它只是指示请求失败,因为请求与目标资源冲突。无法创建约会资源,因为在请求的时间点没有可用的房间。这符合409的语义,很好