Verbinding tussen een complex systeem en de eindgebruiker

Als programmeur hou ik mij het liefst bezig met het bouwen aan en werken met de meest complexe systemen. Het uiteindelijk doel van dergelijke systemen is ervoor zorgen dat eindgebruikers er iets mee kunnen. Dat betekent dat er ook verbinding moet worden gemaakt in de vorm van toegang tot het systeem voor de eindgebruiker.

Sinds enige tijd is er een REST API in WordPress die het mogelijk maakt om verbinding met het platform te maken vanuit andere systemen. Vrijwel elk aspect van WordPress is op die manier te benaderen. Dat doet het systeem zelfs zo goed dat er wat mij betreft wat externe requests van gebruikers zonder autorisaties die verder gaan dan een blote registratie betreft wat minder open zou mogen zijn en meer restricties op zouden mogen zitten.

Het eerste dat ik daarom heb gedaan is een geweldige plugin geïnstalleerd waarmee authenticatie mogelijk is. De JWT Authentication for WP REST API werkt perfect. Eveneens via de REST API kan via de plugin een JSON Web Token (RFC 7519) worden gekregen waarmee de (externe) gebruiker zich tijdens een request kan authenticeren.

De externe client vraagt eerst één keer het token op en stuurt het vervolgens bij elke request mee. De plugin logt vervolgens alvorens de request wordt verwerkt de gebruiker die aan de token is gekoppeld in zodat de autorisaties van die gebruiker beschikbaar zijn.

Vervolgens heb ik zelf een plugin gemaakt die externe toegang tot de REST API volledig blokkeert voor niet ingelogde gebruikers. Daarbij heb ik één uitzondering gemaakt namelijk voor het opvragen van het JSON Web Token. In andere gevallen wordt de toegang geweigerd.

De toegang tot de resources van WordPress via de REST API is vrijwel ongelimiteerd. Er is (voor ingelogde gebruikers met de juiste autorisaties) toegang tot vrijwel alle resources waar je als programmeur van een plugin ook toegang toe hebt. Daarbij gaat het om volledige CRUD toegang. Of te wel je kan niet alleen resources uitlezen, je kan die ook bewerken en verwijderen.

Daarnaast is het eenvoudig om resources toe te voegen met behulp van plugins zodat ook bepaalde acties extern kunnen worden aangeroepen of worden uitgevoerd. Op die manier kan de REST API ook worden gebruikt om webservices te bouwen die worden uitgevoerd door het op WordPress gebaseerde systeem en aangeroepen door een externe client.

Op deze manier kan een complex systeem dat op WordPress gebaseerd is worden gebruikt zonder dat er een frontend interface en/of management interface hoeft te worden gebouwd. Het op WordPress gebaseerde systeem bevat alle complexiteit en het beheer en de presentatie aan de eindgebruiker draait op een ander systeem dat veel minder complex hoeft te zijn.

Een ander voordeel hiervan is dat er verschillende complexe systemen hun eigen WordPress installatie hebben en daardoor autonoom draaien. Het bouwen en onderhouden van elk van die systemen kan daardoor los van elkaar en omdat het verschillende autonome systemen zijn zitten die elkaar ook niet in de weg. Dat maakt de ontwikkeling makkelijker en zorgt er ook voor dat wanneer er een probleem met één systeem is dat de andere systemen daar geen last van hebben.

Als programmeur vind ik het zelfs het fijnst dat er een onderscheid is tussen de complexe systemen en de presentatie naar de gebruiker toe. Er is daardoor geen concurrentie meer tussen wat er gewenst is vanuit het perspectief van het complexe systeem en wat voor de gebruiker fijn is. Door de scheiding van de twee werelden kan er volledig worden gefocust op wat er belangrijk is vanuit beide perspectieven.