View a markdown version of this page

Modifica delle risorse con l'operazione PATCH - AWS HealthLake

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Modifica delle risorse con l'operazione PATCH

AWS HealthLake supporta l'operazione PATCH per le risorse FHIR, che consente di modificare le risorse prendendo di mira elementi specifici da aggiungere, sostituire o eliminare senza aggiornare l'intera risorsa. Questa operazione è particolarmente utile quando è necessario:

  • Effettuare aggiornamenti mirati a risorse di grandi dimensioni

  • Riduci l'utilizzo della larghezza di banda di rete

  • Esegui modifiche atomiche su elementi di risorse specifici

  • Riduci al minimo il rischio di sovrascrivere le modifiche simultanee

  • Aggiorna le risorse come parte dei flussi di lavoro in batch e delle transazioni

Formati PATCH supportati

AWS HealthLake supporta due formati PATCH standard:

Patch JSON (RFC 6902)

Utilizza la sintassi JSON Pointer per indirizzare gli elementi in base alla loro posizione nella struttura delle risorse.

Tipo di contenuto: application/json-patch+json

FHIRPath Patch (specifica FHIR R4)

Utilizza FHIRPath le espressioni per indirizzare gli elementi in base al loro contenuto e alle loro relazioni, fornendo un approccio nativo FHIR all'applicazione delle patch.

Tipo di contenuto: application/fhir+json

Utilizzo

Operazioni PATCH dirette

L'operazione PATCH può essere richiamata direttamente sulle risorse FHIR utilizzando il metodo HTTP PATCH:

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

PATCH in pacchetti

Le operazioni PATCH possono essere incluse come voci all'interno di pacchetti FHIR di tipo batch oppure transaction consentono di combinare le operazioni di patch con altre interazioni FHIR (creazione, lettura, aggiornamento, eliminazione) in un'unica richiesta.

  • Pacchetti di transazioni: tutte le voci hanno esito positivo o negativo in modo atomico

  • Pacchetti Batch: ogni voce viene elaborata in modo indipendente

Formato di patch JSON

Operazioni supportate

Operation Description
add Aggiungi un nuovo valore alla risorsa
remove Rimuove un valore dalla risorsa
replace Sostituisci un valore esistente nella risorsa
move Rimuovi un valore da una posizione e aggiungilo a un'altra
copy Copia un valore da una posizione all'altra
test Verifica che un valore nella posizione di destinazione sia uguale a un valore specificato

Sintassi del percorso

JSON Patch utilizza la sintassi JSON Pointer (RFC 6901):

Esempio di percorso Description
/name/0/family Elemento della famiglia del nome
/telecom/- Aggiungi all'array di telecomunicazioni
/active Elemento attivo a livello di root
/address/0/line/1 Seconda riga del primo indirizzo

Esempi

Richiesta diretta di patch JSON con più operazioni

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" } ]
Richiesta diretta di patch JSON con singola operazione

PATCH [base]/Patient/example Content-Type: application/json-patch+json [ { "op": "replace", "path": "/active", "value": false } ]
Patch JSON in bundle

Usa una risorsa binaria contenente il payload della patch JSON con codifica base64:

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

FHIRPath Formato della patch

Operazioni supportate

Operation Description
add Aggiungere un nuovo elemento a una risorsa
insert Inserisce un elemento in una posizione specifica in un elenco
delete Rimuove un elemento da una risorsa
replace Sostituisci il valore di un elemento esistente
move Riordina gli elementi all'interno di un elenco

Sintassi del percorso

FHIRPath La patch utilizza FHIRPath espressioni che supportano:

  • Accesso basato su indici: Patient.name[0]

  • Filtraggio con: where() Patient.name.where(use = 'official')

  • Logica booleana: Patient.telecom.where(system = 'phone' and use = 'work')

  • Funzioni di sottoimpostazione:, first() last()

  • Controlli di esistenza:exists(), count()

  • Navigazione polimorfa: Observation.value

Esempi

Richiesta diretta di patch 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 Patch inclusa nel pacchetto

Usa una risorsa Parameters come risorsa di ingresso conmethod: 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" } }] }

Intestazioni di richiesta

Header Richiesto Descrizione
Content-Type application/json-patch+jsonper JSON Patch o application/fhir+json per FHIRPath Patch
If-Match No Aggiornamento condizionale specifico della versione utilizzando ETag

Risposta di esempio

L'operazione restituisce la risorsa aggiornata con le informazioni sulla nuova versione:

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

Comportamento

L'operazione PATCH:

  • Convalida la sintassi della patch in base alle specifiche appropriate (RFC 6902 per JSON Patch, FHIR R4 per Patch) FHIRPath

  • Applica le operazioni in modo atomico: tutte le operazioni hanno esito positivo o negativo

  • Aggiorna l'ID della versione della risorsa e crea una nuova voce della cronologia

  • Conserva la risorsa originale nella cronologia prima di applicare le modifiche

  • Convalida i vincoli delle risorse FHIR dopo l'applicazione delle patch

  • Supporta gli aggiornamenti condizionali utilizzando l'intestazione If-Match con ETag

Gestione errori

L'operazione gestisce le seguenti condizioni di errore:

  • 400 Bad Request: sintassi della patch non valida (richiesta non conforme o documento di patch non valido)

  • 404 Not Found: risorsa non trovata (l'ID specificato non esiste)

  • 409 Conflitto: conflitto di versione (vengono forniti aggiornamenti simultanei o ID di versione non corrente)

  • 422 Entità non processabile: le operazioni di patch non possono essere applicate agli elementi di risorsa specificati

Riepilogo delle capacità

Funzionalità Patch JSON FHIRPath Patch
Tipo di contenuto application/json-patch+json application/fhir+json
Formato del percorso Puntatore JSON (RFC 6901) FHIRPath espressioni
API Patch diretta Supportata Supportata
Batch del pacchetto Supportato (tramite binario) Supportato (tramite parametri)
Transazione in bundle Supportato (tramite binario) Supportato (tramite parametri)
Operazioni aggiungere, rimuovere, sostituire, spostare, copiare, testare aggiungere, inserire, eliminare, sostituire, spostare

Limitazioni

  • Le operazioni PATCH condizionali che utilizzano condizioni di ricerca non sono supportate

  • La patch JSON nei bundle deve utilizzare risorse binarie con contenuto codificato in base64

  • FHIRPath Le patch nei bundle devono utilizzare risorse Parameters

Risorse aggiuntive

Per ulteriori informazioni sulle operazioni PATCH, consulta: