developer.overheid.nl

Ontwikkelaarsportaal van de Nederlandse overheid

Ga naar hoofdinhoud

OData en de REST API Design Rules: past dat wel?

· 8 minuten leestijd
Joost Farla
Implementatie ondersteuner - developer.overheid.nl

Binnen de publieke sector groeit de behoefte aan goed gedocumenteerde, interoperabele en toekomstbestendige API's. De REST API Design Rules (ADR) vormen daarbij een belangrijk referentiekader: ze stimuleren eenvoud, voorspelbaarheid en brede toepasbaarheid door gebruik te maken van open standaarden.

Regelmatig komt de vraag voorbij of OData, een specificatie ontwikkeld binnen het Microsoft-ecosysteem, een slimme keuze kan zijn voor publieke API's. In dit artikel analyseren we de voor- en nadelen van OData, met nadruk op eenvoud, interoperabiliteit en vendor-neutraliteit. Ook bekijken we hoe OData zich verhoudt tot de ADR, en op welke vlakken deze conflicteren.

Logo of OData

Wat is OData?

OData (Open Data Protocol) is een open standaard die definieert hoe data via RESTful API's kan worden bevraagd en gemanipuleerd. Het biedt een gestandaardiseerde manier om queries uit te voeren op resources, met parameters als $filter, $expand, $select en $orderby.

OData is oorspronkelijk ontwikkeld door Microsoft en gestandaardiseerd via OASIS en ISO/IEC, wat betekent dat het formeel gezien niet proprietair is. In de praktijk is de implementatie en tooling echter sterk verweven met Microsoft-technologieën (zoals .NET, Dynamics en Power BI).

De voordelen van OData

1. Gestandaardiseerde querytaal

Middels het OData protocol kan een client complexe queries uitvoeren (zoals filters, joins en sorteringen) zonder dat de API-beheerder expliciet endpoints of parameters hoeft te definiëren voor elk scenario. In plaats van meerdere, specifieke zoek- en filterendpoints aan te bieden, kan een OData-service via één uniforme syntax ($filter, $expand, $select, $orderby, enz.) vrijwel elke denkbare bevraging verwerken.

Dat maakt OData efficiënt bij situaties waarin de aard van de queries niet vooraf bekend is, bijvoorbeeld bij analytische toepassingen, datawarehouses of BI-rapportages. Daarmee biedt OData een zekere mate van zelfbediening voor dataconsumenten – iets wat in interne dataplatforms of onderzoeksomgevingen vaak als voordeel wordt gezien.

2. Rijke semantische laag

OData beschrijft de datastructuur via het Entity Data Model (EDM), vastgelegd in CSDL (Common Schema Definition Language) via JSON of XML. Dit maakt het mogelijk om data en relaties semantisch te beschrijven.

Clients worden hierdoor in staat gesteld om automatisch metadata te ontdekken en hun gedrag daarop af te stemmen. Een client kan bijvoorbeeld aan de hand van het $metadata-document weten welke velden beschikbaar zijn, welke typen of relaties er bestaan en welke queries toegestaan zijn.

Dit bevordert consistentie en herbruikbaarheid van data binnen een organisatie, en ondersteunt scenario's als automatische codegeneratie, dynamische UI-componenten of semantische validatie. Voor organisaties met sterk gestructureerde domeinmodellen kan dit bijdragen aan uniformiteit en ontwerpdiscipline over verschillende datasets heen.

3. Sterke toolingondersteuning (met name in Microsoft-omgevingen)

OData is wijd geïntegreerd in de Microsoft-stack en wordt ondersteund door veelgebruikte producten zoals Excel, Power BI en Azure API Management. In de praktijk betekent dit dat gegevens uit een OData-service direct bruikbaar zijn in rapportage-, analyse- of dashboardomgevingen, met minimale technische inspanning.

De nadelen van OData

1. Data-georiënteerd in plaats van resource-georiënteerd

OData is in de kern data-georiënteerd: het beschrijft tabellen en entiteiten die rechtstreeks overeenkomen met een onderliggend datamodel. Daarmee verschilt het fundamenteel van de resource-georiënteerde aanpak die in de ADR wordt voorgestaan, waarin endpoints domeinconcepten representeren (zoals zaak, persoon of vergunning), niet technische datatabellen.

In de praktijk leidt dat tot API-ontwerpen waarin de datastructuur het uitgangspunt vormt, in plaats van het functionele of semantische domein. Dit maakt de API minder begrijpelijk en minder consistent met andere publieke API's die wel volgens de REST-principes zijn ontworpen.

Hoewel OData zich positioneert als RESTful, wijkt het in de praktijk af van gangbare REST-ontwerpprincipes. De query-syntax (voor $filter, $expand, enz.) introduceert een eigen mini-taal bovenop HTTP. Dit maakt het moeilijker om de API intuïtief te gebruiken en te documenteren volgens de ADR, die juist eenvoud en voorspelbaarheid benadrukken.

2. Compatibiliteit met de OpenAPI Specification

De ADR vereisen een API-beschrijving conform de OpenAPI Specification. Hoewel OData services formeel op die manier kunnen worden beschreven, genereren veel OData-servers primair een eigen $metadata-document (CSDL) in plaats van een OpenAPI-document.

Een vertaling van CSDL naar OpenAPI is mogelijk – en zelfs gestandaardiseerd – maar niet zonder verlies van semantiek. Wanneer CSDL naar OpenAPI wordt vertaald, gaan de semantische beperkingen en validatieregels van filters en expressies verloren. OpenAPI kan alleen weergeven dat er query parameters zijn, maar niet wat hun gedrag is; dat is tenslotte vastgelegd in externe OData-specifieke standaarden. Dit beperkt de interoperabiliteit met bestaande ontwikkel- en documentatietools.

