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

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

使用 PATCH 操作修改资源

AWS HealthLake 现在支持 FHIR 资源的 PATCH 操作,允许您通过将特定元素定位为添加、替换或删除来修改资源,而无需更新整个资源。此操作对于远程客户端或带宽有限且希望减少网络使用量的客户端特别有用。当您需要执行以下操作时,此操作特别有用:

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

  • 减少网络带宽使用量

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

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

用量

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

支持的操作

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

支持的补丁操作

HealthLake 根据 RFC 6902,支持以下 JSON 补丁操作:

操作 说明
add 为资源添加新值
remove 从资源中移除一个值
replace 替换资源中的现有值
move 功能上与在 “从” 位置执行 “删除” 操作相同,然后立即在目标位置执行 “添加” 操作,其值刚刚被移除
copy 将指定位置的值复制到目标位置
test 测试目标位置的值是否等于指定值

请求标头

标题 必需 描述
Content-Type 必须是 application/json-patch+json
If-Match 使用特定版本的条件更新 ETag

示例

包含多个操作的补丁请求

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": "************", "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" } ]
单次操作的补丁请求

PATCH [base]/Patient/example Content-Type: application/json-patch+json [ { "op": "replace", "path": "/active", "value": false } ]
示例响应

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

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": "************", "use": "home" } ], "meta": { "versionId": "2", "lastUpdated": "2025-05-05T10:10:10Z" } }

JSON 补丁路径语

路径参数使用 JSON 指针语法 (RFC 6901):

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

行为

补丁操作:

  1. 根据 RFC 6902 和 RFC 6901 验证 JSON 补丁语法

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

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

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

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

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

错误处理

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

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

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

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

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

警告

  • 仅支持application/json-patch+json内容类型

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

有关补丁操作的更多信息,请参阅 FHIR R4 补丁文档