De NLGov REST API Design Rules zijn de standaard voor het ontwerpen van REST-API’s bij Nederlandse overheden. Logius beheert ze; de definitieve versie is 2.2.0 van 2 juni 2026. De standaard staat op de lijst Pas toe of leg uit. Een Spectral-ruleset van Logius toetst de technische regels automatisch op een OpenAPI-bestand.

Laatst bijgewerkt:

Wat zijn de NLGov REST API Design Rules?

De API Design Rules (ADR) beschrijven hoe een overheids-API zijn paden, parameters, fouten en versies hoort in te richten, zodat ontwikkelaars niet bij elke API opnieuw hoeven te leren hoe die werkt. De publicatie noemt als doel "increasing developer experience (DX) and interoperability between APIs". De rest van de pagina gaat over versie 2.2.0.

Eigenschappen van de NLGov REST API Design Rules
Volledige naamNLGov REST API Design Rules (voorheen REST API Design Rules)
Versie2.2.0, definitieve versie van 2 juni 2026
Eerdere versies1.0 (9 juli 2020), 2.0.0 (7 maart 2024), 2.1.0 (27 augustus 2025)
BeheerderLogius, met het Kennisplatform API’s als inbreng; predicaat Uitstekend beheer
Licentie van de specificatieCreative Commons Attribution 4.0 International
FormaatRegels voor REST over HTTP; documentatie als OpenAPI
Aantal regels16 technische en 20 functionele regels in de kern
CoördinaatreferentiesysteemNiet van toepassing in de kern; de module Geospatial regelt dit voor geodata
UpdateritmeVier versies sinds juli 2020; geen vaste cyclus gepubliceerd
Datum gelezen11 oktober 2026

Versies en data komen uit de publicatie van Logius en de pagina van het Forum Standaardisatie. Voor het gebruik bij geodata, zie WFS en OGC API Features; de conformance-lijst van de OGC API van PDOK verwijst zelf naar de ADR-publicatie.

Welke status heeft de standaard op de lijst Pas toe of leg uit?

NLGov REST API Design Rules staan op de lijst Pas toe of leg uit, in versie 2.2. De pagina van het Forum Standaardisatie noemt twee besluitdata, 9 juli 2020 en 25 november 2025, en twee versiewijzigingen via Uitstekend beheer: naar 2.1 en naar 2.2 (documenten van 22 december 2025 en 15 mei 2026). Uitstekend beheer betekent dat een nieuwe versie zonder aanvullende toetsing wordt overgenomen. Het Forum legt het toepassingsgebied vast:

Als een overheidsorganisatie investeert in de bouw van REST-API's, dan moeten deze aangeboden worden volgens de REST-API design rules.

Bron: Forum Standaardisatie, pagina REST-API Design Rules, toelichting bij opname. De standaard verplicht volgens dezelfde pagina niet het gebruik van REST-API's: SOAP-koppelingen, linked open data en andere koppelvlakken blijven mogelijk. Het organisatorisch werkingsgebied is Nederlandse overheden (Rijk, provincies, gemeenten en waterschappen) en instellingen uit de (semi-)publieke sector. Sinds 9 december 2025 heet de standaard NLGov REST API Design Rules; de registratie behoudt de oude naam.

Voor een gemeente die een open data-API publiceert, komt dit samen met de metadata-eisen uit DCAT-AP-NL. Over de gemeentelijke architectuur waar API’s in passen, zie Common Ground.

Welke kernregels zijn het belangrijkst?

De publicatie scheidt technische regels, die automatisch toetsbaar horen te zijn, van functionele regels die u bij het ontwerp afweegt. De volgende regels veroorzaken in de praktijk de meeste afwijkingen.

Kernregels van de ADR 2.2.0 met hun regel-id
Regel-idWat de regel vraagtType
/core/no-trailing-slashGeen slash aan het eind van een URI; met slash volgt een 404, geen redirectTechnisch
/core/path-segments-kebab-casePadsegmenten alleen met kleine letters, cijfers en koppeltekensTechnisch
/core/query-keys-camel-caseQuerysleutels in lowerCamelCaseTechnisch
/core/error-handling/problem-details4xx- en 5xx-fouten als application/problem+json of +xmlTechnisch
/core/uri-versionHoofdversie in de URI, met een v ervoorTechnisch
/core/version-headerVolledig versienummer in de header API-Version bij elk antwoordTechnisch
/core/doc-openapiDocumentatie als OpenAPI-bestand, versie 3 of nieuwerTechnisch
/core/naming-collectionsMeervoudige zelfstandige naamwoorden voor collectiesFunctioneel
/core/modules/geospatialModule Geospatial toepassen bij geodataFunctioneel

Letterlijk over de slash-regel:

A URI MUST NOT contain a trailing slash. When requesting a resource including a trailing slash, this MUST result in a 404 (not found) error response and not a redirect.

Bron: Logius, NLGov REST API Design Rules 2.2.0, regel /core/no-trailing-slash. Wie dus zowel /gebouwen als /gebouwen/ laat werken, overtreedt de regel. De hoofdresource van de service mag wel eindigen op een slash.

Wat zeggen de regels over versies en foutmeldingen?

Een API die voldoet, laat het hoofdversienummer in de URI staan en meldt het volledige versienummer in elk antwoord. De publicatie zegt over het versienummer in de URI: "The URI of an API (base path) MUST include the major version number, prefixed by the letter v." Over het volledige nummer: "The API-Version header MUST be returned in a response header in every response." Een voorbeeld is https://api.voorbeeld.example/v1/gebouwen met in het antwoord API-Version: 1.0.0.

Voor fouten schrijft de publicatie RFC 9457 voor:

Error responses with HTTP status codes 4xx or 5xx MUST use either application/problem+json or application/problem+xml as the Content-Type header, and the response body MUST conform to the structure defined in [RFC9457].

Bron: Logius, ADR 2.2.0, regel /core/error-handling/problem-details. Een ongeldig verzoek hoort bovendien status 400 te krijgen (/core/error-handling/invalid-input). De linter controleert dit in de OpenAPI-beschrijving: elk endpoint met parameters moet een 400-respons beschrijven, en die respons moet een problem-schema met status, title en detail hebben. Meer over het ontwerp van een koppeling staat op API-koppelingen.

Bestaat er een linter van Logius en hoe draait u die?

Ja. De ADR-publicatie bevat als bijlage A een configuratie voor Spectral, een open source linter voor OpenAPI-bestanden. In die bijlage staat dat de configuratie "tevens gehost" wordt op developer.overheid.nl. Het bestand linter.yaml uit de 2.2.0-publicatie is op 11 oktober 2026 op twee voorbeeld-OpenAPI-bestanden gedraaid met Spectral CLI 6.17.0 (6.15.0 gaf dezelfde uitkomst). Het fictieve bestand api-fout.yaml overtreedt bewust de regels:

openapi: 3.0.3
info:
  title: Gebouwen API
  version: 1.0.0
servers:
  - url: https://api.voorbeeld.example/v1
paths:
  /getGebouwen/:
    get:
      operationId: getGebouwen
      parameters:
        - name: pand_id
          in: query
          schema:
            type: string
      responses:
        '200':
          description: Lijst van gebouwen
          content:
            application/json:
              schema:
                type: object

De commando's om te linten:

npm install -g @stoplight/spectral-cli
curl -sL https://gitdocumentatie.logius.nl/publicatie/api/adr/2.2.0/media/linter.yaml > linter.yaml
spectral lint -r linter.yaml api-fout.yaml
spectral lint -r linter.yaml api-goed.yaml

De uitvoer voor api-fout.yaml, met de paden ingekort, en exitcode 1:

  2:6   error  info-contact                 Info object must have "contact" object.
  8:17  error  nlgov:paths-kebab-case       /getGebouwen/ is not kebab-case.
  8:17  error  path-keys-no-trailing-slash  Path must not end with slash.
 12:17  error  nlgov:query-keys-camel-case  pand_id is not lower camelCase.
 16:17  error  nlgov:problem-invalid-input  GET and DELETE endpoints that have parameters, and all other endpoints must be able to return a 400 response
 17:15  error  nlgov:missing-header         Return the full version number in a response header.

✖ 6 problems (6 errors, 0 warnings, 0 infos, 0 hints)

De zes meldingen komen overeen met de regels /core/doc-openapi-contact, /core/path-segments-kebab-case, /core/no-trailing-slash, /core/query-keys-camel-case, /core/error-handling/invalid-input en /core/version-header.

Hoe ziet een OpenAPI-bestand eruit dat de linter accepteert?

Het gecorrigeerde bestand hieronder gaf No results with a severity of 'error' found! en exitcode 0. De naam pandId, het pad /gebouwen, de API-Version-header, het contactblok en de problem-respons met status, title en detail zijn de aanpassingen. De gegevens zijn fictief.

openapi: 3.0.3
info:
  title: Gebouwen API
  description: Fictief voorbeeld van een API voor gebouwen.
  version: 1.0.0
  contact:
    name: Team Geo
    url: https://www.voorbeeld.example/contact
    email: geo@voorbeeld.example
servers:
  - url: https://api.voorbeeld.example/v1
paths:
  /gebouwen:
    get:
      operationId: listGebouwen
      summary: Lijst van gebouwen
      parameters:
        - name: pandId
          in: query
          description: Filter op pandidentificatie.
          schema:
            type: string
      responses:
        '200':
          description: Lijst van gebouwen
          headers:
            API-Version:
              description: Volledig versienummer van de API.
              schema:
                type: string
                example: 1.0.0
          content:
            application/json:
              schema:
                type: object
        '400':
          description: Ongeldige invoer
          headers:
            API-Version:
              description: Volledig versienummer van de API.
              schema:
                type: string
                example: 1.0.0
          content:
            application/problem+json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                  title:
                    type: string
                  detail:
                    type: string

Het bestand toetst alleen of de beschrijving klopt, niet of de draaiende API zich eraan houdt. De publicatie noemt zelf per regel hoe te testen, en de regel over het publiceren van het OpenAPI-bestand eist bovendien dat het document zonder authenticatie en met CORS te downloaden is. Een draaiende API controleert u dus ook met een echt verzoek, bijvoorbeeld een controle op de 404 bij een slash.

Welke modules horen bij de API Design Rules?

Naast de kern kent ADR 2.2.0 drie normatieve modules: Geospatial, Signing en Encryption. De kernregel /core/modules/geospatial zegt: "The API Design Rules Module: Geospatial version 1.0.x MUST be applied when providing geospatial data or functionality." Signing en Encryption gelden alleen als u payloads ondertekent of versleutelt; de regels zelf verplichten dat niet. De transportregels (TLS, security headers en CORS) staan in versie 2.2.0 als technische regels in de kern, onder /core/transport/….

Normatieve modules van de NLGov REST API Design Rules 2.2.0 (gelezen 11 oktober 2026)
ModuleLaatste definitieve versieWanneer verplicht
Geospatial1.0.4, 4 juni 2025Bij het leveren van geodata of geografische functies
Signing1.0.0, 18 juni 2026Als end-to-end-integriteit en authenticiteit van berichten nodig is
Encryption1.0.0, 18 juni 2026Als end-to-end-vertrouwelijkheid van de payload nodig is

Voor geodata is de Geospatial-module het belangrijkst. Ze schrijft GeoJSON voor in verzoeken en antwoorden, CRS84 als standaardstelsel "in line with OGC API Features Requirement 10", een Content-Crs-header in het antwoord en, als het nodig is, ETRS89 of RD (regel /geo/preferred-crs). Dat sluit aan op deel 2 van OGC API Features; een uitgewerkt voorbeeld met crs en Content-Crs staat op WFS en OGC API Features. De Spectral-ruleset uit bijlage A toetst de kernregels, niet deze module.

