rest - 如何使用 json 补丁更新集合

标签 rest json-patch

我找不到关于使用 JSON Patch 更新集合的方式的示例。事实上,我想在集合 REST 资源上使用方法 PATCH 来更新关联的集合,而无需再次发送整个集合。不知道JSON Patch能不能匹配描述要做的操作:主要是添加元素或者移除元素。元素是复杂的,这意味着它们不是原始元素。

下面有更多的细节。让我们以资源 contacts 为例:

GET /contacts
[
  {
    "id": "1",
    "lastName": "Last name 1",
    "firstName": "First name 1"
  },
  {
    "id": "2",
    "lastName": "Last name 2",
    "firstName": "First name 2"
  },
  {
    "id": "3",
    "lastName": "Last name 3",
    "firstName": "First name 3"
  },
  (...)
]

这是我想使用的 PATCH 请求,但我不确定它是否符合 JSON 补丁:

PATCH /contacts
[
  {
    "op": "add", "value": {
      "firstName": "my first name",
      "lastName": "my last name"
    }
  },
  {
    "op": "remove", "path": "id=='1'"
  }
]

我的主要问题是如何根据其字段 id 识别要删除的元素。有专门的表达方式吗?我想到了类似这样的事情:id=='1'

最后一个问题:JSON Patch针对的是响应内容吗?

非常感谢您的帮助! 蒂埃里

最佳答案

您应该能够简单地使用要删除的资源的路径。

PATCH /contacts
[
  {
    "op": "add",
    "path": "/-",
    "value": {
      "firstName": "my first name",
      "lastName": "my last name"
    }
  },
  {
    "op": "remove", 
    "path": "/0"
  }
]

环顾四周,似乎对此有些困惑,但是standard says ““删除”操作删除目标位置的值”示例:

{ "op": "remove", "path": "/a/b/c" }

关于rest - 如何使用 json 补丁更新集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29937528/

相关文章:

rest - 如何处理REST API中新对象属性的引入

c# - 使用 MVC 的 REST Web 服务,是个好主意吗?

rest - 为什么 JerseyTest 抛出 ConstraintViolationException 而不是返回 400 Bad Request?

java - Spring Boot 应用程序中没有 REST 端点工作

spring-boot - Spring Webflux 微服务中不支持将 javax.json.JsonPatch 作为 @RequestBody

java - Jackson 用对象值反序列化 Json Patch

json-patch - jsonpatch将元素添加到数组并创建(如果不存在)

rest - 在 VSTS/TFS 2017 中使用 OAuth 验证 REST API

java - 如何获取两个 REST API 响应的差异?

json - 使用 JSON Merge Patch,如何引用子集合的成员?