用于失败的POST请求的HTTP响应代码是什么?

时间:2017-11-13 16:55:58

标签: http api-design http-status-codes

当POST请求未成功且请求正文格式正确时,应返回什么HTTP响应代码?

对于成功的POST请求,我使用201 - Created,但没有相应的未创建的代码。

我在考虑400 - 不良请求,但这实际上会指向用户请求格式不正确或304 - 未修改。

1 个答案:

答案 0 :(得分:3)

  

POST请求未成功且请求正文格式正确时,应返回哪些HTTP响应代码?

如果您的意思是请求有效负载的语法有效,但由于数据无效而无法处理,您可以使用422

  

11.2. 422 Unprocessable Entity

     

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

请记住在响应有效负载中提供一个很好的描述,说明有效负载有什么问题。有关如何报告HTTP API中的问题的详细信息,请参阅RFC 7807

更新(根据评论)

  

POST请求失败的原因更多是业务逻辑错误,例如“帐​​户余额太低而无法提取5.00美元”

对于comment中描述的情况,403409会更合适。

  

6.5.3. 403 Forbidden

     

403(禁止)状态代码表示服务器已理解   请求但拒绝授权。希望的服务器   公开为什么禁止请求可以描述   响应有效负载中的原因(如果有)。 [...]

  

6.5.8. 409 Conflict

     

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