Zelf zeep maken

Als voorlopig laatste stap in het stoeien met SOAP en Natschool vandaag nog twee dingen uitgeprobeerd. Donderdag heb je kunnen lezen over het Who Is Online-script voor Natschool, gisteren over de abstractielaag die de toegang tot de webservice stukken eenvoudiger maakt.
Het mooie van het systeem van webservices en ook van NUSOAP dat ik gebruikte om de Natschool-webservices aan te spreken is dat het net zo eenvoudig is om webservices te gebruiken (te consumeren) als om die weer aan te bieden. De abstractielaag van gisteren had als nadeel dat die in PHP geschreven was en dus alleen voor andere PHP-scripts toegankelijk was. Door een script te maken dat zowel SOAP-client als SOAP-server is, is het mogelijk om die vereenvoudiging voor iedereen toegankelijk te maken.

SOAP client en server - Klik voor grotere versie

Het plaatje hierboven is eigenlijk niet veel complexer dan dat van gisteren. De ELO biedt webservices aan die toegankelijk zijn via internet. Op mijn server spreek ik die webservices met SOAP aan. Daarvoor gebruik ik NUSOAP, een set scripts geschreven in PHP. Daar bovenop heb ik een abstractielaag gemaakt die bijvoorbeeld het inloggen op Natschool samenvoegt tot één commando en ook het opvragen van Who Is Online vanuit PHP eenvoudiger maakt.
Dat script wordt nu aangeroepen door een andere PHP-pagina die het resultaat niet op het beeldscherm in een webpagina laat zien, maar die de resultaten op zijn beurt weer als een webservice beschikbaar stelt.

SOAP server code - Klik voor grotere versie who is online webservice - Klik voor grotere versie

Het voorbeeld is overigens maar beperkte tot één webservice, terwijl Natschool er op het moment een heleboel meer beschikbaar stelt.

Deze webservice is nu weer vanuit elke taal/toepassing die met SOAP kan communiceren aan te roepen. En dus ook weer gewoon door een andere PHP-toepassing.
Opvallend verschil is hier echter dat deze webservice niet vraagt om een gebruikersnaam en wachtwoord van de aanroepende toepassing, die zitten ‘ingebakken’ in de webservice. Een kleiner verschil is dat de webservice in Natschool spreekt over loginid, terwijl deze webservice een userid terug levert.

Dit principe is heel krachtig omdat je zo het resultaat van meerdere webservices, of een webservice en je eigen applicatie kunt combineren tot iets wat voor andere applicaties uitziet als één webservice.

Counter-afbeelding
Een andere manier om de resultaten van de Who Is Online-webservice beschikbaar te stellen is natuurlijk in de vorm van een afbeelding. Met PHP kun je automatisch afbeeldingen kunt laten genereren. Op de Apache-webserver kun je er dan voor zorgen dat bij het aanroepen van bijvoorbeeld de URL http://www.mijnserver.com/counter.png via de Natschool-webservice het aantal ingelogde gebruikers opvraagt en er dan een afbeelding getoont wordt met dat getal er in. Zoiets bijvoorbeeld:

counter

De URL voor de afbeelding kun je dan naar wens in een webpagina toevoegen waar je dan altijd het actuele aantal gebruikers in een afbeelding weergegeven krijgt.

En de code van dit alles?
Ik heb er normaal gesproken geen problemen mee om de code die ik maak beschikbaar te stellen. Maar hier wil/moet ik effe intern over overleggen.