Closed Hugo-ter-Doest closed 5 years ago
Nummer | Kader | ZDS 2.0 voldoet | Uitleg |
---|---|---|---|
API-01 | Bestaande API’s voldoen waar mogelijk aan de API-strategie | N.v.t. | ZDS 2.0 bevat nieuwe API's. |
API-02 | Product- en leverancier-specifieke API’s worden nooit direct aangeroepen | N.v.t | De referentie-implementatie van ZDS 2.0 roept geen product- of leverancier-specifieke API's aan. |
API-03 | API’s garanderen dat operaties “Veilig” en/of “Idempotent” zijn | Ja | |
API-04 | Toestandsinformatie wordt nooit op de server opgeslagen | ja | |
API-05 | Communicatie met API’s verloopt alleen via het Stelselknooppunt | N.v.t. | Het Stelselknooppunt is alleen bedoeld voor de API's t.b.v. de Omgevingswet. ZDS 2.0 wordt breder ingezet. |
API-06 | Alleen standaard HTTP-operaties worden toegepast | Ja | |
API-07 | Definitie van het koppelvlak is in het Nederlands tenzij er sprake is van een officieel Engelstalig begrippenkader | Ja | |
API-08 | Resource namen zijn zelfstandige naamwoorden in het meervoud | Ja | |
API-09 | Relaties van geneste resources worden binnen het eindpunt gecreëerd | Nee | Informatieobjecten (documenten) hebben een n-op-1 relatie met zaken. Informatieobjecten zijn een geneste resource, maar hebben wel een eigen endpoint. |
API-10 | Resources ondersteunen “lazy” en “eager” laden van relaties | Ja | In ZDS worden relaties met links gelegd. Eager laden wordt mogelijk gemaakt met de expand query-parameter. |
API-11 | Gelinkte resources worden expliciet en selectief mee-geladen | Ja | Dit mechanisme wordt mogelijk gemaakt met de expand query-parameter. |
API-12 | Representatie op maat wordt ondersteund | Nog niet | Is een globale configuratie/programmatie, dus niet afhankelijk van specifieke endpoint. T.z.t. moeten we hier een user story voor klaarmaken. |
API-13 | Acties die niet passen in het CRUD model worden een sub-resource | Ja | |
API-14 | De verbinding is ALTIJD versleuteld met minimaal TLS V1.2 | Ja | Via NLX |
API-15 | API’s zijn alleen bruikbaar met behulp van een API-key | Nog niet | Wordt uitgewerkt met OAUTH2 |
API-16 | Tokens worden niet gebruikt in query parameters | Nog niet | Wordt uitgewerkt met HTTP Headers |
API-17 | Autorisatie is gebaseerd op OAuth 2.0 | Nog niet | Wordt uitgewerkt |
API-18 | Authenticatie voor API’s met toegangsbeperking of doelbinding is gebaseerd op PKIoverheid | Nee | We gaan er (voorlopig) van uit dat dit door een knooppunt wordt opgelost. |
API-19 | Documentatie is gebaseerd op OAS 2.0 of hoger | Ja | Documentatie is gebaseerd op OAS 3.0 |
API-20 | Documentatie is in het Nederlands tenzij er sprake is van bestaande documentatie in het Engels of er sprake is van een officieel Engelstalig begrippenkader | Ja | |
API-21 | Documentatie wordt getest en geaccepteerd | Ja | |
API-22 | Wijzigingen worden gepubliceerd met een uitfaseringschema | Ja | Onder verantwoordelijkheid van VNG Realisatie |
API-23 | De overgangsperiode bij een nieuwe API versie is maximaal 1 jaar | Ja | Bij breaking changes |
API-24 | Alleen het major versienummer is onderdeel van de URI | Ja | |
API-25 | Gebruikers van een ‘deprecated’ API worden actief gewaarschuwd | Nee | |
API-26 | JSON first - API’s ontvangen en versturen JSON | Ja | Echter voorlopig enkel application/json geimplementeerd |
API-27 | API’s zijn optioneel voorzien van een JSON Schema | Nee | Voorlopig niet. OpenAPI 3.0 doet hier al heel veel, JSON Schema laat toe om validatieregels in meer detailen te specifieren. |
API-28 | Content negotiation wordt volledig ondersteund | Ja | |
API-29 | API’s controleren dat de Content-Type header is ingesteld | In ontwikkeling | Aanzet gemaakt, nog niet klaar |
API-30 | Woorden in veldnamen zijn gedefinieerd in camelCase | Ja | |
API-31 | Pretty print is standaard uitgeschakeld | Ja | |
API-32 | Een JSON-response heeft geen omhullende envelop | Ja | |
API-33 | API’s ondersteunen JSON gecodeerde POST, PUT en PATCH payloads | Ja | |
API-34 | Filter query-parameters zijn gelijk aan de velden waarop gefilterd kan worden | Nee | Filtering nog niet geimplementeerd, later toetsen |
API-35 | Voor sorteren wordt de query-parameter sorteer gebruikt | In ontwikkeling | Nog niet geimplementeerd, config wel gedaan |
API-36 | Voor vrije-tekst zoeken wordt een query-parameter zoek gebruikt | In ontwikkeling | Nog niet geimplementeerd, config wel gedaan |
API-37 | API’s die vrije-tekst zoeken ondersteunen kunnen overweg met twee soorten wildcard karakters: * en ? | Nog niet | |
API-38 | GEO API’s ontvangen en versturen GeoJSON | Ja | |
API-39 | GeoJSON is onderdeel van de embedded resource in de JSON response | Ja | API-strategie-document zou een voorbeeld kunnen gebruiken, dit is wat onduidelijk geformuleerd. |
API-40 | Voor GEO queries is een POST end-point beschikbaar | Nog niet | |
API-41 | POST end-points zijn uitbreidbaar voor gecombineerde vragen | Nog niet | |
API-42 | Resultaten van een globale geometrische zoekvraag worden in de relevante geometrische context geplaatst | ? | API-strategie is niet duidelijk |
API-43 | Het voorkeur-coördinatenstelsels (CRS) is ETRS89, maar het CRS wordt niet impliciet geselecteerd | Nee | WGS84 wordt momenteel als default gebruikt voor gemak met client libraries |
API-44 | Het coördinatenstelsel (CRS) van de vraag en het antwoord wordt in de header meegestuurd | Nee | Zie API-43 |
API-45 | Het gewenste coördinatenstelsel wordt op basis van content negotiation overeengekomen | Nee | Zie API-43 |
API-46 | Paginering wordt gerealiseerd op basis van JSON+HAL | Nee | Omdat HAL nog niet goed wordt ondersteund door het gebruikte framework. |
API-47 | Waar relevant wordt caching toegepast | Ja | |
API-48 | Beperken van het aantal verzoeken per tijdsperiode wordt centraal opgelost door het Stelselknooppunt | N.v.t. | Nog niet bekend of en via welk knooppunt ZDS API's worden aangeboden. |
API-49 | Begrenzingen worden proactief gemeld | Nog niet | Er is (nog) geen rate-limiting ingesteld. Indien dit via een knooppunt verloopt, dan zal het knooppunt ook deze headers toevoegen in plaats van onze referentiecomponent. |
API-50 | Foutafhandeling is gestandaardiseerd | Ja | |
API-51 | API’s passen de verplichte HTTP-statuscodes toe | Ja |
Nummer | Kader | ZDS 2.0 voldoet | Uitleg |
---|---|---|---|
URI-01 | De basisopbouw van URI’s volgt internetstandaard RFC3986 | ||
URI-02 | In de basisopbouw van URI zijn de onderkende resourcecategorieën duidelijk herkenbaar | ||
URI-03 | De URI van een webpagina specificeert optioneel een portaal ofwel een specifieke beveiligingscontext | ||
URI-04 | De URI van een webpagina identificeert het verantwoordelijke stelselonderdeel | ||
URI-05 | De URI van een webpagina identificeert de pagina binnen het stelselonderdeel | ||
URI-06 | De URI van een webpagina specificeert optioneel een reeks query-parameters | ||
URI-07 | De URI van een webpagina specificeert optioneel een fragment binnen de pagina | ||
URI-08 | De URI van een SOAP web-service specificeert een expliciete beveiligingscontext | N.v.t. | |
URI-09 | De URI van een SOAP web-service identificeert het verantwoordelijke stelselonderdeel | N.v.t. | |
URI-10 | De URI van een SOAP web-service identificeert de service binnen het stelselonderdeel | N.v.t. | |
URI-11 | De URI van een SOAP web-service specificeert het major versienummer van de service | N.v.t. | |
URI-12 | De URI van een REST API specificeert een expliciete beveiligingscontext | ||
URI-13 | De URI van een REST API identificeert het verantwoordelijke stelselonderdeel | N.v.t. | |
URI-14 | De URI van een REST API identificeert de service binnen het stelselonderdeel | ||
URI-15 | De URI van een REST API specificeert het major versienummer van de API | Ja | |
URI-16 | De URI van een REST API identificeert de collectie binnen het stelselonderdeel | N.v.t. | |
URI-17 | De URI van een REST API specificeert optioneel een verwijzing | ||
URI-18 | De URI van een REST API specificeert optioneel een reeks query-parameters | ||
URI-19 | De URI van linked-data identificeert het DSO-domein van een resource | ||
URI-20 | De URI van linked-data identificeert optioneel een pad om lokale informatie te onderscheiden | ||
URI-21 | De URI van linked-data specificeert het type URI | ||
URI-22 | De URI van linked-data specificeert een vocabulaire | ||
URI-23 | De URI van linked-data identificeert de collectie binnen de resource | ||
URI-24 | De URI van linked-data specificeert optioneel een verwijzing | ||
URI-25 | De URI van linked-data specificeert per vocabulaire tevens een klassenaam of eigenschapsnaam | ||
URI-26 | Omgevingsloket URI’s definiëren de autoriteit binnen het hoofddomein | N.v.t. | |
URI-27 | Stelselknooppunt URI’s definiëren de autoriteit binnen het sub-domein service | N.v.t. | |
URI-28 | Linked-data URI’s definiëren de autoriteit binnen afzonderlijke sub-domeinen | ||
URI-29 | URI’s definiëren optioneel de staging-omgeving binnen de autoriteit | ||
URI-30 | Slechts één stelselcomponent is verantwoordelijke voor het aanbieden van een resource | ||
URI-31 | Het Omgevingsloket zorgt voor de routering van inhoud (pagina’s) | N.v.t. | |
URI-32 | Het Stelselknooppunt zorgt voor de routering van service-verzoeken | N.v.t. | via NLX |
URI-33 | URI’s definiëren optioneel een expliciete beveiligingscontext | ||
URI-34 | Een domein binnen een URI is een strikt functionele identificatie | ||
URI-35 | Het Stelselknooppunt zorgt voor de routering op basis van domeinen | N.v.t. | |
URI-36 | De URI van een linked-data resource specificeert optioneel een reeks query-parameters | ||
URI-37 | URI’s voldoen aan de algemene afspraken | ||
URI-38 | URI’s voor informatie voldoen aan de daarvoor geldende afspraken | ||
URI-39 | URI’s voor begrippen voldoen aan de daarvoor geldende afspraken |
API strategie
application/json
geimplementeerdURL strategie Ik zag geen vraagtekens :-)
Thanks, ik verwerk het. URI-strategie volgt nog.
Nice gedaan Hugo!
Technisch zijn er ook een aantal testbaar. We hebben voor het ZTC van Haarlem per DSO API-richtlijn een test geschreven: https://github.com/maykinmedia/zaaktypecataloguscomponent/blob/develop/src/ztc/api/tests/test_api_strategy.py
Het uitgangspunt van de DSO is op sommige punten wel echt anders, voornamelijk waar het het knooppunt betreft waar sommige zaken worden "opgelost". Dit knooppunt is een beetje tegenstrijdig met de wens om componenten ook niet centraal aan te bieden (dat is zelfs de eerste stap).
Volgende week is de tweede bijeenkomst van de werkgroep NL API Strategie waar ik VNG-R zal vertegenwoordigen. Zijn er vanuit deze groep wensen of vragen die ik daar zou kunnen inbrengen?
Ter inspiratie: hieronder de vragen die worden gesteld vanuit de werkgroep BRP-bevragingen.
@HenriKorver het lijkt me zeer handig om even de designkeuzes na te lopen en te kijken wat daarvan terug kan naar de DSO om formeel vast te leggen! Zie https://github.com/VNG-Realisatie/gemma-zaken/blob/master/docs/content/developers/design-keuzes.md
Een aantal van mijn standpunten/vragen samengevat:
Accept-Crs
/Content-Crs
headers weggelaten worden als de request/response bodies geen geo-data bevatten?@joeribekker vroegen wij ons ook niet af of er hier effectief ontwikkelaars bij aansluiten op die meeting die ook APIs bouwen/consumen?
Opgenomen in acceptatiecriteria dus geen aparte User Story om op te pakken wel een mooie checklist
...zodat API's op een uniforme manier worden aangeboden en URI's op een uniforme manier bronnen ontsluiten.
Motivatie voor deze user story is dat we hebben afgesproken dat ZDS 2.0 moet voldoen aan de API- en URI-strategie van DSO.
Definition of ready
Definition of done
Acceptatiecriteria
Taken