REST API PATCH请求预期行为

时间:2018-09-26 14:56:10

标签: rest api http-patch

我不确定在以下情况下的预期行为:

PATCH请求1:

"body": {
    "un_updatable_field" : "data" 
}

因此,在这里我只抛出一个异常:Field cannot be updated,随便什么。

PATCH请求2:

"body": {

    "all_required_fields" : "all",
    "un_updatable_field" : "data" 
}

我应该在这里做什么?引发异常并且不更新模型吗?

2 个答案:

答案 0 :(得分:3)

根据{{​​3}},

Patch操作应为原子操作:

  

服务器必须以原子方式应用整个更改集,并且决不      提供(例如,响应此操作期间的GET)      部分修改的表示形式。如果整个补丁文件      无法成功应用,则服务器不得应用以下任何一项      变化。确定什么构成成功      PATCH可能会因补丁程序文档和      资源被修改。例如,常见的“ diff”实用程序      可以生成适用于一个文件中多个文件的补丁文件      目录层次结构。原子性要求适用于所有人      直接受影响的文件。有关详细信息,请参见the spec中的“错误处理”。      状态代码和可能的错误情况的详细信息。

您的具体情况似乎是

  

无法处理的请求:可以用422(不可处理         服务器时的实体)响应(Section 2.2)         了解补丁文件和补丁的语法         该文档似乎有效,但是服务器无法执行以下操作         处理请求。这可能包括尝试修改         以某种方式导致资源变得无效的资源;         例如,对格式良好的XML文档的修改,         会导致它不再格式正确。可能还有         更具体的错误,例如“冲突国家”,可能是         用此状态代码表示,但更具体的错误将         通常会更有帮助。

409 Conflict也可能适用,这取决于无法修改资源的原因。

答案 1 :(得分:0)

我假设un_updateable_field是系统中存在的字段,但是您不想让人们对其进行更新。

您可以选择忽略它,也可以选择引发错误。您应该做什么取决于您。我希望我的系统严格,并且不要忽略无效值,因为如果出现无效值,则可能表明您在某处存在错误,最好得到一个硬错误,以便您可以修复此错误。