Engineeringteams verspillen nog steeds hele middagen aan discussies over de vraag of REST dood is of dat gRPC de rest overbodig heeft gemaakt. Dat debat mist de essentie. Je kiest niet de beste protocollen. Je kiest de juiste grens. Een protocol dat uitstekend werkt binnen je Kubernetes-cluster, zal verstikken zodra je het overhandigt aan duizenden externe ontwikkelaars. Een protocol dat je mobiele app kostbare bandbreedte bespaart, kan je infrastructuur ruïneren als je het openstelt voor willekeurige publieke queries. Als je deze beslissing behandelt als een populariteitswedstrijd voor technologie, creëer je architecturale schuld die de huidige leden van je team zal overleven.
Het Grensprincipe
Architectuur gaat over afwegingen, niet over kampioenen. De juiste vraag is nooit "Welke is het snelst?" of "Welke is de nieuwste?". Het is: "Wie zit aan de andere kant van de lijn, en wat beheren zij?". Protocollen zijn grensobjecten. De verkeerde kiezen vertraagt je niet alleen; het verankert fouten jarenlang in je systeem.
Publieke API's: REST is niet saai, het is verantwoordelijk
Wanneer je consument een externe ontwikkelaar is die je nooit hebt ontmoet, is je API een product, niet louter een interface. Die ontwikkelaar is om twee uur 's nachts aan het debuggen met niets anders dan curl en een Postman-collectie. Als ze eerst een aangepaste client-library moeten installeren of een schemataal moeten leren voordat hun eerste aanroep slaagt, heb je ze al verloren.
REST overleeft hier omdat het de kern van het web is. HTTP-methoden, statuscodes en JSON zijn de gemeenschappelijke taal. Caching is geen bijzaak; het is infrastructuur die al bestaat. Browsers, CDN's en edge-caches begrijpen Cache-Control-headers en ETag-validatie van nature. Je kunt een REST-API achter een standaard CDN plaatsen en direct bandbreedte besparen zonder een enkele regel caching-logica te schrijven. Dat is cruciaal wanneer publiek verkeer onvoorspelbaar is en je betaalt voor elke gigabyte die je cloud verlaat.
GraphQL brengt daarentegen een zware belasting met zich mee voor een publieke grens. Publieke GraphQL-endpoints hebben query-kostenanalyse, dieptebeperking (depth limiting) en complexiteitsscores nodig om te voorkomen dat een enkele onvoorzichtige of kwaadwillende query je database platlegt. Je levert niet alleen een API; je bouwt een engine voor query-executie, een rate-limiting-strategie en een factureringsmodel voor rekenkracht. Tenzij je de operationele kracht hebt van de grootste platforms, is die overhead roekeloos voor een publiek oppervlak. REST biedt standaard vangrails. Elk endpoint doet één ding. Consumenten halen precies op wat jij aanbiedt, niet wat ze ook maar kunnen bedenken.
Interne Services: Beheer de hele pijplijn
Binnen je organisatie verandert het gesprek. Je beheert zowel de client als de server. Je kunt de technologiestack dicteren voor elke service in de aanroepketen. Dit is waar gRPC zijn waarde bewijst.
Stop eerst met het behandelen van JSON als heilig. Protocol Buffers serialiseren ongeveer drie keer sneller dan JSON. De payloads zijn kleiner omdat het formaat binair is. Op een druk intern netwerk vertalen die milliseconden en megabytes zich in echt geld en een lagere tail latency. Belangrijker nog: Protobuf geeft je een strikt contract. Wanneer je een veldtype wijzigt of een bericht hernoemt, vindt de breuk plaats tijdens het compileren, en niet om drie uur 's nachts in productie wanneer een downstream-service parse-exceptions begint te gooien.
gRPC draait over HTTP/2, dus je profiteert van headercompressie, gemultiplexte streams en echte streaming-semantiek. Als je met een hoge doorvoer events tussen services pompt of realtime updates pusht, zijn server-side en bidirectionele streaming ingebouwde functies, en geen met ducttape op een request-response-framework geplakte long-polling-oplossingen.
Er is een belangrijk addertje onder het gras: richt gRPC niet rechtstreeks op een browser. Netwerkmodellen van browsers spreken geen HTTP/2 op de manier die gRPC verwacht. Je zult uiteindelijk grpc-web en een proxy zoals Envoy op je stack moeten plakken, alleen maar om een browser met een backend te laten communiceren. Dat is geen bug; het is een signaal van de grens. Houd gRPC achter je firewall, tussen services die elkaar vertrouwen, en beschouw de complexiteit van het debuggen als de prijs voor snelheid. Binaire payloads zijn niet zo makkelijk leesbaar in een logbestand als JSON.
Complexe UI's en Mobiel: De niche van GraphQL
Moderne mobiele schermen zijn een lappendeken. Eén weergave heeft misschien een gebruikersprofiel nodig,
