Geen versiebeheer op je API's
De tweede fout is het ontbreken van versioning. Teams bouwen een API, die werkt, en ze gaan door. Dan wil een ander team iets aanpassen. De endpoint verandert. Alles wat daaraan hangt, breekt.
Goed API-ontwerp gaat ervan uit dat dingen veranderen. Versioning is geen administratieve last, het is een belofte aan de systemen die van jouw API afhankelijk zijn. /v1/orders blijft werken, ook als /v2/orders een ander dataformaat retourneert. Consumers kiezen hun moment van migreren.
We zien dit het vaakst bij interne API's die ooit als tijdelijke oplossing zijn gebouwd. Geen documentatie, geen versioning, geen contract. En dan is het systeem zes jaar later nog altijd in productie en raakt niemand het meer aan uit angst.
Foutafhandeling als bijzaak
De derde fout is dat error handling achteraf wordt bedacht. Een API-aanroep mislukt. Wat gebeurt er? Als het antwoord alleen bestaat uit een stille time-out of een generieke 500-error, weet de ontvangende kant niets. Was het een tijdelijk probleem? Een datavalidatiefout? Een autorisatieprobleem?
Goede API's hebben expliciete foutcodes met betekenis. Ze onderscheiden 4xx-fouten (iets aan jouw kant) van 5xx-fouten (iets aan onze kant). Ze retourneren leesbare foutberichten die developers iets vertellen. En ze loggen aan beide kanten.
Retry-logica hoort ook bij het ontwerp, niet bij de implementatie achteraf. Weet je welke operaties idempotent zijn? Kun je dezelfde aanroep twee keer sturen zonder dubbele betalingen of dubbele records te maken? Als het antwoord 'weet ik niet' is, is er werk aan de winkel.