Ik mag binnenkort bij een webapplicatie een publieke API met webservices maken. Ik wil dat de webapplicatie zelf gebruik gaat maken van deze webservices, zodat de API als gevolg daarvan lekker omvangrijk wordt. Verder moet het geheel zoveel mogelijk volgens de principes van REST opgezet worden. Eén URL per resource en via HTTP geef je aan wat je er mee wil en in welk formaat. Dit betekent dat zowel webbrowsers die de site bezoeken als programma’s die geschreven zijn met de API, gebruik maken van dezelfde URL’s.
Ik heb meteen maar een schema gemaakt van de opzet die ik in gedachten heb.

Opmerkingen bij het schema:
Ik heb meteen maar een schema gemaakt van de opzet die ik in gedachten heb.

Opmerkingen bij het schema:
- De webservices worden gebouwd met OpenRasta. Daarmee kan je snel en simpel REST-spul bouwen en XML, JSON of wat dan ook teruggeven.
- De website mag net wat meer dan de gebruikers van de publieke API, vandaar de splitsing in een deel openbaar en een deel niet-openbaar
- Een webbrowser doet een request naar een URL en wil HTML zien. De server herkent dit en laat het request afhandelen door ASP.NET MVC. Die roept vervolgens de webservice aan (openbaar of niet-openbaar, afhankelijk van het request) en krijgt van die webservice een pakketje JSON of XML, waar MVC dan weer HTML van maakt.
- Een extern programma doet een request naar een URL en wil JSON zien. De server herkent dit en laat het request meteen afhandelen door het publieke deel van de webservice, die vervolgens JSON teruggeeft.
- Hoe laat ik de server requests de ene keer doorsturen naar MVC en de andere keer meteen naar de webservices? In de voorbeelden heb ik het omschreven als “de server herkent dit” maar ik zou zo niet weten welk stuk software dit zou moeten regelen. Hieruit volgt eigenlijk mijn volgende vraag.
- Is ASP.NET MVC wel nodig? OpenRasta kan overweg met HTML en ASP.NET Views. Validatie zit in de businesslaag, dus daar heb ik MVC niet voor nodig. Een object binden bij een POST kan OpenRasta ook. Dus waarom niet versimpelen: ASP.NET MVC ertussenuit halen en HTML-requests ook door de webservice af laten handelen.
- Als ik de principes van REST volg, blijven acties als “new” en “edit” uit de URL. Welke URL heeft dan bijvoorbeeld het formulier om een nieuwe resource te maken? Stel, ik heb een lijst met bedrijven op http://domain/companies. Ik heb een HTML-formulier waarmee een nieuw bedrijf toegevoegd kan worden. Via welke URL is dit formulier bereikbaar? http://domain/companies/new is volgens REST niet geldig, maar welke dan wel?
If some cunt can fuck something up, that cunt will pick the worst possible time to fucking fuck it up, because that cunt’s a cunt.