View a markdown version of this page

使用 PATCH 操作修改资源 - AWS HealthLake

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 PATCH 操作修改资源

AWS HealthLake 支持 FHIR 资源的 PATCH 操作,使您能够通过将特定元素定位为添加、替换或删除来修改资源,而无需更新整个资源。当您需要执行以下操作时,此操作特别有用:

  • 对大型资源进行有针对性的更新

  • 减少网络带宽使用量

  • 对特定资源元素进行原子修改

  • 最大限度地降低覆盖并发更改的风险

  • 作为批处理和事务工作流程的一部分更新资源

支持的补丁格式

AWS HealthLake 支持两种标准补丁格式:

JSON 补丁 (RFC 6902)

使用 JSON 指针语法按元素在资源结构中的位置来定位元素。

Content-Type: application/json-patch+json

FHIRPath 补丁(FHIR R4 规范)

使用 FHIRPath 表达式根据元素的内容和关系来定位元素,从而提供了 FHIR 原生的修补方法。

Content-Type: application/fhir+json

用法

直接补丁操作

可以使用 PATCH HTTP 方法直接在 FHIR 资源上调用 PATCH 操作:

PATCH [base]/[resource-type]/[id]{?_format=[mime-type]}

捆绑包中的补丁

补丁操作可以作为类型为 FHIR Bundle 的条目包含在内transactionbatch也可以在单个请求中将补丁操作与其他 FHIR 交互(创建、读取、更新、删除)结合起来。

  • 交易捆绑包:所有条目都以原子方式成功或失败

  • Batch 捆绑包:每个参赛作品均独立处理

JSON 补丁格式

支持的操作

操作 说明
add 为资源添加新值
remove 从资源中移除一个值
replace 替换资源中的现有值
move 从一个位置移除一个值并将其添加到另一个位置
copy 将值从一个位置复制到另一个位置
test 测试目标位置的值是否等于指定值

路径语法

JSON 补丁使用 JSON 指针语法 (RFC 6901):

路径示例 说明
/name/0/family 名字的家族元素
/telecom/- 追加到电信阵列
/active 根级活动元素
/address/0/line/1 第一个地址的第二行

示例

包含多个操作的直接 JSON 补丁请求

PATCH [base]/Patient/example Content-Type: application/json-patch+json If-Match: W/"1" [ { "op": "replace", "path": "/name/0/family", "value": "Smith" }, { "op": "add", "path": "/telecom/-", "value": { "system": "phone", "value": "555-555-5555", "use": "home" } }, { "op": "remove", "path": "/address/0" }, { "op": "move", "from": "/name/0/family", "path": "/name/1/family" }, { "op": "test", "path": "/gender", "value": "male" }, { "op": "copy", "from": "/name/0", "path": "/name/1" } ]
通过单一操作直接请求 JSON 补丁

PATCH [base]/Patient/example Content-Type: application/json-patch+json [ { "op": "replace", "path": "/active", "value": false } ]
套装中的 JSON 补丁

使用包含 base64 编码的 JSON 补丁负载的二进制资源:

{ "resourceType": "Bundle", "type": "transaction", "entry": [{ "resource": { "resourceType": "Binary", "contentType": "application/json-patch+json", "data": "W3sib3AiOiJhZGQiLCJwYXRoIjoiL2JpcnRoRGF0ZSIsInZhbHVlIjoiMTk5MC0wMS0wMSJ9XQ==" }, "request": { "method": "PATCH", "url": "Patient/123" } }] }

FHIRPath 补丁格式

支持的操作

操作 说明
add 向资源添加新元素
insert 在列表的特定位置插入一个元素
delete 从资源中移除元素
replace 替换现有元素的值
move 对列表中的元素重新排序

路径语法

FHIRPath 补丁使用 FHIRPath 表达式,支持:

  • 基于索引的访问Patient.name[0]

  • 使用以下@@ 方式进行筛选 where()Patient.name.where(use = 'official')

  • 布尔逻辑Patient.telecom.where(system = 'phone' and use = 'work')

  • 子集设置函数first()last()

  • 存在性检查exists()count()

  • 多态导航Observation.value

示例

直接申请 FHIRPath 补丁

PATCH [base]/Patient/123 Content-Type: application/fhir+json Authorization: ... { "resourceType": "Parameters", "parameter": [{ "name": "operation", "part": [ { "name": "type", "valueCode": "add" }, { "name": "path", "valueString": "Patient" }, { "name": "name", "valueString": "birthDate" }, { "name": "value", "valueDate": "1990-01-01" } ] }] }
FHIRPath 捆绑包中的补丁

使用带有method: PATCH以下内容的参数资源作为入口资源:

{ "resourceType": "Bundle", "type": "transaction", "entry": [{ "resource": { "resourceType": "Parameters", "parameter": [{ "name": "operation", "part": [ { "name": "type", "valueCode": "add" }, { "name": "path", "valueString": "Patient" }, { "name": "name", "valueString": "birthDate" }, { "name": "value", "valueDate": "1990-01-01" } ] }] }, "request": { "method": "PATCH", "url": "Patient/123" } }] }

请求标头

标题 必需 描述
Content-Type application/json-patch+json用于 JSON 补丁或application/fhir+json FHIRPath 补丁
If-Match 使用特定版本的条件更新 ETag

示例响应

该操作将返回包含新版本信息的更新资源:

HTTP/1.1 200 OK Content-Type: application/fhir+json ETag: W/"2" Last-Modified: Mon, 05 May 2025 10:10:10 GMT { "resourceType": "Patient", "id": "example", "active": true, "name": [ { "family": "Smith", "given": ["John"] } ], "telecom": [ { "system": "phone", "value": "555-555-5555", "use": "home" } ], "meta": { "versionId": "2", "lastUpdated": "2025-05-05T10:10:10Z" } }

行为

补丁操作:

  • 根据相应的规范验证补丁语法(JSON 补丁为 RFC 6902,补丁为 FHIR R4) FHIRPath

  • 以原子方式应用操作-所有操作成功或全部失败

  • 更新资源版本 ID 并创建新的历史记录条目

  • 在应用更改之前,将原始资源保留在历史记录中

  • 在应用补丁后验证 FHIR 资源限制

  • 支持使用带有 If-Match 标头的条件更新 ETag

错误处理

该操作处理以下错误情况:

  • 400 错误请求:补丁语法无效(请求不符合要求或补丁文档格式错误)

  • 404 未找到:未找到资源(指定的 ID 不存在)

  • 409 冲突:版本冲突(并发更新或提供了非当前版本 ID)

  • 422 无法处理的实体:补丁操作无法应用于指定的资源元素

功能摘要

能力 json 补丁 FHIRPath 补丁
内容类型 application/json-patch+json application/fhir+json
路径格式 JSON Pointer (RFC 6901) FHIRPath 表达式
直接补丁 API 支持 支持
捆绑包 Batch 支持(通过二进制) 支持(通过参数)
捆绑交易 支持(通过二进制) 支持(通过参数)
操作 添加、删除、替换、移动、复制、测试 添加、插入、删除、替换、移动

限制

  • 不支持使用搜索条件的条件补丁操作

  • 捆绑包中的 JSON 补丁必须使用带有 base64 编码内容的二进制资源

  • FHIRPath 捆绑包中的补丁必须使用参数资源

其他资源

有关 PATCH 操作的更多信息,请参阅: