没有创建资源时,我应该为POST返回什么HTTP状态代码?

cyp*_*cyp 6 java rest spring http

我正在将映像发布到我的服务器(Java和Spring)。

可能会发生几件事:

  • 如果一切顺利,那么我将返回200图像ID。
  • 图像无法保存到文件系统(SaveFileException)。
  • 数据库无法使用新的URL(DatabaseException)更新新的图像记录。
  • 或扔一个IOException

简而言之,我无法保存/创建图像。

我应该返回什么HTTP代码?

我是否应该根据返回多个代码和多个消息Exception

cas*_*lin 8

首先,让我强调一下,状态代码旨在指示服务器试图理解并满足客户请求的结果。

如果一切顺利,那么我将返回200图像ID。

似乎还可以,但是我建议您返回201一个Location标头。引用RFC 7231POST方法:

如果由于成功处理POST请求而在原始服务器上创建了一个或多个资源,则原始服务器应发送201(已创建)响应,该响应包含一个Location标头字段,该标头字段提供所创建的主要资源的标识符以及描述该标头的表示形式引用新资源时的请求状态。

与一起201Location标头用于指示新创建的资源位于何处。如果没有Location提供标头,则客户端应假定资源由有效请求URI标识:

6.3.2。创建了201

201(创建)状态代码表示该请求已经完成,并已导致正在创建一个或多个新的资源。由请求创建的主要资源由Location响应中的标头字段标识,或者如果未Location接收到字段,则由有效请求URI标识。[...]


客户端错误

客户可以执行新请求并解决问题吗?如果是这样,请选择以下4xx范围内的状态代码:

6.5。客户端错误4xx

4xx状态代码的(Client Error)类指示该客户端似乎已出错。除了响应HEAD请求时,服务器应该发送一个包含错误情况的解释的表示,以及它是暂时还是永久的情况。这些状态代码适用于任何请求方法。

Michael Kropat整理了一组非常有用的流程图,可能会给您一些启发。请参阅下表以确定最合适的4xx状态代码:

选择4xx状态码

根据导致错误的原因,一些有效的选项是:

6.5.11。413有效负载过大

413(有效载荷过大)状态代码表示服务器拒绝处理请求,因为这个请求的有效载荷大于服务器愿意或能够处理。[...]

6.5.13。415不支持的媒体类型

415(不支持的媒体类型)状态代码表示原始服务器拒绝,因为有效载荷是不是对目标资源这种方法支持的格式来请求服务。格式问题可能是由于请求的Content-TypeContent-Encoding,或者是直接检查数据的结果。

6.5.1。400错误的要求

400(错误请求)状态代码表示服务器无法或不愿请求过程中,由于一些被认为是一个客户端错误(例如,恶意请求语法,无效的请求消息帧,或欺骗性的请求路由)。


服务器错误

如果错误是由服务器引起的,则5xx范围内的状态码将是准确的:

6.6。服务器错误5xx

5xx状态代码的(服务器错误)类表明服务器知道它已错误或无法执行所请求的方法。除了响应HEAD请求时,服务器应该发送一个包含错误情况的解释的表示,以及它是暂时还是永久的情况。

请参见以下流程图:

选择5xx状态码

我建议500

6.6.1。500内部服务器错误

500(内部服务器错误)状态代码表示服务器遇到意外情况,从完成请求阻止它。

  • 这些流程图是宏伟的 AF,我非常感谢您发布此内容。谢谢你,先生! (2认同)