Skip to main content
Theo Hollenberg
Explorer โญโญ
Oct 20, 2026 6:59 PM UTC

JSON Schema Validation


"๐“๐ก๐ข๐ฌ ๐ข๐ฌ ๐ญ๐ก๐ž ๐Ÿ๐ข๐ซ๐ฌ๐ญ ๐ซ๐ฎ๐ฅ๐ž ๐จ๐Ÿ ๐ญ๐ก๐ž ๐ฅ๐š๐ฌ๐ญ ๐ฐ๐š๐ซ:๐“๐ซ๐ฎ๐ฌ๐ญ ๐๐จ ๐Ž๐ง๐ž"

Als ik iets geleerd heb van Rick Yancey's 'The 5th Wave' is het wel mijn belangrijkste regel bij wat voor integratie dan ook: Trust no one!

En daar ligt bij TOPdesk dus een beetje de crux. Alleen al een simpele JSON schema check gewoon is niet te doen als je een webhook maakt. En da's nou net een van de dingen die ik graag zou willen: "FAIL FAST!"

Even de context. In TOPdesk actiereeksen kun je geen Java toevoegen. Dat is een keuze die ik respecteer, zoals je ook een muur respecteert waar je tegenaan loopt. Dus alles wat ik bouw, bouw ik in Freemarker. Ja, dezelfde Freemarker waarmee je ook je factuur zou kunnen opmaken. Het is een templating-taal die binnen TOPdesk's action sequences gebruikt wordt en geen programmeertaal. Maar goed, als dat het enige beschikbare is, wordt dat de tool of choice.

Dus nu heb ik een jsonSchemaLib, een zelfstandige JSON Schema-validator in รฉรฉn .ftl-bestand. Geen Java, geen externe engine, geen โ€œeven dit npm-pakketje installerenโ€. Je geeft hem een bericht en een schema, en hij vertelt je precies wat er mis is:

/๐˜ข๐˜จ๐˜ฆ [๐˜ฎ๐˜ช๐˜ฏ๐˜ช๐˜ฎ๐˜ถ๐˜ฎ]: ๐˜•๐˜ถ๐˜ฎ๐˜ฃ๐˜ฆ๐˜ณ ๐˜ช๐˜ด ๐˜ฃ๐˜ฆ๐˜ญ๐˜ฐ๐˜ธ ๐˜ฎ๐˜ช๐˜ฏ๐˜ช๐˜ฎ๐˜ถ๐˜ฎ.

Het pad naar de fout, het keyword dat het veroorzaakte en een melding. Geen โ€œer ging iets misโ€, maar een wijzende vinger met coรถrdinaten. Zo hoort een foutmelding te zijn.

Een paar dingen die ik stiekem zelf wel tof vind:

  • Alle fouten tegelijk, niet รฉรฉn per keer. Niets is zo deprimerend als drie keer opnieuw testen om elke keer uit de doos van Pandora precies รฉรฉn fout tegelijk te krijgen.
  • Onbekende keywords zijn een fout. Typ je requried in plaats van required, dan slaat de validator alarm in plaats van het bericht vrolijk goed te keuren. Een validator die typefouten door de vingers ziet, is net als een partner die tongzoenen niet vreemdgaan vindt. Het is een hellend vlakย ๐Ÿ˜‰
  • Ondersteuning voor $ref, $defs, $anchor, allOf/anyOf/oneOf, if/then/else en zelfs recursieve schemaโ€™s. In Freemarker. Ik weet het. Ik vond het zelf ook spannend.
  • Getest met รฉchte FreeMarker-runs, ook op de geminificeerde en geobfusceerde varianten. Want code die alleen werkt als je er niet naar kijkt, is geen code, dat is futiele hoop op wereldvrede (of een onverwachte salarisverhoging, reken er niet op).

Eerlijk is eerlijk: het is een subset van JSON Schema draft 2020-12 en geen volledige implementatie. Geen format, geen externe $refs, geen patternProperties. Wat het niet ondersteunt meldt hij netjes als schemafout, dus je krijgt nooit een onterechte โ€œgeldigโ€. Een beperkte validator die eerlijk is over zijn grenzen vind ik prettiger dan een volledige die als de gemiddelde account manager loopt te bluffen dat het werkt.

Is het perfect? Nee. Is het nuttig? Elke keer dat een webhook iets stuurt wat incorrect lijkt op JSON-met-goede-bedoelingen: ja.

Want uiteindelijk geldt in integraties รฉรฉn wet: vertrouw nooit een payload die je niet zelf hebt gecontroleerd. Zeker niet als hij โ€œaltijd zo is binnengekomenโ€.

Wie de rest van de libraries (hashLib, seqLib, strLib, numLib, dateLib) nog niet heeft gezien: die staan ook gewoon in de collectie. Reacties en nieuwsgierigheid zijn welkom.

#TOPdesk #Freemarker #JSONSchema #ESM #Integraties #Webhooks #ServiceManagement