+----------------------------+-----+-------+
| | PUT | PATCH |
+----------------------------+-----+-------+
| Запрос имеет тело | Да | Да |
| Успешный ответ имеет тело | Нет | Да |
| Меняет состояние сервера | Да | Да |
| Идемпотентный | Да | Нет |
| Кэшируемый | Нет | Нет |
| Допускается в HTML-формах | Нет | Нет |
+----------------------------+-----+-------+
PATCH不是幂等的(单结果,即重复的请求不会改变服务器的状态并导致相同的结果),因为 您可以插入指令以将元素添加到其中。然后第二个请求将再次添加它。但它PUT会简单地覆盖整个资源(再次),即重复请求不会导致不同的结果。其他示例:GET幂等查询:无论您向 Google 询问多少次某个查询,Google 都会向您返回相同的结果。POST非幂等:每次都可以在基数中插入一个新行。
想象一下,您的网站上发布了文章。文章具有您可以编辑的标题和内容。
它们的工作方式相同。例如,如果您只更改标题,就会出现差异。
第一个请求将更改标头
title并清除该字段content,因为您没有传入它。PUT改变整个对象。第二个请求只会更改标头字段,
content因为您没有通过一个,所以该字段保持不变。PATCH更改单个资源字段。PATCH用于部分修改资源。PUT创建新资源或用请求正文中提供的数据替换目标资源的表示。换句话说,
PATCH嵌套对象包含一组指令,这些指令描述了如何修改源服务器上的当前资源以创建新版本。PUT它包含整个资源的新版本。不像
PUT,它PATCH不是幂等的,这意味着成功的相同PATCH请求可以产生不同的效果。但是,可以以PATCH幂等的方式发出请求。英文方法规范:PUT、PATCH
developer.mozilla.org上有关于这个主题的很好的文档。
更新
PATCH不是幂等的(单结果,即重复的请求不会改变服务器的状态并导致相同的结果),因为 您可以插入指令以将元素添加到其中。然后第二个请求将再次添加它。但它PUT会简单地覆盖整个资源(再次),即重复请求不会导致不同的结果。其他示例:GET幂等查询:无论您向 Google 询问多少次某个查询,Google 都会向您返回相同的结果。POST非幂等:每次都可以在基数中插入一个新行。PUT- 更新整个对象,PATCH- 更新对象的字段,也可以PUT通过方法更新一个字段,但是,该方法PUT会遍历对象的所有字段并搜索需要的字段,不像PATCH,它不会绕过整个对象。更多详情见链接