本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 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 的条目包含在内transaction,batch也可以在单个请求中将补丁操作与其他 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 操作的更多信息,请参阅: