View a markdown version of this page

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

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 PATCH 操作修改資源

AWS HealthLake 支援 FHIR 資源的 PATCH 操作,可讓您透過鎖定要新增、取代或刪除的特定元素來修改資源,而無需更新整個資源。當您需要執行下列動作時,此操作特別有用:

  • 對大型資源進行目標性更新

  • 減少網路頻寬用量

  • 對特定資源元素執行原子修改

  • 將覆寫並行變更的風險降至最低

  • 在批次和交易工作流程中更新資源

支援的修補程式格式

AWS HealthLake 支援兩種標準 PATCH 格式:

JSON 修補程式 (RFC 6902)

使用 JSON 指標語法,依其在資源結構中的位置來鎖定元素。

Content-Type: application/json-patch+json

FHIRPath 修補程式 (FHIR R4 規格)

使用 FHIRPath 表達式,依其內容和關係來鎖定元素,提供 FHIR 原生的修補方法。

Content-Type: application/fhir+json

Usage

直接修補操作

您可以使用 PATCH HTTP 方法,直接在 FHIR 資源上叫用 PATCH 操作:

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

套件中的 PATCH

PATCH 操作可以包含在類型 batch或 的 FHIR 套件中作為項目transaction,讓您能夠在單一請求中將修補程式操作與其他 FHIR 互動 (建立、讀取、更新、刪除) 結合。

  • 交易套件:所有項目都會以原子方式成功或失敗

  • 批次套件:每個項目都會獨立處理

JSON 修補程式格式

受支援的 操作

作業 Description
add 將新值新增至資源
remove 從資源移除值
replace 取代 資源中的現有值
move 從一個位置移除值,並將其新增至另一個位置
copy 將值從一個位置複製到另一個位置
test 測試目標位置的值是否等於指定的值

路徑語法

JSON 修補程式使用 JSON 指標語法 (RFC 6901):

路徑範例 Description
/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 修補程式格式

受支援的 操作

作業 Description
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

範例

Direct 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" } }

Behavior (行為)

PATCH 操作:

  • 根據適當的規格驗證修補程式語法 (RFC 6902 for JSON Patch、FHIR R4 for FHIRPath Patch)

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

  • 更新資源版本 ID 並建立新的歷史記錄項目

  • 在套用變更之前,保留歷史記錄中的原始資源

  • 套用修補程式後驗證 FHIR 資源限制

  • 支援使用 If-Match 標頭搭配 ETag 進行條件式更新

錯誤處理

操作會處理下列錯誤條件:

  • 400 錯誤的請求:無效的修補程式語法 (不符合的請求或格式錯誤的修補程式文件)

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

  • 409 衝突:版本衝突 (提供並行更新或非目前版本 ID)

  • 422 無法處理的實體:修補程式操作無法套用至指定的資源元素

功能摘要

功能 JSON 修補程式 FHIRPath 修補程式
內容類型 application/json-patch+json application/fhir+json
路徑格式 JSON 指標 (RFC 6901) FHIRPath 表達式
Direct PATCH API 支援 支援
套件批次 支援 (透過二進位) 支援 (透過參數)
套件交易 支援 (透過二進位) 支援 (透過參數)
操作 新增、移除、取代、移動、複製、測試 新增、插入、刪除、取代、移動

限制

  • 不支援使用搜尋條件的條件式 PATCH 操作

  • 套件中的 JSON 修補程式必須使用具有 base64 編碼內容的二進位資源

  • 套件中的 FHIRPath 修補程式必須使用參數資源

其他資源

如需 PATCH 操作的詳細資訊,請參閱: