Het is zeer onwaarschijnlijk dat een Koppeltaal interface ongewijzigd blijft. Als de Koppeltaal eisen in der loop ter tijd veranderen, kunnen er nieuwe verzamelingen van FHIR resources en profielen worden toegevoegd, kunnen de relaties tussen de resources veranderen en kan de structuur van de gegevens in de resources worden gewijzigd.
Hoewel het bijwerken van de Koppeltaal interfaces voor het afhandelen van nieuwe of verschillende behoeften een relatief eenvoudig proces lijkt, moet men echter rekening houden met de effecten die dergelijke wijzigingen hebben op de aanbiedende en afnemende partijen die Koppeltaal interfaces gebruiken. Het probleem is dat hoewel de leverancier die een Koppeltaal interface ontwerpt en implementeert volledige controle heeft over die API, de leverancier niet dezelfde mate van controle heeft over de toepassingen, die mogelijk worden gebouwd door externe organisaties die extern werken. De primaire noodzaak is het zorgen dat bestaande toepassingen ongewijzigd blijven werken, terwijl nieuwe toepassingen kunnen profiteren van nieuwe functies en resources.
Versiebeheer zorgt dat een Koppeltaal interface aan kan geven welke functies en FHIR resources beschikbaar worden gemaakt en een toepassing kan aanvragen verzenden die worden doorgestuurd naar een specifieke versie van een functie of FHIR resource.
De volgende paragrafen beschrijven enkele verschillende benaderingen, die allemaal hun eigen voor- en nadelen hebben.
Geen versiebeheer
Dit is de eenvoudigste manier en mogelijk acceptabel voor een aantal interne interfaces. Belangrijke wijzigingen kunnen worden weergegeven als nieuwe resources of nieuwe koppelingen. Als u inhoud toevoegt aan bestaande FHIR resources, is er mogelijk geen wijziging die problemen geeft, omdat toepassingen die deze inhoud niet verwachten te zien, dit zullen negeren.
Een aanvraag voor de URI moet bijvoorbeeld de details retourneren van een Patient met de velden , en die worden https://koppeltaal.nl/Patient/3
verwacht door de toepassing:
Bestaande toepassingen blijven mogelijk goed werken als ze in staat zijn om niet-herkende velden te negeren, terwijl nieuwe toepassingen kunnen worden ontworpen voor het afhandelen van dit nieuwe veld. Als echter steeds ingrijpender wijzigingen in het schema van de resources optreden (zoals verwijderen of wijzigen van veldnamen) of de relaties tussen resources wijzigen, kan dit inhouden dat dit grote veranderingen zijn die verhinderen dat bestaande toepassingen correct werken. In deze situaties moet u een van de volgende benaderingen overwegen.
URI-versiebeheer
Telkens wanneer de Koppeltaal interface wijzigt of het schema van resources aanpast, voegt men een uniek versienummer toe aan de URI voor elke resource. De bestaande URI's moeten blijven functioneren als voorheen en resources retourneren die voldoen aan hun oorspronkelijke schema.
Als het vorige voorbeeld wordt uitgebreid, als het veld is geherstructureerd in subvelden met elk onderdeel van het adres (zoals , , en ), kan deze versie van de resource worden blootgesteld via een URI met een versienummer, zoals https://koppeltaal.nl/v2/Patient/3
Dit mechanisme voor versiebeheer is zeer eenvoudig, maar is afhankelijk van de server die de aanvraag naar het juiste eindpunt doorstuurt. Het kan echter onhandig worden als de Koppeltaal interface via verschillende iteraties groeit en de server een aantal verschillende versies moet ondersteunen. Vanuit het oogpunt van een purist halen de toepassingen in alle gevallen dezelfde gegevens op (Patient 3), dus de URI mag niet echt verschillen, afhankelijk van de versie. FHIR Referenties wordt door dit schema ook ingewikkelder, omdat alle koppelingen het versienummer moeten opnemen in hun URI's.
Header-versiebeheer
In plaats van het versienummer in het URI toe te voegen, kan men een aangepaste header implementeren die de versie van de resource aangeeft. Deze aanpak vereist dat de toepassing de juiste header toevoegt aan alle aanvragen, hoewel de code voor het verwerken van de aanvraag een standaardwaarde (versie 1) kan gebruiken als de versie-header wordt weggelaten. In de volgende voorbeelden wordt een aangepaste header met de naam Custom-Header gebruikt. De waarde van deze header geeft de versie van de Koppeltaal interface aan.
GET https://koppeltaal.nl/Patient/3
Custom-Header: Koppeltaal-version=2
Net als bij de vorige benadering moet men voor het implementeren van FHIR referenties de juiste aangepaste header in koppelingen toevoegen.
Mediatype-versiebeheer
Wanneer een client toepassing een HTTP GET-aanvraag naar een webserver verzendt, moet deze de indeling van de inhoud bepalen die ze kan verwerken met behulp van een Accept-header. Vaak is het doel van de Accept-header ervoor te zorgen dat de client toepassing op kan geven of de inhoud van het antwoord XML, JSON of een andere algemene indeling moet zijn, die door de client kan worden geparseerd. Het is echter mogelijk aangepaste mediatypen te definiëren met informatie voor het inschakelen van de client toepassing, om aan te geven welke versie van een FHIR resource wordt verwacht.
In het volgende voorbeeld ziet u een aanvraag die een Accept-header opgeeft met de waarde application/vnd.adventure-works.v2+json. Het vnd.adventure-works.v1-element geeft bij de webserver aan dat versie 2 van de resource moet worden geretourneerd, terwijl het json-element aangeeft dat de indeling van de inhoud JSON moet zijn:
De code voor het verwerken van de aanvraag is verantwoordelijk voor de verwerking van de Accept-header en het zo veel mogelijk naleven ervan (de client toepassing kan verschillende indelingen opgeven in de Accept-header. In dat geval kan de webserver de meest geschikte indeling voor de inhoud kiezen). De webserver bevestigt de indeling van de gegevens in de inhoud met behulp van de Content-Type-header.
Als de Accept-header geen bekende mediatypen opgeeft, kan de webserver een antwoordbericht HTTP 406 (Niet aanvaardbaar) genereren, of een bericht retourneren met een standaard-mediatype. Deze aanpak is weliswaar de zuiverste van de mechanismen voor versiebeheer en is van nature geschikt voor FHIR referenties, dat het MIME-type van gerelateerde gegevens in links naar resources kan opnemen.
Notitie
Wanneer men een strategie voor versiebeheer selecteert, moet men ook de gevolgen voor de prestaties overwegen, met name opslaan in caches op de webserver.
De schema's voor URI-versiebeheer is cache-vriendelijk, aangezien dezelfde combinatie van de URI-querytekenreeks telkens naar dezelfde gegevens verwijst.
De mechanismen voor Header-versiebeheer en Mediatype-versiebeheer vereisen extra logica voor het onderzoeken van de waarden in de aangepaste header of de Accept-header.
In een grootschalige omgeving kan het gebruik van verschillende versies van een web-API door veel clients leiden tot een aanzienlijke hoeveelheid gedupliceerde gegevens in een cache aan serverzijde. Dit probleem kan acuut worden als een client toepassing met een webserver communiceert via een proxy die opslaan in cache implementeert en die alleen een aanvraag naar de webserver verzendt als deze niet op dit moment een kopie van de aangevraagde gegevens in de cache bevat.
Het Open API Initiative
Het Open API Initiative is gemaakt door een brancheconsortium om REST-API-beschrijvingen bij leveranciers te standaardiseren. Als onderdeel van dit initiatief kreeg de Swagger 2.0-specificatie de nieuwe naam OpenAPI Specification (OAS) en werd deze onder het Open API Initiative gebracht.
Wellicht kan men het OpenAPI overnemen voor de beheer van de verschillnde Koppeltaal interfaces. Enkele punten om in overweging te nemen:
De OpenAPI Specification wordt geleverd met een set van richtlijnen over hoe een REST-API moet worden ontworpen. Dit heeft voordelen voor interoperabiliteit, maar vereist meer zorg bij het ontwerpen van de Koppeltaal interfaces om te voldoen aan de specificatie.
OpenAPI draagt bij aan een contract-eerst-benadering, in plaats van een implementatie-eerst-benadering (zie onze referentie implementatie). Contract-eerst betekent dat de Koppeltaal interface-contract (de interface) eerst ontwerpt en vervolgens de code schrijft die het contract implementeert.
Hulpprogramma's zoals Swagger kunnen client bibliotheken of documentatie van de API-contracten genereren. Zie bijvoorbeeld helppagina'ASP.NET web-API met behulp van Swagger.