BookReview: RESTful Web Services

An article, posted almost 15 years ago filed in web, internet, java, ruby, development, http, RESTful, software, webservices, methodiek, BookReview, general, programmable web, services, uri & rest.

Web Services hebben we het over het gedeelte van het internet dat begrepen kan worden, in tegenstelling tot het gewone web van web sites, door computer systemen. Er zijn verschillende manieren hoe je computer A over het internet met computer B kunt laten praten, en de RESTful wijze is er daar 1 van. In het boek RESTful Web Services, geschreven door Leonard Richardson en Sam Ruby (ISBN nr.: (978) 0596529260), wordt deze wijze uitgebreid behandeld.

Ten opzichte van andere manieren van communiceren over het internet is dat het uit gaat van de eenvoud van het HTTP protocol, dit in tegenstelling tot b.v. SOAP en RPC. Hoewel ook deze technologiën uiteindelijk wel over het HTTP gaan hebben deze technologiën een geheel andere benadering in de wijze waarin informatie op gevraagd en gemanipuleerd kan worden. Deze benadering is resource oriented, i.p.v. activity oriented. In plaats van de actie die veelal centraal staat in SOAP en RPC, staat de bron centraal, de resource. En dat is ook hoe het internet (oorspronkelijk) ook geörienteerd is. Het internet gaat ook uit van adresseerbare bronnen door middel van een URI (Unique Resource Identifier). Globaal past het hele betoog van de auteurs binnen de notie ‘Don’t fight the internet’ (Eric E. Smidth van Google).

De acties die we uitvoeren, zo leggen Richardson en Ruby uit, zijn bij voorkeur beperkt tot de simpele acties die het HTTP protocol ons geeft: GET, PUT, DELETE, POST , HEAD.

We kunnen dus een object ophalen met GET, en we krijgen dan het gevraagde terug. Willen we dit object aanpassen, of aanmaken, kunnen we PUT gebruiken. Willen we dit object verwijderen gebruiken we DELETE, willen we iets aan dit object hangen POST en willen we alleen de metadata hebben gebruiken we HEAD. Oplettende lezers herkennen hier natuurlijk het CRUD principe, create, read, update delete, dat “staat voor de vier basisoperaties die op duurzame gegevens (meestal een database) uitgevoerd kunnen worden” (wikipedia).

Aan de hand van vele  voorbeeld applicaties (waaronder een soort (Google/Live/Yahoo!) Maps web applicatie, en een del.icio.us kloon) tonen Richardson en Ruby hoe je met deze simpele methodes bijna iedere webapplicatie kunt bouwen.

Het boek is erg praktijk gericht. Zo geven ze o.a. een handig 9 stappen plan om een ontwerp te maken van de RESTful interface (hetgeen gepresenteerd wordt aan de andere machine’s (maar ook over het algemeen leesbaar is voor de mens):

  1. Begrijp over welke data het gaat
  2. Verdeel de data in bronnen
  3. Geef deze bronnen URI's (deze en de volgende stappen herhalen voor iedere resource)
  4. Zorg er voor dat deze URI's benaderbaar zijn via de HTTP interface
  5. Bepaal welke formaten er geaccepteerd kunnen worden (de body van het HTTP bericht)
  6. Bepaal welke formaten die er uit gaan
  7. Integreer deze bron in binnen andere bronnen
  8. Bedenk wat gebruikers met de bronnen zouden willen doen (wat zouden ze hierna willen op vragen, en waar zouden ze dit dan kunnen vinden)
  9. Bedenk wat er mis kan gaan, en wat er dan zou moeten gebeuren

Het boek vervolgt verder met allerlei handige aanwijzingen, met betrekking tot hoe een url ontworpen zou moeten worden, dat bestaande standaarden waar beschikbaar zoveel mogelijk hergebruikt zouden moeten worden (denk aan o.a. ATOM, maar ook aan de verscheidene microformats), en dat zelfs transacties uit te drukken zijn in een RESTful manier (door b.v. de transactie zelf een resource te maken).

Wat betreft URI ontwerp was het voor mij een verfrissende gedachte dat de URL niet altijd hiërarchisch hoeft te zijn (een structuur van ‘mappen’, gescheiden door een ‘/’), maar ook gebruik maakten van komma’s (om geordende informatie te communiceren) en puntkomma’s (om ongeordende informatie te communiceren). En wanneer het gaat om queries, dan is het zeker niet ongepast om query variabelen te gebruiken (b.v. ?q=search+string). Een RESTful URL hoeft dus echt niet altijd een ‘pretty URL’ te zijn. Het zijn werkbare principes die je ook goed kunt toepassen op goed URI ontwerp voor het menselijke web.

Samenvattend is het een veel omvattend boek. Het bevat niet alleen een goed inzicht in de basis principes van RESTful webservices, maar staat ook boordevol voorbeelden en uitgewerkte cases in vooral Ruby on Rails, maar ook Java en Python (Django). Ook is er ruimte voor enige, doch (natuurlijk?) beperkte, kritiek, in het hoofdstuk waarin resource oriented webservices worden vergeleken met de ‘ouderwetse’ webservice technologiën als RPC en SOAP. Het wordt al snel duidelijk hoe veel simpeler REST is ten op zichte van SOAP, en ja, ookal is dit een pro REST boek, weet ik uit eigen college ervaring dat SOAP echt niet fijn is.

Omdat ik voor het lezen reeds overtuigd was van de kracht van het REST principe kreeg ik wel het gevoel dat het boek vaak in de herhaling viel. Maar mogelijk is de herhaling  wel goed voor zij die nog overtuigd dienen te worden. Dus hoewel het boek mijns inziens dunner had gekund, is het zeker geen slecht overzicht / naslagwerk voor zij die geïnteresseerd zijn of willen werken met REST.

Deze post verscheen eerder op The Bean Blog

Op de hoogte blijven?

Maandelijks maak ik een selectie artikelen en zorg ik voor wat extra context bij de meer technische stukken. Schrijf je hieronder in:

Mailfrequentie = 1x per maand. Je privacy wordt serieus genomen: de mailinglijst bestaat alleen op onze servers.