我不确定在以下情况下的预期行为:
PATCH请求1:
"body": {
"un_updatable_field" : "data"
}
因此,在这里我只抛出一个异常:Field cannot be updated
,随便什么。
PATCH请求2:
"body": {
"all_required_fields" : "all",
"un_updatable_field" : "data"
}
我应该在这里做什么?引发异常并且不更新模型吗?
答案 0 :(得分:3)
Patch
操作应为原子操作:
服务器必须以原子方式应用整个更改集,并且决不 提供(例如,响应此操作期间的GET) 部分修改的表示形式。如果整个补丁文件 无法成功应用,则服务器不得应用以下任何一项 变化。确定什么构成成功 PATCH可能会因补丁程序文档和 资源被修改。例如,常见的“ diff”实用程序 可以生成适用于一个文件中多个文件的补丁文件 目录层次结构。原子性要求适用于所有人 直接受影响的文件。有关详细信息,请参见the spec中的“错误处理”。 状态代码和可能的错误情况的详细信息。
您的具体情况似乎是
无法处理的请求:可以用422(不可处理 服务器时的实体)响应(Section 2.2) 了解补丁文件和补丁的语法 该文档似乎有效,但是服务器无法执行以下操作 处理请求。这可能包括尝试修改 以某种方式导致资源变得无效的资源; 例如,对格式良好的XML文档的修改, 会导致它不再格式正确。可能还有 更具体的错误,例如“冲突国家”,可能是 用此状态代码表示,但更具体的错误将 通常会更有帮助。
409 Conflict
也可能适用,这取决于无法修改资源的原因。
答案 1 :(得分:0)
我假设un_updateable_field
是系统中存在的字段,但是您不想让人们对其进行更新。
您可以选择忽略它,也可以选择引发错误。您应该做什么取决于您。我希望我的系统严格,并且不要忽略无效值,因为如果出现无效值,则可能表明您在某处存在错误,最好得到一个硬错误,以便您可以修复此错误。