PUT具有null属性

时间:2017-07-07 13:07:50

标签: rest nullable

偶尔我的API会收到PUT请求,其中一个布尔属性设置为null。像这样:

Base

如果这是一个PATCH,我会忽略该属性,但在PUT的情况下,我该怎么办?我的直觉说:把活动设置为假。但我不相信这将是正确的REST行为。

您怎么看?

1 个答案:

答案 0 :(得分:0)

根据RFC7231

  

6.5.1。 400错误请求

     

400(错误请求)状态代码表示服务器不能或      由于被认为是某种东西,它不会处理请求      客户端错误(例如,格式错误的请求语法,无效请求      消息框架或欺骗性请求路由)。

我会说你应该拒绝处理客户的请求,该请求没有通过400 Bad Request响应通过数据验证。

另请注意:

  

4.3.4。 PUT

     

PUT方法请求目标资源的状态      使用表示法定义的状态创建或替换      包含在请求消息有效负载中。

所以,你不应该忽略无效的字段值。

但是,如果您跳过数据验证并且只接受客户端发送的新资源状态,那么表示将与目标资源不一致,您可以尝试重写请求,或者使用409 Conflict失败(RFC7231):

  

原始服务器应该验证PUT表示是否正确      与服务器对目标的任何约束一致      PUT不能或不会改变的资源。这是      当原始服务器使用内部时特别重要      与URI相关的配置信息以便设置      GET响应上的表示元数据的值。当一个PUT      表示与目标资源,原点不一致      服务器应该通过转换来使它们保持一致      表示或更改资源配置,或响应      带有适当的错误消息,其中包含足够的信息      解释为什么表示不适合。 409(冲突)      或建议使用415(不支持的媒体类型)状态代码      后者特定于Content-Type值的约束。