偶尔我的API会收到PUT请求,其中一个布尔属性设置为null。像这样:
Base
如果这是一个PATCH,我会忽略该属性,但在PUT的情况下,我该怎么办?我的直觉说:把活动设置为假。但我不相信这将是正确的REST行为。
您怎么看?
答案 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值的约束。