当前位置: 首页 > 知识库问答 >
问题:

资源的Http幂等部分修改最好以PUT方式实现,而不是以补丁方式实现?

管翼
2023-03-14

Http补丁方法被认为是非幂等的,

HTTP修补程序请求方法对资源应用部分修改

HTTP PUT方法只允许完全替换文档。与PUT不同,补丁不是幂等的,这意味着连续的相同补丁请求可能会产生不同的效果。

但可以以幂等方式(MDN)实现修补程序:

path: /contact/:id
method: patch
body {
name: 'John'
}

因此,我上面写的幂等补丁请求将不会被优化。(据我所知,HTTP标准规定补丁是非幂等的,但并不禁止它实现为幂等的)。

因为HTTP标准认为PUT是幂等的。不是更喜欢使用/contact/:id补丁请求作为PUT吗(为了获得上面提到的优化)?

更新1

>

  • 其他程序员不会理解部分更新PUT,应该编写有关该endpoint的进一步文档。

    将无法获取在上一次“部分更新PUT”中发送的确切资源。

    由于REST关注的是API的长期发展,坚持它可能会在将来节省我们的时间。

    谢谢

  • 共有1个答案

    丁光华
    2023-03-14

    据我所知,HTTP标准规定补丁是非幂等的,但并不禁止它实现为幂等的

    这是正确的。说标准不保证幂等语义要更精确一点。

    对资源的幂等部分修改最好以PUT而不是PATCH的形式实现?

    但是...不存在“偏放”这一说。如果所需的资源表示形式非常大,而您想要进行的更改非常小,那么发送补丁文档,而不是完整的表示形式,会有很大的意义。

    这一选择归结为一种关注点的权衡--你所面临的问题中哪些是最重要的,哪些是可以忽略的。

    为什么没有偏置?

    定义了方法之后,组件提供者就可以决定是否加入并支持您的新标准。

    用另一种方式表达这个想法:在您控制客户机和服务器的情况下,将自定义语义嵌入到消息中没有错。但是如果您要用一个标准的方法类型来实现,那么您应该使用POST--因为在这个方法中,泛型组件将对正在发生的事情做出最少的假设。

     类似资料:
    • 我读过很多地方说HTTP补丁是非幂等的。有人能解释一下为什么它是非幂等的吗?因为根据定义,幂等方法可以改变资源状态,也可以不改变资源状态,但是重复的请求在第一个请求之后应该不会有进一步的副作用。重复的补丁请求如何改变资源状态?

    • 使用JSONAPI1.0标准设计API,没有PUT方法。只有用于创建资源的POST方法和用于部分更新的修补程序。我们有这样的用例:用户可以向服务器发送请求,如果资源不存在,则必须创建资源,否则必须更新资源。RFC将这种方法描述为PUT。接下来引用提到的RFC5789标准补丁有信息: “如果Request-URI没有指向现有资源,服务器可能会创建一个新资源,具体取决于补丁文档类型(是否可以在逻辑上修

    • 如何使用补丁方法更新FOS用户的详细信息。所以当我在Json中传递部分细节时,只更新这些细节。 用户实体 我的实体没有更新。我做错了什么?

    • 问题内容: 可以说我正在通过服务器提供根目录中的以下文件。 无论与当前正在使用公共目录文件夹。 要加载这些文件,我必须在文件中包含以下行,以便可以在公用文件夹中搜索请求: 为什么会这样呢?由于资源路径正确,为什么不能正确引用没有上一行的文件?同样适用。是否确实必须通过静态静态提供index.html使用的每个资源? 问题答案: 默认情况下,node.js Web服务器不提供任何文件。因此,仅因为您

    • 本文向大家介绍spring boot 有哪些方式可以实现热部署?相关面试题,主要包含被问及spring boot 有哪些方式可以实现热部署?时的应答技巧和注意事项,需要的朋友参考一下 使用 devtools 启动热部署,添加 devtools 库,在配置文件中把 spring. devtools. restart. enabled 设置为 true; 使用 Intellij Idea 编辑器,勾上

    • 我想提出我的问题的一种方式是:如果我使用put来进行一个非幂等调用,然后使用POST来这样做,会有什么问题呢?