3. Beleidsmatige en interoperabiliteitsoverwegingen

Binnen de publieke sector neemt de behoefte toe aan samenhang tussen open standaarden. De Nederlandse overheid streeft dan ook naar een coherent API-stelsel waar open standaarden, profielen en architectuurprincipes samenkomen. Denk hierbij bijvoorbeeld aan interoperabiliteit tussen initiatieven zoals DCAT-AP-NL, OGC API en modelleringsstandaarden zoals MIM en NL-SBB.

OData vormt in dat opzicht een eigen ecosysteem, met een afwijkend query- en metadatamodel (CSDL) en een eigen set tools. Daardoor sluit het minder goed aan op bestaande Nederlandse en Europese API-profielen en beperkt het de mogelijkheid om gemeenschappelijke tooling of documentatie te hergebruiken. Voor organisaties die streven naar maximale interoperabiliteit binnen publieke stelsels is dit een belangrijk aandachtspunt.

4. Vendor-afhankelijkheid in tooling en adoptie

OData is strict genomen een open standaard, maar de praktische adoptie concentreert zich sterk binnen het Microsoft-ecosysteem. De meeste volwassen implementaties, libraries en client-SDK's zijn Microsoft-georiënteerd. Buiten deze omgeving is de ondersteuning beperkter: veel open source-projecten zijn verouderd of incompleet, en de community is kleiner dan die rond OpenAPI, JSON Schema of andere relevante standaarden.

Rond de OpenAPI-specificatie bestaat een rijk ecosysteem aan tools – van validators en mockservers tot SDK-generators en testframeworks. Veel daarvan werken echter niet, of slechts beperkt, met OData, omdat een groot deel van de OData-details niet in OpenAPI-formaat kan worden uitgedrukt.

Voor organisaties die streven naar vendor-neutraliteit en technologie-onafhankelijkheid is dit een belangrijk aandachtspunt. Wie OData kiest, wordt niet formeel locked-in door de standaard zelf, maar wel door de beschikbare tooling, kennis en infrastructuur die vooral door één leverancier wordt gedomineerd. Dit kan migratie, integratie met niet-Microsoft-omgevingen en aansluiting bij bredere open API-ecosystemen bemoeilijken.

5. Moeilijk te beheersen expressiviteit

OData biedt krachtige en zeer expressieve querymogelijkheden, waarmee clients complexe filters, sorteringen en uitbreidingen kunnen uitvoeren via $filter, $expand, $select en $orderby. Die expressiviteit is aantrekkelijk bij data-analyse, maar brengt in publieke API's aanzienlijke complexiteit met zich mee, zowel aan de server- als aan de clientzijde.

Aan de serverzijde betekent dit dat de API elke ontvangen query dynamisch moet kunnen interpreteren en vertalen naar een onderliggende database-query. Daarbij kunnen onverwacht zware of inefficiënte combinaties ontstaan, bijvoorbeeld geneste $expand-queries of samengestelde $filter-expressies met meerdere or- en any-operatoren. Om dit te beheersen zijn vaak aanvullende maatregelen nodig, zoals query throttling, expressielimieten, caching, of specifieke middleware die de toegestane querypatronen begrenst. Zonder dergelijke beperkingen kan de server onvoorspelbare performance vertonen of zelfs kwetsbaarheden introduceren, zoals denial-of-service-achtige situaties.

Aan de clientzijde leidt dezelfde flexibiliteit tot hogere implementatiecomplexiteit. Een OData-client moet de volledige querysyntaxis ondersteunen en correct kunnen omgaan met foutmeldingen, datamodelverwijzingen en dynamische metadata uit het $metadata-document. Dat vraagt om specifieke libraries en kennis van de OData-taal zelf, wat de drempel verhoogt ten opzichte van eenvoudigere, parametergebaseerde REST-API's. Zelfs kleine implementatieverschillen tussen OData-versies of servers kunnen tot interoperabiliteitsproblemen leiden.

Voor publieke API's is deze expressieve kracht dus zowel een voordeel als een risico. Het gebruik ervan vraagt om duidelijke ontwerpkeuzes, restricties en beheermaatregelen om de balans te bewaren tussen flexibiliteit en controle.

OData en de REST API Design Rules

De ADR zijn gebaseerd op internationale best practices voor REST API's, met nadruk op:

  • Eenvoud: voorspelbare URL's en parameters
  • Interoperabiliteit: brede adoptie van OpenAPI
  • Technologische onafhankelijkheid: geen afhankelijkheid van specifieke leveranciers of frameworks

OData sluit hier deels op aan (open standaard, REST-principes), maar wijkt af in ontwerpfilosofie:

  • Het OData-querymodel past minder goed binnen de pragmatische REST-aanpak die de ADR voorstaan.
  • De tooling sluit niet naadloos aan op het OpenAPI-ecosysteem.
  • De leercurve en complexiteit zijn hoger voor ontwikkelaars die niet binnen het Microsoft-ecosysteem werken.

Slotadvies

OData kan zinvol zijn binnen gesloten Microsoft-omgevingen of bij interne datasets die veel ad-hoc queryflexibiliteit vereisen, bijvoorbeeld voor analytische doeleinden. Voor publieke, generieke REST API's die dienen te voldoen aan de ADR – waarin eenvoud, interoperabiliteit en technologie-onafhankelijkheid centraal staan – is OData doorgaans niet de meest geschikte keuze.