View a markdown version of this page

PATCH オペレーションによるリソースの変更 - AWS HealthLake

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

PATCH オペレーションによるリソースの変更

AWS HealthLake は FHIR リソースの PATCH オペレーションをサポートしているため、リソース全体を更新することなく、特定の要素をターゲットにして追加、置換、または削除することで、リソースを変更できます。このオペレーションは、以下が必要な場合に特に役立ちます。

  • 大規模なリソースをターゲットに更新する

  • ネットワーク帯域幅の使用量を減らす

  • 特定のリソース要素に対してアトミック変更を実行する

  • 同時変更を上書きするリスクを最小限に抑える

  • バッチワークフローとトランザクションワークフローの一部としてリソースを更新する

サポートされているパッチ形式

AWS HealthLake は 2 つの標準 PATCH 形式をサポートしています。

JSON パッチ (RFC 6902)

JSON ポインタ構文を使用して、リソース構造内の要素の位置で要素をターゲットにします。

Content-Type: application/json-patch+json

FHIRPath パッチ (FHIR R4 仕様)

FHIRPath 式を使用して、コンテンツと関係によって要素をターゲットにし、パッチ適用に対する FHIR ネイティブアプローチを提供します。

Content-Type: application/fhir+json

使用方法

Direct PATCH オペレーション

PATCH オペレーションは、PATCH HTTP メソッドを使用して FHIR リソースで直接呼び出すことができます。

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

バンドル内のパッチ

パッチオペレーションは、タイプ batchまたは の FHIR バンドル内のエントリとして含めることができるためtransaction、1 つのリクエストでパッチオペレーションを他の FHIR インタラクション (作成、読み取り、更新、削除) と組み合わせることができます。

  • トランザクションバンドル: すべてのエントリがアトミックに成功または失敗する

  • バッチバンドル: 各エントリは個別に処理されます

JSON パッチ形式

サポートされているオペレーション

運用 説明
add リソースに新しい値を追加する
remove リソースから値を削除する
replace リソース内の既存の値を置き換える
move ある場所から値を削除し、別の場所に追加する
copy ある場所から別の場所に値をコピーする
test ターゲットロケーションの値が指定された値と等しいことをテストする

パス構文

JSON パッチは JSON ポインタ構文 (RFC 6901) を使用します。

パスの例 説明
/name/0/family 名前のファミリー要素
/telecom/- テレコム配列に追加
/active ルートレベルのアクティブ要素
/address/0/line/1 最初のアドレスの 2 行目

複数のオペレーションによる直接 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 Patch は、以下をサポートする 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 パッチ

Parameters リソースを のエントリリソースとして使用します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 for JSON パッチまたは application/fhir+json for 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" } }

行動

PATCH オペレーション:

  • 適切な仕様に従ってパッチ構文を検証します (JSON パッチの場合は RFC 6902、FHIRPath パッチの場合は FHIR R4)

  • オペレーションをアトミックに適用 - すべてのオペレーションが成功または失敗する

  • リソースバージョン ID を更新し、新しい履歴エントリを作成します。

  • 変更を適用する前に、元のリソースを履歴に保持します

  • パッチを適用した後、FHIR リソースの制約を検証します

  • ETag で If-Match ヘッダーを使用した条件付き更新をサポート

エラー処理

オペレーションは、次のエラー条件を処理します。

  • 400 不正なリクエスト: 無効なパッチ構文 (非準拠のリクエストまたは不正な形式のパッチドキュメント)

  • 404 Not Found: リソースが見つかりません (指定された ID は存在しません)

  • 409 競合: バージョン競合 (同時更新または以前のバージョン ID の提供)

  • 422 未処理のエンティティ: パッチオペレーションを指定されたリソース要素に適用できません

機能の概要

機能 JSON パッチ FHIRPath パッチ
コンテンツタイプ application/json-patch+json application/fhir+json
パス形式 JSON ポインタ (RFC 6901) FHIRPath 式
Direct PATCH API サポート対象 サポート
バンドルバッチ サポートされている (バイナリ経由) サポートされている (パラメータ経由)
バンドルトランザクション サポートされている (バイナリ経由) サポートされている (パラメータ経由)
オペレーション 追加、削除、置換、移動、コピー、テスト 追加、挿入、削除、置換、移動

制限事項

  • 検索条件を使用した条件付き PATCH オペレーションはサポートされていません

  • バンドル内の JSON パッチは、base64 でエンコードされたコンテンツを含むバイナリリソースを使用する必要があります

  • バンドルの FHIRPath パッチは Parameters リソースを使用する必要があります

その他のリソース

PATCH オペレーションの詳細については、以下を参照してください。