What are CRUD operations in FHIR?

Styring af Sundhedsdata: FHIR CRUD og Patch i HAPI

20/03/2023

Rating: 4.84 (6843 votes)

I den moderne sundhedssektor er effektiv og sikker udveksling af patientdata altafgørende. Her spiller standarder som HL7 FHIR (Fast Healthcare Interoperability Resources) en central rolle. FHIR tilbyder en robust og fleksibel metode til at repræsentere og udveksle sundhedsinformation. For udviklere, der arbejder med at bygge disse systemer i Danmark, er open source-implementeringer som HAPI FHIR uvurderlige. Men hvordan håndterer man egentlig data i et FHIR-system? Svaret ligger i de fundamentale operationer, kendt under akronymet CRUD, samt mere avancerede metoder som Patch. Denne artikel vil guide dig igennem, hvad disse operationer indebærer, og hvordan de implementeres i HAPI FHIR.

Does HAPI FHIR support patching?
Indholdsfortegnelse

Hvad er CRUD-operationer i FHIR?

CRUD er et akronym, der står for Create, Read, Update, og Delete. Disse fire funktioner er de grundlæggende byggesten for datamanipulation i næsten ethvert softwaresystem, inklusiv sundhedsinformationssystemer baseret på FHIR. De repræsenterer de mest basale interaktioner, en bruger eller et system kan have med dataressourcer, såsom en patientjournal, en observation eller en recept.

  • Create (Opret): Denne operation bruges til at oprette en ny ressource på FHIR-serveren. For eksempel, når en ny patient registreres i systemet, oprettes en ny 'Patient'-ressource.
  • Read (Læs): Denne operation bruges til at hente en eksisterende ressource. Dette kan være at hente en specifik patients data ved hjælp af et unikt ID eller at søge efter en gruppe af patienter, der opfylder bestemte kriterier.
  • Update (Opdater): Denne operation bruges til at modificere en eksisterende ressource. Hvis en patients adresse ændres, vil man bruge en update-operation til at erstatte den gamle information med den nye.
  • Delete (Slet): Denne operation bruges til at fjerne en ressource. I sundhedsvæsenet betyder dette ofte en 'logisk sletning', hvor ressourcen markeres som inaktiv eller arkiveret i stedet for at blive permanent fjernet, for at bevare en fuldstændig historik.

Disse operationer er direkte mappet til standard HTTP-metoder, hvilket gør FHIR's RESTfulde API intuitivt at arbejde med for webudviklere.

En dybere gennemgang af CRUD i HAPI FHIR

HAPI FHIR er et Java-baseret open source-bibliotek, der gør det nemmere at bygge FHIR-klienter og -servere. Rammeværket bruger Java-annotationer til at definere, hvordan metoder i din kode skal håndtere FHIR-anmodninger. Lad os se på, hvordan hver CRUD-operation typisk implementeres.

Create (Opret) med @Create

For at oprette en ny ressource, sender en klient en HTTP POST-anmodning til serverens endepunkt for den pågældende ressourcetype (f.eks. /Patient). I HAPI FHIR defineres en metode til at håndtere dette med @Create-annotationen. Metoden tager typisk en parameter annoteret med @ResourceParam, som indeholder den ressource, der skal oprettes. Serveren er ansvarlig for at tildele et unikt ID og en version til den nye ressource og returnere disse oplysninger til klienten. FHIR understøtter også 'betinget oprettelse', hvor en ressource kun oprettes, hvis den ikke allerede eksisterer baseret på specifikke søgekriterier.

Read (Læs) med @Read

At læse en ressource er den mest almindelige operation. Det gøres via en HTTP GET-anmodning til en URL, der indeholder ressourcens ID (f.eks. /Patient/123). I HAPI FHIR bruges @Read-annotationen. Metoden skal have en parameter annoteret med @IdParam for at modtage ID'et fra URL'en. HAPI FHIR understøtter også 'vread' (version read), hvor en specifik version af en ressource kan hentes (f.eks. /Patient/123/_history/2). Dette er afgørende for at kunne spore ændringer over tid.

Update (Opdater) med @Update

En opdatering sker via en HTTP PUT-anmodning. Klienten sender hele den opdaterede ressource i anmodningens body til ressourcens specifikke URL. HAPI FHIR bruger @Update-annotationen. En vigtig del af update-processen er versionsstyring. For at undgå, at to brugere overskriver hinandens ændringer, kan klienten specificere den version af ressourcen, den ønsker at opdatere. Hvis versionen på serveren er nyere, vil serveren afvise opdateringen med en fejl (HTTP 409 Conflict). Dette sikrer dataintegritet.

Delete (Slet) med @Delete

Sletning sker med en HTTP DELETE-anmodning til ressourcens URL. Metoden i HAPI FHIR er annoteret med @Delete og tager et @IdParam. Som nævnt er det sjældent en god idé at slette sundhedsdata permanent. De fleste implementeringer vil i stedet opdatere ressourcens status til 'entered-in-error' eller flytte den til et arkiv. Dette sikrer, at der altid er et revisionsspor.

