问题标签 [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 回答
20192 浏览

c# - 如何在 Web API 和 OData 中打补丁

通过阅读Patch 动词的 RFC 规范,很明显Patch动词不应该获取值来部分更新实体,而是要进行操作:

...但是,对于 PATCH,封闭的实体包含一组指令,描述如何修改当前驻留在源服务器上的资源以生成新版本。

在 Delta 类的 MSDN 中,它也很清楚,正如补丁描述所说:

使用此 Delta跟踪的更改覆盖原始实体。

Put的描述不同:

使用存储在此 Delta 中的覆盖原始实体。

到目前为止一切顺利,但我找不到用 OData 发送这些“指令”的方法,无论我做什么,Delta.Patch 只会替换这些值。

补丁请求的语法应该是什么?

我尝试的方法是:

和附近的东西。


更新:

感谢 Michael Moore 并阅读了 ILSpy 的整个 Delta 课程,我认为这确实是 Patch 动词设计中的一个错误。
我为微软打开了一个错误,如果你也需要修复它,你可以投票。

0 投票
1 回答
133 浏览

rest - 给定类型的所有资源的 REST PATCH

我在 REST API 中有一组资源,可以这样说:

我已经将“停止观看”命令实现为 PATCH:

实施“停止观看所有文件夹”的正确方法是什么?我想到了

但我不确定这是否有意义(集合本身没有watched属性)。

还是根本不应该在 API 级别实现(而是由客户端迭代)?
不过,这似乎效率低下。

0 投票
1 回答
123 浏览

http-patch - 根据 HTTP PATCH RFC,文档的部分表示是否是有效的“更改集”?

这是RFC 5789所说的:

PATCH 方法请求将请求实体中描述的一组更改应用于由 Request-URI 标识的资源。这组更改以一种称为“补丁文档”的格式表示,该格式由媒体类型标识。如果 Request-URI 不指向现有资源,则服务器可以创建新资源,具体取决于补丁文档类型(是否可以在逻辑上修改空资源)和权限等。

PUT 和 PATCH 请求之间的区别体现在服务器处理封闭实体以修改由 Request-URI 标识的资源的方式上。在 PUT 请求中,包含的实体被认为是存储在源服务器上的资源的修改版本,并且客户端请求替换存储的版本。然而,对于 PATCH,封闭的实体包含一组指令,描述如何修改当前驻留在源服务器上的资源以生成新版本。

假设我有{ "login": "x", "enabled": true },我想禁用它。

根据帖子“请。不要像白痴一样修补。” ,正确的 PATCH 请求将是

但是,让我们接受这个请求:

它还“包含一组说明如何修改当前驻留在源服务器上的资源”,唯一的区别是使用 JSON 属性而不是 JSON 对象。

它似乎不太强大,但如果需要,数组更改可以有一些其他特殊语法(例如{"a":{"add":[], "remove":[]}}),并且服务器逻辑可能无法处理任何更强大的东西。

根据 RFC,这是不正确的 PATCH 请求吗?如果是这样,为什么?
另一方面,一个正确的 PATCH 请求会{ "op": "disable" }是一个正确的 PATCH 请求吗?

0 投票
1 回答
1118 浏览

asp.net-web-api - .NET web api HttpPatch 返回 403 禁止

我有一个提供翻译列表的简单资源。get 端点接受一种语言并返回一个翻译字典。任何更新都将只针对一个翻译,所以我认为将其作为补丁进行是合适的。

在我的 api 控制器中,我可以很好地进行 put 工作,但是我对补丁端点所做的任何调用都会给我一个 403 禁止错误,我不明白为什么。

0 投票
1 回答
1126 浏览

ruby-on-rails - Rails - 覆盖活动记录属性的设置器

我正在构建一个 Rails 服务器,其中一些用户跟踪其他用户位置的更改,并在每次更新位置时收到 websockets 的通知。

目前,我调用 update_location 操作而不是调用常规更新以更新位置并调用 WebsocketRais 触发器。这对我来说似乎很奇怪,我认为应该有更好的方法。

我知道的唯一其他选择是调用更新操作并检查位置是否已更新,并通知订阅者。这对我来说也很丑陋。

我希望能够以某种方式覆盖资源的 Rails 更新,并在每次更新 location 属性时通知订阅者 - 类似于 location 属性的 setter 方法,它可以做其他事情,而不仅仅是设置。甚至可能吗?我怎么能做到呢?

0 投票
0 回答
2196 浏览

java - HTTPClient 的 PATCH 方法不允许正文实体?

我正在使用 Apache HTTPClient 版本 4.3.5。我正在尝试创建一个 HTTP PATCH 请求。

在检查收到的实际请求时,它没有与之关联的正文。类似的代码适用于 HTTP POST 请求。

0 投票
5 回答
39399 浏览

python - 如何使用 Django Rest Framework 修补单个字段?

我有一个包含许多字段的模型“MyModel”,我想使用 PATCH 方法更新字段“状态”。我正在使用基于类的视图。有什么方法可以实现 PATCH?

0 投票
1 回答
1444 浏览

json - PATCH 多个资源

简而言之:允许 PATCH 请求更新资源集合(不仅仅是单个资源,而是单独的资源)是否符合标准、RESTful 和其他好主意?

我正在考虑公开一种对我的资源集合启用批量、原子更新的方法。例子:

上下文是商业解决方案的公共 API。允许此类 PATCH 的好处是原子性和批处理友好性,无需发送垃圾邮件请求、单独处理故障等。

我已经咨询了https://www.rfc-editor.org/rfc/rfc6902https://www.rfc-editor.org/rfc/rfc5789但如果这符合要求则找不到明确的答案。RFC 主要指的是“资源”,但也可以这样对待资源集合。

这是一个好主意吗?有更好的选择吗?

0 投票
0 回答
388 浏览

django - 为什么 Django Rest Framework 上的 PATCH 会擦除未更改的 ManyToMany 字段?

我正在PATCH使用 DRF 构建模型,并且出于某种原因,该调用正在擦除 ManyToMany 字段。为什么是这样?

我有一个Feature模型:

...和一个序列化器:

...和一个视图集:

这给出了输出GET /api/features/5/

假设我想PATCH调用 update name

这成功更新了对象,但结果也会tags从对象中擦除:

0 投票
1 回答
1998 浏览

rest - 202 Accepted 是对 http 补丁的可接受响应吗?

我需要对资源进行异步更新。是否有关于 202 Accepted 是否是对 PATCH 的适当响应的明确声明?

此处的官方文档从未提及 202,并且似乎假设由于 PATCH 导致的资源更改是同步进行的,但它从未做出明确的声明。

PATCH 动作的适当原理图是什么?