En dan op zoek naar een handige manier om webservices aan te roepen en de JSON-responses te parsen. Ik gebruikte in de oude versie Spring, voor de API-calls, en GSON voor de omzetting van de JSON-responses. en dacht dat ook nu te gaan doen. Wel even kijken of er intussen betere alternatieven zijn. Ik zag al snel dat Retrofit populair was voor het callen van REST-API´s. Retrofit integreert met Moshi voor het omzetten van de JSON-responses en gebruikt OkHttp voor de netwerk I/O. GSON leek qua actualiteit achterop te raken, de documentatie maakt geen melding voor het gebruik ervan in combinatie met Kotlin. Moshi doet dat wel, en ondersteunt Kotlin prima.
Dit in combinatie met de populariteit van deze libraries, en de fatsoenlijke documentatie, deden mij besluiten om hiermee aan de gang te gaan.

RetroFit is eigenlijk vrij probleemloos. Voor het omzetten van datums in de JSON-documenten heb je convbersie-functies nodig, die je gemakkelijk kunt definiëren. Ook kun je met extra data-classes conversies doen als de JSON-data niet in overeenstemming is met het datamodel binnen de app. Je gebruikt die classes dan als tussenobjecten tussen de JSON-data en de model-classes van de app.

Eén opmerkelijk probleem had ik wel. Ik wilde testen mbv de MockWebServer die OkHttp biedt om web i/o calls te doen zonder een echte server nodig te hebben, en eindigde met een vage foutmelding over het niet implementeren van een interface door een interne OkHttp-class. Om MockWebServer te gebruiken heb je een extra dependency nodig in de gradle-configuratie. Ik had die toegevoegd en daarbij de laatste versie (4.9.1) gebruikt. De dependency voor OkHttp die Retrofit meebrengt is echter 3.12. Die versie werken dus niet samen. Het expliciet als 4.9.1 toevoegen van de OkHttp-dependency verhielp dit probleem.

De API bevat ook versioning dmv een http-header. Je kan in OkHttp intercepters definiëren die uitgevoerd worden voordat een resultaat afgeleverd wordt. Daain heeft die versioning een plaats gevonden. De conversie-code hoeft zig daar niet mee bezig te houden, het is zo mooi van elkaar gescheiden.

Ik had OkHttp ook los nodig om afbeeldingen te downloaden. Die zitten niet in de JSON-documenten. Die downloaden bleek gelukkig eenvoudig te doen. Zo verkrijg ik nu de server-data in de app.