...
Bovenstaande onderwerp is voor Koppeltaal verder uitgewerkt en enkele (extra) richtlijnen zijn hierbij aangeven op basis van praktische ervaring en bestaande oplossingen (zie o.a.https://www. hl7.org/fhir/http.html enhtml#Status-Codesen https://nl.wikipedia.org/wiki/Lijst_van_HTTP-statuscodes).
...
De HTTP-standaard biedt meer dan 70 statuscodes om de return waarden te beschrijven. We hebben ze niet allemaal nodig, maar er moeten er minstens 10 worden gebruikt. Gebruik HTTP-statuscodes en probeer ze netjes aan relevante standaardcodes toe te wijzen. De meeste REST API-providers gebruiken een kleine subset. Zie: https://www.hl7.org/fhir/http.html#Status-Codes
- retourneer NIET alleen de HTTP-statuscode 200 (OK), ongeacht of het succesvol dan wel een fout betreft
- gebruik de range 2xx, wanneer een aanvraag (volledig) verwerkt is en geslaagd is.
- gebruik de range 3xx, wanneer de client aanvullende acties moet ondernemen (omleiding) om een bepaalde aanvraag te voltooien. De vereiste actie kan worden uitgevoerd zonder interactie met de gebruiker, als het tweede verzoek een GET of HEAD is.
- gebruik de range 4xx, wanneer de aanvraag niet (volledig) slaagt en de client deze aanvraag kan laten slagen door de aanvraag aan de client kant aan te laten passen.
- gebruik de range 5xx, wanneer de aanvraag niet (volledig) slaagt door een interne foutmelding aan de server kant
...
Dit zijn geen fouten maar geven informatie over de aanvraag en beginnen met 2xx (goed gevolg) of 3xx (omleiding) . Voorbeeld:
- 200 – OK. De aanvraag is verwerkt en geslaagd en de response van de payload is niet leeg (gebruikt met GET- en POST-verzoeken)
- 201 – Nieuwe gegevens zijn aangemaakt en gepersisteerd (gebruikt met POST-verzoeken)
- 202 – Geaccepteerd. Als de verwijderde aanvraag is geaccepteerd, zonder aanvullende informatie over de uitkomst
- 204 – Geen inhoud – De gegevens zijn succesvol aangepast of verwijderd. Geen payload in de response (gebruikt met PUT- en DELETE-verzoeken).301 – De uitvoerende dienstverlener is definitief verplaatst.
- 304 – Niet gewijzigd – de klant kan gebruik maken van cache data met de If-Modified-Since of If-Nonen-Match HTTP headers
Functionele fouten.
Dit zijn fouten die optreden als gevolg van het niet kunnen uitvoeren van een functionele vereiste. Deze fouten moeten worden beschreven als onderdeel van het functionele ontwerp van het systeem. Kies voor functionele fouten zorgvuldig een HTTP 4xx-code die past bij een bepaalde foutcondities.
- 400 – Onjuiste aanvraag - Het verzoek was ongeldig of kan niet worden uitgevoerd. De exacte fout moet worden uitgelegd in de payload content. Bijv. "veld% param1% is niet geldig" (Validatie fouten).
- 401 – Niet geautoriseerd - Het verzoek vereist een gebruikers authenticatie
- 403 – Verboden - De server heeft het verzoek begrepen, maar weigert het of de toegang is niet toegestaan.
- 404 – Niet gevonden - Er zijn geen gegevens aanwezig bij de aangegeven URI.
- 405 – Methode niet toegestaan. Gegevens bestonden niet voor de aanpassing en de aangegeven identificatie van de client mag niet voor de interactie gebruikt worden
- 406 - Aanvraag niet geaccepteerd. De aanvraag voldoet niet aan het formaat dat door de server ondersteunt wordt
- 409/412 – Conflict - Conflict met de huidige status van de bron (gebruikt met PUT-verzoeken)
- 415 – Media-type niet ondersteund
- 422 – Aanvraag kan niet verwerkt worden - De aangeboden gegevens voldoen niet aan bepaalde FHIR profielen of server bedrijfsregels
...
De cliënt kant kan niks wijzigen om zijn aanvraag te laten slagen. Als een 5xx-fout optreedt, moet de stack-trace worden vastgelegd bij de server en niet als response geretourneerd worden.
- 500 – Interne serverfout, Dit kunnen technische of connectie problemen zijn met het backend systeem.
- 501 – Server heeft de HEAD aanvraag niet geïmplementeerd. HEAD is hetzelfde als GET, maar dan zonder body.
- 503 – Dienst niet beschikbaar. De aangeboden dienst kan in onderhoud zijn.
...
De clients moeten onderscheid maken tussen HTTP-statuscodes die een fout aangeven en de statuscodes die een probleem op applicatieniveau aangeven.