问题标签 [http-patch]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1029 浏览

http - 为什么 HTTP PATCH 请求方法不是幂等的

它在HTTP Spec中提到PATCHnot幂等的。

幂等性的基本定义是:

幂等 HTTP 方法是可以多次调用而没有不同结果的 HTTP 方法

所以如果我们进行 HTTP 调用

无论我们在 HTTP 端点上调用多少次,它总是意味着将username用户更新1dummyUser.

PATCH对于更新任何资源的 1 个或多个属性的任何请求,这几乎是相同的。

那为什么 HTTP Spec 规定它PATCHnot幂等的呢?

0 投票
1 回答
580 浏览

c# - Salesforce Rest API 补丁操作 - 错误请求

我正在尝试在我们组织的 Salesforce API 上调用 PATCH 操作。url 正确(格式 - https://xxxx.salesforce.com/services/data/v43.0/sobjects/Classification__c/objectid?_HttpMethod=PATCH),JSON 内容也是正确的,但您可能无法判断从下面的代码。

响应 - StatusCode:400, ReasonPhrase:Bad Request

我已经通过 POSTMAN 发出了完全相同的请求并且它通过了,所以我猜测问题在于我如何在 .Net 框架中进行调用。

我也尝试过使用 HttpRequestMessage 对象,然后在 HttpClient 对象上调用 SendAsync,但这会导致相同的结果。

0 投票
1 回答
858 浏览

django - Django - 我如何执行 PATCH 请求 - ModelSerializer、RetrieveUpdateDestroyAPIView

我有一个ProfileSerializer这是一个ModelSerializer

而且,我有一个名为的视图DetailProfile,它是RetrieveUpdateDestroyAPIView

问题是每当我发出PUT请求时,我都必须发送包括密码在内的所有字段。现在,我从GET请求中获得的密码是hashed。因此,如果我在PUT请求中发送相同的哈希密码,密码将被替换为该字符串(看起来像这样)。pbkdf2_sha256$100000$v7HiZeWnhmQj$ftiQyZCjMJ6pa26P5w72wQZvn+goEB94/lKyJ8LeKrM=

所以,我想发出PATCH请求而不是发送密码。

0 投票
2 回答
50 浏览

ruby-on-rails - 我期待一个补丁请求,但我收到了一个帖子

我在我的 edit.html.erb 上提交表单,它给了我一个没有路由匹配 [POST]“/grouponepostings/17/edit”的错误。我在我的文档中使用了简单的表格,但不确定如何指定它是我寻求的补丁请求。

这是routes.rb

这里edit.html.erb:

这里是 grouponepostings_controller.rb:

0 投票
1 回答
579 浏览

asp.net - 如何从asp.net core mvc中的HttpClient类调用[HttpPatch]类型的API动作

我的 API 有一个我需要调用的 [HttpPatch] 操作。

我正在从 HttpClient 类尝试它,但它没有 .PatchAsync()方法?

参数也是类型的JsonPatchDocument<Reservation>,那么在调用此操作时如何从客户端发送它?

请帮忙

0 投票
2 回答
711 浏览

rest - REST API PATCH 请求预期行为

我不确定以下场景的预期行为是什么:

补丁请求 1:

所以在这里我只是抛出一个异常:Field cannot be updated,无论如何。

补丁请求 2:

我应该在这里做什么?抛出异常并且不更新模型?

0 投票
1 回答
546 浏览

java - 如何通过 JSON API 实现复杂的条件批量部分更新?

HTTP 协议中有POSTPATCH方法用于部分更新。JSON API的PATCH方法有RFC 5789RFC 6902RFC 7396

但我有一个特定于大型资源的问题,需要在相当复杂的条件下进行部分更新。

假设我们有一个 API 端点"/members",它类似于一个包含数千个条目的大型集合,其中每个条目都有几十个字段。因此,客户端通过分页方法部分读取这些值,"GET /members?fields=f1,f2,f3"并且每个客户端仅读取对其当前任务至关重要的字段子集。

为了简化问题,我们假设任何条目都有一个"email"用于标识的必填字段和几个可选字段。

我们有两个客户并行工作以批量创建和更新新记录。但是每个客户都希望只覆盖他们的可选字段子集。

因此,客户端 A 将发送一个包含A批量补丁值的请求,仅允许覆盖"optional1"字段值,因为该字段对其任务至关重要。并且该客户端还将"optional2"为新条目的字段指定一个值。那个客户根本没有指定该"optional3"字段。

虽然该记录是新的,但它已完全写入存储。然后,客户端 B 将发送一个包含B批量补丁值的请求,仅允许覆盖"optional2"字段值,因为该字段对其任务至关重要。

由于记录已经存在,该记录的"optional1"字段应该保持相同的旧值A,因为该字段不是必需的,该"optional2"字段值应该被新值覆盖,B因为该字段是必需的,并且该"optional3"字段值应该接收值B,因为字段只是空的。动作的合并结果应如下所示。

因此,行为取决于记录的存在。你们将如何在 JSON API 可重用端点方法中实现这一点,以便在具有复杂条件的情况下并发并行部分更新此类集合,如果该记录已经存在并包含一些值,那么该 API 的客户端将只覆盖记录中的字段子集?

RFC 6902解决方案不匹配,因为它们的和add操作replace实际上都替换了一个值。

add - 如果目标位置指定了一个确实存在的对象成员,则替换该成员的值。

替换- “替换”操作将目标位置的值替换为新值。操作对象必须包含一个“值”成员,其内容指定替换值。

您可以看到它与 Java Map.put()方法的匹配程度。

如果映射先前包含键的映射,则旧值将替换为指定值。

但是缺少的功能与 Java Set.add()方法相匹配。

如果指定元素尚不存在,则将其添加到此集合中(可选操作)。更正式地说,如果集合不包含元素 e2,则将指定的元素 e 添加到此集合中,使得 (e==null ? e2==null : e.equals(e2))。如果该集合已包含该元素,则调用将保持该集合不变并返回 false。

您将如何创建一个 JSON API,以允许对包含数十个可选字段的元素的非常大集合的批量补丁进行两种类型的操作?


更新

感谢@chad-jensen 提出属性优先级规则的想法。提到的文档提供了非常灵活的方法,因此我尝试根据我的需要对其进行调整。我想我会有两个操作,“初始化”优先级较低,“添加”或者更确切地说“替换”优先级更高。

那么,在我的示例中,客户端 A 和客户端 B 发送的 JSON 数据如下所示。

Client 发送的数据A,更新"optional2"优先级较低的字段并更新"optional1"优先级最高的字段。

客户端发送的数据B,更新优先级较低的"optional1"和字段,更新优先级最高的字段。"optional3""optional2"

0 投票
2 回答
1407 浏览

rest - HTTP code to return for unsupported PATCH

I am implementing a PATCH method on a dropwizard REST resource. Currently only a subset of the properties of the resource an be patched. And currently only the replace operation can be fulfilled.

Which HTTP code should I return if I see a PATCH request for a property/path that is not suppported? And what should I return if the unsupported add or remove operations are requested?

0 投票
1 回答
304 浏览

http - 如果浏览器可以缓存 PATCH 请求

如果您获取图像以显示第二次或 n+1 次,或者同样获取一些 JSON,并且没有任何变化,那么浏览器实际上不应该下载/获取内容。这就是 GET 请求与缓存一起工作的方式。

但我想知道,假设您使用 PATCH 来获取图像或 JSON,而不是使用 GET。想知道如果没有任何变化,浏览器是否仍然可以使用其缓存版本,或者需要做些什么才能使 PATCH 像 GET 一样工作,这样它就不会获取缓存的内容。

0 投票
1 回答
178 浏览

odata - Odata 适配器在 CRUD 操作期间是否支持带有“$expand”查询的“补丁”请求?

我有一个以ODataAdaptor作为数据源的组件,现在我想用$expand查询发出一个补丁请求,就像我为 GET 请求所做的那样(因为 GET 请求公开支持 $expand 查询)。但我不知道它是否被接受,或者有什么其他方法可以解决这个问题?

实际请求:http://localhost:49807/odata/Orders(10249)

预期请求:http://localhost:49807/odata/Orders(10249)/ ?$expand=OrderDetail($select=CustomerID)

在补丁请求中使用 $expand 查询。