Welke valkuilen kent de linter?

  • Het vaste adres wijst naar een oudere versie. Het adres static.developer.overheid.nl/adr/ruleset.yaml, dat de publicatie zelf in de installatie-instructie noemt, verwees op 11 oktober 2026 via een HTTP 301 naar het linter.yaml van versie 2.1.0. Dat bestand gaf andere meldingen dan dat van 2.2.0: het weigerde een OpenAPI 3.1-bestand ("Use OpenAPI Specification for documentation") en eiste een resource /openapi.json. Pin daarom het bestand uit de versiemap in uw CI.
  • Waarschuwingen en fouten. De linter geeft exitcode 1 bij fouten. Waarschuwingen blokkeren niet, dus bepaal of u ze streng wilt behandelen.
  • Alleen de technische regels. Functionele regels, zoals zelfstandige naamwoorden voor resources of een afwegingsnotitie bij een afwijking, kan geen linter beoordelen.
  • Nederlandse veldnamen. De regel /core/interface-language vraagt om Nederlandstalige interfaces tenzij er een officieel Engels glossarium bestaat. Een Engelse API-beschrijving kan dus een afweging vragen.
  • Geodata. Een groene linter zegt niets over de module Geospatial. Toets CRS84 als standaard en de Content-Crs-header apart, bijvoorbeeld met een echt verzoek.

Wanneer zijn de API Design Rules niet van toepassing?

De standaard geldt voor REST-API's, niet voor elk koppelvlak. SOAP-koppelingen, StUF en Digikoppeling zijn geen REST-koppelvlakken, en OGC-services zoals WMS of WFS hebben eigen specificaties (zie WMS en WMTS). Omdat de standaard het gebruik van REST niet verplicht, is er geen plicht om een bestaande SOAP-koppeling te vervangen. Voor nieuwe REST-API's van een overheid geldt de standaard wel, tenzij u een afwijking motiveert. Een leveranciersmatige keuze voor het bouwen van zo'n API behandelt maatwerk software; over de afhankelijkheid van een leverancier gaat vendor lock-in en exitstrategie.

Veelgestelde vragen

Welke versie van de API Design Rules is actueel?

Versie 2.2.0, definitieve versie van 2 juni 2026, beheerd door Logius. Het Forum Standaardisatie vermeldt versie 2.2 op de lijst Pas toe of leg uit. Eerdere versies zijn 2.1.0 (27 augustus 2025), 2.0.0 (7 maart 2024) en 1.0 (9 juli 2020).

Is het gebruik van REST-API’s verplicht voor overheden?

Nee. Het Forum Standaardisatie zegt dat de standaard het gebruik van REST-API’s niet verplicht; SOAP-API’s, linked open data en andere koppelvlakken blijven mogelijk. Biedt een overheidsorganisatie wel een REST-API aan, dan moet die volgens de API Design Rules zijn ingericht, tenzij ze een afwijking met een uitleg motiveert.

Bestaat er een officiële linter voor de API Design Rules?

Ja, in de vorm van een Spectral-ruleset. De ADR-publicatie bevat die als bijlage A en vermeldt dat ze ook op developer.overheid.nl wordt gehost. Installeer Spectral via npm, download het linter.yaml uit de gepubliceerde versie en draai spectral lint op uw OpenAPI-bestand.

Waarom geeft mijn /gebouwen/ een fout?

Omdat de regel no-trailing-slash een slash aan het eind van een pad verbiedt. De linter meldt "Path must not end with slash". Het pad moet zonder slash worden beschreven en de server moet een verzoek met slash met een 404 beantwoorden, niet met een redirect. Alleen de hoofdresource mag op een slash eindigen.

Wat moet ik doen als ik van de regels wil afwijken?

Bij Pas toe of leg uit mag u afwijken als u dat uitlegt. Leg per regel vast welke afwijking het is, waarom hij nodig is en welke afnemers erdoor geraakt worden. Een afwijking in de OpenAPI-beschrijving gaat vaak ten koste van de voorspelbaarheid, het doel van de standaard.

Bronnen

Meer over TechinFlow

Een nieuw bureau in Haarlem voor maatwerk software, GIS en dataplatforms op open standaarden.

023 230 21 42Neem contact op

Een vraag of opdracht?

Vertel kort wat er speelt en voor welke organisatie. We reageren per e-mail.

Stuur een bericht