标签: http-patch

如何以RESTful方式建模CANCEL动作?

我们目前正在处理来自我们巨石的小型服务.我们的域名与票务系统非常相似.我们已决定从域名的取消过程开始.

我们的取消服务具有简单的端点"取消",它接收票证的ID.在内部,我们检索id,执行与取消相关的一些操作,并更新商店中实体的状态.从商店的角度来看,取消的机票和实时机票之间的唯一区别是一些属性.

根据我的阅读,PATCH似乎是在这种情况下使用的正确动词,因为我只更新资源中的一个简单属性.

PATCH /api/tickets/{id}
Payload {isCancelled: true}
Run Code Online (Sandbox Code Playgroud)

但isCancelled不是实体中的实际属性.在有效载荷中发送不属于实体的属性是否公平,还是应该考虑对此请求进行建模的其他形式?我不希望将整个实体作为有效载荷的一部分发送,因为它很大.

我考虑过创建一个新的资源CancelledTickets,但在我们的域名中,我们永远不需要对已取消的门票进行GET.因此,不必创建新资源

任何帮助将不胜感激

谢谢K.

api rest http-verbs http-patch

9
推荐指数
3
解决办法
4183
查看次数

如何在Web API和OData中进行PATCH

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

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

在MSDN中,对于Delta类,它也很清楚,因为Patch描述说:

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

Put的描述不同:

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

到目前为止一切都那么好,但我找不到用OData发送这些"指令"的方法,无论我做什么,Delta.Patch只替换值.

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

我尝试的方式是:

PATCH http://localhost:55783/Products(1) HTTP/1.1
User-Agent: Fiddler
Host: localhost:55783
Content-Length: 19
Content-type: application/json

{ "Price": 432 }
Run Code Online (Sandbox Code Playgroud)

{ "op": "add", "path": "/Price", "value": 423432 }
Run Code Online (Sandbox Code Playgroud)

那附近的东西.


更新:

感谢迈克尔·摩尔和用ILSpy阅读整个Delta课程,我认为它确实是Patch动词设计中的一个错误.
我为微软公开了一个错误,如果您需要修复它,可以对它进行投票.

.net c# odata asp.net-web-api http-patch

8
推荐指数
1
解决办法
2万
查看次数

通过HTTP PATCH请求包含数据的正确方法

当我将HTTP PATCH请求放在一起时,在URL参数之外包括数据的选项是什么?

以下任何一项都可以工作,最常见的选择是什么?

  • 多部分/表单数据
  • 应用程序/ x-www-form-urlencoded
  • 原始JSON
  • ...还有其他人吗?

parameters http http-patch

6
推荐指数
1
解决办法
1万
查看次数

PATCH多个资源

简短:是否符合标准,RESTful和其他好主意,以启用PATCH请求来更新资源集合,而不仅仅是单个资源,但仍然是单独的?

:

我正在考虑公开一种方法,用于对我的资源集合进行批量,原子更新.例:

PATCH /url/myresources
[
    {
        "op": "add",
        "path": "/1",  // ID if the individual resource
        "value": 
        {
            ... full resource representation ...
        }
    },
    {
        "op": "remove",
        "path": "/2"
    },
    {
        "op": "replace",
        "path": "/3/name",
        "value": "New name"
    }
]
Run Code Online (Sandbox Code Playgroud)

上下文是商业解决方案的公共API.允许这样的PATCH的好处是原子性和批量友好性,没有垃圾邮件请求,单独处理故障等.

我已经咨询了https://tools.ietf.org/html/rfc6902http://tools.ietf.org/html/rfc5789但是如果符合要求则无法找到明确的答案.RFC主要是指"资源",但也可以将资源集合视为"资源".

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

rest json api-design http http-patch

6
推荐指数
1
解决办法
1046
查看次数

结合使用PATCH和Jersey Client API进行单元测试

我正在使用Jersey进行REST API实现。对于PATCH(部分更新),我已经实现了自己的自定义实现,PATCH因为Jersey不支持它。

现在,我试图弄清楚如何围绕该实现编写功能测试。我使用的球衣测试框架,其他方法(PUTPOSTGETDELETE)已在该框架提供了支持。

