Bij Team KeyHub werken we aan een innovatie die al lange tijd op onze wensenlijst stond: een native KeyHub-app voor iOS en Android. De app is geschreven in Dart (Flutter) en heeft een solide communicatielaag nodig om up-to-date blijven met nieuwe versies van KeyHub. Microsoft Kiota, dat we al voor andere toepassingen gebruiken, bood geen ondersteuning voor Dart. Samen met de Kiota-ontwikkelaars, andere ontwikkelaars binnen Topicus en externen hebben we een Dart-module geschreven voor Microsoft Kiota. Dit is de eerste taal die aan Kiota is toegevoegd en volledig door de community is gemaakt. Deze nieuwe Dart-module is inmiddels voor iedereen beschikbaar in Microsoft Kiota.
Native KeyHub App voor iOS en Android
In 2024 zijn we begonnen met het realiseren van een lang gekoesterde wens: een native KeyHub-app voor iOS en Android. Deze app moet kunnen communiceren met de backend van KeyHub om bijvoorbeeld verzoeken af te handelen en kluisregels te openen.
De ontwikkeling van de app is in handen van onze partner Nerds & Company. De app wordt geschreven in Dart (Flutter). Omdat de app niet direct met de code van KeyHub werkt, maar via een REST-API communiceert, is er een zgn. SDK nodig om die communicatie makkelijker en efficiënter te maken.
We stonden voor een unieke uitdaging. We hadden geen manier om een Dart-SDK te genereren voor KeyHub. Microsoft Kiota, dat we al voor andere SDK's gebruikten, had nog geen Dart-module en kon dus niet worden gebruikt. We zouden een eenmalige Dart-SDK kunnen schrijven, maar een gegenereerde SDK heeft het voordeel dat deze automatisch up-to-date blijft met nieuwe versies van KeyHub. Zo blijft de app altijd synchroon met de backend.
Synchronisatie tussen native KeyHub app en backend
Een belangrijke eis voor de communicatielaag is dat deze zonder handmatig werk up-to-date blijft met nieuwe versies van KeyHub. De ideale oplossing hiervoor is als de benodigde code automatisch wordt gegenereerd, gebaseerd op KeyHub’s REST-API. Bij elke update van KeyHub kan deze code opnieuw worden gegenereerd, wat zorgt voor een onderhoudsvriendelijke oplossing.
Om dit te realiseren was een speciale Dart-module nodig in Kiota. Omdat Team KeyHub op korte termijn geen tijd had om deze zelf te ontwikkelen, hebben we gekozen voor een samenwerking binnen de Open Source Community. Samen met andere ontwikkelaars hebben we een projectgroep opgericht om de Dart-functionaliteit voor Kiota verder te ontwikkelen.
De projectgroep bestond uit Team KeyHub, ontwikkelaars van Topicus Onderwijs (Kees Schotanus en Joanne ter Maat), ontwikkelaars uit de Open Source Community (Ricardo Boss en Andrea Peruffo) en ontwikkelaars van Kiota zelf.
Ontwikkelen van de Dart-module
Onze wens was helder: een SDK voor de REST-interface van KeyHub, geschreven in Dart, die automatisch gegenereerd kan worden op basis van onze OpenAPI-specificatie.
De REST-API van KeyHub heeft al een automatisch gegenereerde OpenAPI-specificatie, een gestandaardiseerde beschrijving van de API. Aan de hand van deze specificatie kunnen zgn. code generators de benodigde code genereren om met deze REST-API te kunnen communiceren. Na wat experimenteren hebben we gekozen voor Kiota, een open source code generator van Microsoft, die ze zelf bijvoorbeeld ook gebruiken om SDKs te genereren voor hun Azure Graph API.
We hadden goede ervaringen met Kiota voor onze Golang-SDK, die onder andere gebruikt wordt door onze Terraform provider. We wilden hier dan ook graag op voortborduren door Kiota ook in te zetten voor Dart.
Uitdagingen bij de ontwikkeling van de Dart-module
De ontwikkelwerkzaamheden vonden plaats in de 2e helft van 2024, met name van augustus tot en met november. De ontwikkelaars van Topicus Onderwijs hadden geen ervaring met Dart, onze doeltaal, en ook niet met .Net, de programmeertaal waarin Kiota is geschreven. Toch slaagden zij er in nauwe samenwerking met het projectteam in om binnen enkele maanden een Dart-module voor Microsoft Kiota te schrijven. Tijdens dit proces liepen we tegen twee grote uitdagingen aan:
Beperkte documentatie
Er was weinig documentatie over hoe je een nieuwe programmeertaal toevoegt aan Kiota. Veel kennis moest worden opgedaan door bestaande code voor doeltalen als .Net, Java en TypeScript te analyseren.
Brede compatibiliteit
De gegenereerde code moest niet alleen met KeyHub, maar ook met OpenAPI-specificaties van derden werken. Dit vergde extra inspanning om de SDK te finetunen.
Impact Kiota Dart-module
In 2025 is de nieuwe Dart-module goedgekeurd en geaccepteerd door de core-ontwikkelaars van Microsoft Kiota. Mede dankzij Topicus kunnen alle Kiota-gebruikers nu code in Dart genereren.
Voor KeyHub betekent dit een robuuste, herhaalbare en testbare manier om een SDK te genereren op basis van onze REST-specificatie. Hierdoor blijft de native KeyHub-app eenvoudig up-to-date met KeyHub zelf.
Deze versie van de Dart SDK wordt al door de ontwikkelaars van Nerds & Company gebruikt in de KeyHub-app. Met deze stap brengen we niet alleen de native KeyHub-app dichter bij realisatie, maar dragen we ook bij aan de Open Source Community. Een win-win voor iedereen!