Patch-operationen: En mere effektiv opdatering

Dette bringer os til et centralt spørgsmål: Understøtter HAPI FHIR patching? Ja, det gør det. Mens en standard Update (PUT) erstatter hele ressourcen, tillader en Patch-operation en delvis opdatering. I stedet for at sende hele patientobjektet for at ændre et telefonnummer, sender klienten kun instruktioner om, hvilket felt der skal ændres, og hvad den nye værdi skal være.

Hvorfor er dette vigtigt?

  1. Effektivitet: Det reducerer mængden af data, der sendes over netværket, hvilket er særligt vigtigt i mobile eller båndbreddebegrænsede miljøer.
  2. Reducerer race conditions: Ved kun at ændre specifikke felter mindskes risikoen for utilsigtet at overskrive en ændring, som en anden bruger har lavet på et andet felt i samme ressource i mellemtiden.

I HAPI FHIR defineres en patch-metode med @Patch-annotationen. Metoden modtager typisk ressourcens ID, patchens type (f.eks. JSON Patch eller XML Patch) og selve patch-dataene. Det er vigtigt at bemærke, at mens HAPI FHIR-serverrammeværket giver skelettet til at modtage patch-anmodninger, skal selve logikken til at anvende patchen på ressourcen implementeres af udvikleren. HAPI FHIR's JPA-server inkluderer dog en fuld implementering af dette.

Sammenligningstabel: Update (PUT) vs. Patch

EgenskabUpdate (PUT)Patch (PATCH)
OperationErstatter hele ressourcen.Anvender delvise ændringer på ressourcen.
DataoverførselHele ressourcen skal sendes, selv for små ændringer.Kun ændringerne sendes, hvilket er mere effektivt.
AnvendelsesscenarieIdeel når hele ressourcen skal udskiftes, eller når klienten har den fulde, opdaterede tilstand.Ideel for at ændre et eller få felter, f.eks. opdatere en status eller et telefonnummer.
Risiko for datatabHøjere risiko for at overskrive samtidige ændringer, hvis ikke versionsstyring bruges korrekt.Lavere risiko, da den kun påvirker specifikke felter.

Ud over CRUD: Andre Vigtige FHIR-operationer

FHIR-specifikationen definerer også 'Udvidede Operationer' (Extended Operations). Disse er mere komplekse handlinger, der går ud over simpel datamanipulation. De kendes ved at have et `$`-præfiks i deres navn. HAPI FHIR understøtter implementering af disse via @Operation-annotationen.

Nogle eksempler inkluderer:

  • $everything: En meget kraftfuld operation, der kan køres på en specifik patient for at hente alle ressourcer, der er relateret til den patient (observationer, recepter, aftaler osv.) i en enkelt anmodning.
  • $validate: Bruges til at validere en ressource mod en bestemt profil for at sikre, at den overholder specifikke forretningsregler eller nationale standarder, uden at gemme den.
  • $transaction: Gør det muligt at sende en samling af flere CRUD-operationer (en 'bundle') til serveren, som skal udføres som en enkelt, atomar transaktion. Enten lykkes alle, eller ingen af dem gør. Dette er essentielt for at sikre konsistens på tværs af relaterede ressourcer.

Ofte Stillede Spørgsmål (FAQ)

Hvad står CRUD for i FHIR-sammenhæng?
CRUD står for Create, Read, Update, og Delete. Det er de fire grundlæggende operationer til at administrere dataressourcer på en FHIR-server, hvilket svarer til at oprette, læse, opdatere og slette information.
Hvorfor skulle jeg bruge PATCH i stedet for UPDATE?
Du bør bruge PATCH, når du kun har brug for at ændre en lille del af en ressource. Det er mere netværkseffektivt og reducerer risikoen for at overskrive data, som en anden bruger måske har ændret på samme tid i et andet felt af ressourcen.
Er det kompliceret at implementere disse operationer i en HAPI FHIR-server?
Nej, HAPI FHIR-rammeværket gør det relativt ligetil ved hjælp af Java-annotationer som @Create, @Read, @Update, @Delete, og @Patch. Rammeværket håndterer meget af den underliggende HTTP- og FHIR-protokol-logik, så udvikleren kan fokusere på forretningslogikken.

Konklusion

Forståelsen af CRUD- og Patch-operationer er fundamental for enhver, der arbejder med FHIR. Disse operationer udgør rygraden i, hvordan sundhedsdata administreres, deles og vedligeholdes i moderne interoperable systemer. HAPI FHIR tilbyder en kraftfuld og udviklervenlig platform til at implementere disse funktioner, hvilket gør det til et fremragende valg for udvikling af FHIR-baserede løsninger i Danmark. Ved at mestre disse grundlæggende principper kan udviklere bygge robuste, effektive og sikre sundhedsapplikationer, der forbedrer dataudvekslingen til gavn for både klinikere og patienter.

Hvis du vil læse andre artikler, der ligner Styring af Sundhedsdata: FHIR CRUD og Patch i HAPI, kan du besøge kategorien Sundhed.

Go up