如何理解HTTP PATCH是非幂等的?

已清楚PUT是替换整个资源,PATCH是更新某个资源的部分内容。但如何理解PATCH是非幂等的?举个例子?

阅读 8.1k
2 个回答

所谓幂等,通俗来讲就是不管执行多少次,所造成的后果都一样,比如 DELETE /my/resource/123 不管执行多少遍都是删除 123 这个资源,不会造成把 456 给删了;再如 POST /my/resource 数据 name=张三&age=60 每执行一次就加一个张三,这是非幂等的。那回到 PATCH 上,如何理解它是非幂等呢,功能是更新部分内容没错,但对它的定义这个是不全的,完整描述如下:

The PATCH Method

The PATCH method requests that a set of changes described in the
request entity be applied to the resource identified by the Request-
URI. The set of changes is represented in a format called a "patch
document" identified by a media type. If the Request-URI does not
point to an existing resource, the server MAY create a new resource,
depending on the patch document type (whether it can logically modify
a null resource) and permissions, etc.

其中有很重要一句说明,如果 URI 对应的资源不存在,服务端可以创建一个新资源。

详见 https://tools.ietf.org/html/r...

新手上路,请多包涵

楼上回答有些问题,补充一下。如果URI对应的资源不存在,服务端可以创建一个新资源,这个对PUT也是生效的。
PUT与PATCH的区别,PUT是根据客户端提供了完整的资源数据,客户端提交什么就替换什么,而PATCH有可能是根据客户端提供的参数或者指令,动态的计算出某个值,例如每次请求后资源的某个参数减1,所以多次调用,资源会有不同的变化。所以PATCH是非幂等的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进