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 |
Sì | 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: