Funzionalità dell'API REST FHIR per l'API di Azure per FHIR
In questo articolo verranno illustrate alcune delle sfumature delle interazioni RESTful dell'API di Azure per FHIR.
Creazione/aggiornamento condizionale
L'API di Azure per FHIR supporta la creazione, la creazione condizionale, l'aggiornamento e l'aggiornamento condizionale, come definito dalla specifica FHIR. Un'intestazione utile in questi scenari è l'intestazione If-Match . L'intestazione If-Match
viene usata e convalida la versione da aggiornare prima di eseguire l'aggiornamento. Se l'oggetto ETag
non corrisponde al previsto ETag
, genera il messaggio di errore 412 Precondizione non riuscita.
Eliminazione e eliminazione condizionale
L'API di Azure per FHIR offre due tipi di eliminazione. C'è Delete, che è noto anche come Hard + Soft Delete e Condizional Delete.
Elimina (Hard + Soft Delete)
L'eliminazione definita dalla specifica FHIR richiede che dopo l'eliminazione di una risorsa, le letture non specifiche della versione successive di una risorsa restituiscono un codice di stato HTTP 410. Pertanto, la risorsa non viene più trovata tramite la ricerca. Inoltre, l'API di Azure per FHIR consente di eliminare completamente (inclusa tutta la cronologia) la risorsa. Per eliminare completamente la risorsa, è possibile passare le impostazioni hardDelete
dei parametri a true (DELETE {{FHIR_URL}}/{resource}/{id}?hardDelete=true)
. Se non si passa questo parametro o si imposta hardDelete
su false, le versioni storiche della risorsa saranno comunque disponibili.
Nota
Se si vuole eliminare solo la cronologia, l'API di Azure per FHIR supporta un'operazione personalizzata denominata $purge-history
. Questa operazione consente di eliminare la cronologia di una risorsa.
Eliminazione condizionale
L'eliminazione condizionale consente di passare criteri di ricerca per eliminare una risorsa. Per impostazione predefinita, l'eliminazione condizionale consente di eliminare un elemento alla volta. È anche possibile specificare il _count
parametro per eliminare fino a 100 elementi alla volta. Di seguito sono riportati alcuni esempi di uso dell'eliminazione condizionale.
Per eliminare un singolo elemento usando l'eliminazione condizionale, è necessario specificare i criteri di ricerca che restituiscono un singolo elemento.
DELETE https://{{FHIR_URL}}/Patient?identifier=1032704
È possibile eseguire la stessa ricerca, ma includere hardDelete=true
anche per eliminare tutte le cronologie.
DELETE https://{{FHIR_URL}}/Patient?identifier=1032704&hardDelete=true
Per eliminare più risorse, includere _count=100
il parametro . Questo parametro eliminerà fino a 100 risorse corrispondenti ai criteri di ricerca.
DELETE https://{{FHIR_URL}}/Patient?identifier=1032704&_count=100
Recupero di file eliminati
Se non si usa il parametro di eliminazione complessa, i record nell'API di Azure per FHIR devono comunque esistere. I record sono disponibili eseguendo una ricerca cronologia nella risorsa e cercando l'ultima versione con i dati.
Se l'ID della risorsa eliminata è noto, usare il modello URL seguente:
<FHIR_URL>/<resource-type>/<resource-id>/_history
ad esempio https://myworkspace-myfhirserver.fhir.azurehealthcareapis.com/Patient/123456789/_history
Se l'ID della risorsa non è nota, eseguire una ricerca della cronologia sull'intero tipo di risorsa:
<FHIR_URL>/<resource-type>/_history
ad esempio https://myworkspace-myfhirserver.fhir.azurehealthcareapis.com/Patient/_history
Dopo aver trovato il record da ripristinare, usare l'operazione PUT
per ricreare la risorsa con lo stesso ID oppure usare l'operazione POST
per creare una nuova risorsa con le stesse informazioni.
Nota
Non esiste una scadenza basata su tempo per i dati di eliminazione temporanea o cronologia. L'unico modo per rimuovere i dati di cronologia/eliminazione temporanea è costituito da un'eliminazione definitiva o dall'operazione di eliminazione della cronologia.
Patch e patch condizionale
Patch è un'operazione RESTful utile quando è necessario aggiornare solo una parte della risorsa FHIR. L'uso di patch consente di specificare gli elementi da aggiornare nella risorsa senza dover aggiornare l'intero record. FHIR definisce tre modi per applicare patch alle risorse: patch JSON, patch XML e patch FHIRPath. Il servizio FHIR supporta sia patch JSON che patch FHIRPath insieme a patch JSON condizionale e patch FHIRPath condizionale (che consente di applicare patch a una risorsa in base a criteri di ricerca anziché a un ID risorsa). Per informazioni dettagliate su alcuni esempi, vedere il file REST di patch FHIRPath di esempio e il file REST patch JSON per ogni approccio. Per altre informazioni, leggere la documentazione di HL7 per le operazioni di patch con FHIR.
Nota
Quando si usa PATCH
con STU3 e se si richiede un bundle cronologia, la risorsa Bundle.entry.request.method
con patch viene mappata a PUT
. Questo perché STU3 non contiene una definizione per il PATCH
verbo nel set di valori HTTPVerb.
Patch con FHIRPath Patch
Questo metodo di patch è il più potente perché sfrutta FHIRPath per selezionare l'elemento di destinazione. Uno scenario comune usa FHIRPath Patch per aggiornare un elemento in un elenco senza conoscere l'ordine dell'elenco. Ad esempio, se si desidera eliminare le informazioni di telecomunicazione domestico di un paziente senza conoscere l'indice, è possibile usare l'esempio seguente.
PATCH http://{FHIR-SERVICE-HOST-NAME}/Patient/{PatientID}
Tipo di contenuto: application/fhir+json
{
"resourceType": "Parameters",
"parameter": [
{
"name": "operation",
"part": [
{
"name": "type",
"valueCode": "delete"
},
{
"name": "path",
"valueString": "Patient.telecom.where(use = 'home')"
}
]
}
]
}
Tutte le operazioni di patch FHIRPath devono avere il application/fhir+json
set di intestazioni Content-Type. FHIRPatch Patch supporta operazioni di aggiunta, inserimento, eliminazione, rimozione e spostamento. Le operazioni di patch FHIRPatch possono essere facilmente integrate in bundle. Per altri esempi, vedere il file REST di patch FHIRPath di esempio.
Patch con patch JSON
Patch JSON nel servizio FHIR è conforme alla specifica ben usata definita dalla Internet Engineering Task Force. Il formato del payload non usa le risorse FHIR e usa invece un documento JSON sfruttando JSON-Pointers per la selezione degli elementi. Patch JSON è più compatta e dispone di un'operazione di test che consente di verificare che una condizione sia true prima di eseguire la patch. Ad esempio, se si vuole impostare un paziente come deceduto solo se non sono già contrassegnati come morti, è possibile usare l'esempio seguente.
PATCH http://{FHIR-SERVICE-HOST-NAME}/Patient/{PatientID}
Tipo di contenuto: application/json-patch+json
[
{
"op": "test",
"path": "/deceasedBoolean",
"value": false
},
{
"op": "replace",
"path": "/deceasedBoolean",
"value": true
}
]
Tutte le operazioni di patch JSON devono avere il application/json-patch+json
set di intestazioni Content-Type. Patch JSON supporta operazioni di aggiunta, rimozione, sostituzione, copia, spostamento e test. Per altri esempi, vedere il file REST patch JSON di esempio.
Patch JSON nei bundle
Per impostazione predefinita, la patch JSON non è supportata nelle risorse bundle. Questo perché un bundle supporta solo le risorse FHIR e il payload della patch JSON non è una risorsa FHIR. Per risolvere questo problema, verranno usate le risorse binarie con un tipo di contenuto di "application/json-patch+json"
e la codifica base64 del payload JSON all'interno di un bundle. Per informazioni su questa soluzione alternativa, visualizzare questo argomento su FHIR Chat Zulip.
Nell'esempio seguente si vuole modificare il sesso sul paziente a femmina. La patch [{"op":"replace","path":"/gender","value":"female"}]
JSON è stata eseguita e codificata in base64.
POST https://{FHIR-SERVICE-HOST-NAME}/
Tipo di contenuto: application/json
{
"resourceType": "Bundle",
"id": "bundle-batch",
"type": "batch",
"entry": [
{
"fullUrl": "Patient/{PatientID}",
"resource": {
"resourceType": "Binary",
"contentType": "application/json-patch+json",
"data": "W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9nZW5kZXIiLCJ2YWx1ZSI6ImZlbWFsZSJ9XQ=="
},
"request": {
"method": "PATCH",
"url": "Patient/{PatientID}"
}
}
]
}
Passaggi successivi
In questo articolo sono state illustrate alcune delle funzionalità REST dell'API di Azure per FHIR. Altre informazioni sugli aspetti principali per la ricerca delle risorse in FHIR.
(FHIR®) è un marchio registrato di HL7 e viene usato con l'autorizzazione HL7.