有什么方法可以扩展jersey测试框架的实现来编写我的功能测试PATCH?如果没有,我是否可以使用其他测试框架来测试Jersey的PATCH实现?

如果有人可以提供任何示例,那就太好了。

java rest jax-rs http-patch jersey-2.0

6
推荐指数
1
解决办法
8404
查看次数

HTTP PATCH请求可以创建资源吗?

如果PATCH请求应用于尚不存在的资源,那么它是否允许创建资源,或者在这种情况下是否需要单独的POST/PUT请求?

PATCH请求将转到网址的资源,例如:PATCH /object/1234.如果ID为1234的对象在数据库中,我将创建它,否则我将更新它.

PATCH请求不包含所有领域,这就是为什么我不使用PUT.

rest api-design http http-patch

6
推荐指数
1
解决办法
4095
查看次数

spring-cloud-starter-openfeign:无效的 HTTP 方法:PATCH 执行 PATCH

语境

我有一个 spring boot (version 2.2.6.RELEASE) web 项目。

从这个 Web 应用程序(我称之为“APP1”)我想使用来自另一个 Web 应用程序的 PATCH 方法调用另一个 URI(我们称之为“APP2”)。在我的 pom.xml 中,我有以下依赖项:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)

下面是我如何调用其他 Web 应用程序的 PATCH 方法。

@FeignClient(name = "clientName", url = "base-uri")
public interface MyInterface{
   @PatchMapping(value = "/target-uri")
    void callClientMethod(Map<String, Object> args);
Run Code Online (Sandbox Code Playgroud)

问题

  • APP2 的 PATCH 方法被有效调用
  • 但随后 APP1 抛出以下错误:
    • feign.RetryableException:无效的 HTTP 方法:PATCH 正在执行 PATCH

我在互联网上寻找解决方案,并在我的 pom.xml 中添加了以下 snipet

<dependency>
    <groupId>com.netflix.feign</groupId> <!-- Also tried io.github.openfeign -->
    <artifactId>feign-httpclient</artifactId>
    <version>8.18.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

之后,APP2 的 PATCH 方法仍然被正确调用,但在 APP1 中我收到以下错误: java.lang.NoSuchMethodError: feign.Response.create (ILjava/lang/String;Ljava/util/Map;Lfeign/Response$Body;)假/响应;

题 …

http-patch spring-cloud-feign feign

6
推荐指数
3
解决办法
5387
查看次数

是否有可能匹配Happstack中的PATCH请求?

我想知道是否有可能匹配Happstack中的PATCH请求,除了Method数据类型没有PATCH的构造函数:

data Method
= GET | HEAD | POST | PUT | DELETE | TRACE | OPTIONS | CONNECT
Run Code Online (Sandbox Code Playgroud)

但是,在某些情况下可能会出现对PATCH请求的需求,例如,在使用Backbone.js时它可以很方便.如果可以在不修改Happstack的情况下匹配不同的方法而不是定义的方法,那将是很好的.另外我想知道Happstack是否支持PATCH请求的特殊原因.

haskell http happstack http-patch

5
推荐指数
1
解决办法
157
查看次数

在Internet Explorer中为CORS PATCH请求获取"权限被拒绝"错误

真的很困惑这个bug.所有版本的IE,甚至那些支持CORS的版本,在我尝试发出跨域PATCH请求时都会抛出"权限被拒绝"错误(使用jQuery.ajax).所有其他方法(甚至PUT)都能正常工作,但PATCH会在send()调用时触发立即错误.

考虑到IE的后续版本支持CORS,并且据称支持所有方法类型,是否有一些原因导致CORS + PATCH会导致错误?

(是的,Access-Control-Allow-Methods设置为,GET, POST, DELETE, PATCH, PUT, OPTIONS所以我不认为这是问题.)

jquery internet-explorer cors http-patch

5
推荐指数
1
解决办法
688
查看次数

Java-HttpServlet补丁方法

我正在使用Java中的基本Servlet实现REST Api,但似乎找不到doPatch()方法。

为什么不HttpServlet实现PATCH方法?我想使用它,因为它对于资源更新更有意义。

java servlets http-patch

5
推荐指数
0
解决办法
625
查看次数