RESTFul Webservices – Intro

 
24 mei 2008

Vast wel eens gehoord van REST, een van de meer actuele buzzwords in ons vakgebied. Tot voor een week geleden had ik wel een beetje een idee van wat het inhield, maar dat was meer een beetje (klok && !klepel). Bij de collega’s van InfoSupport was afgelopen week een NLJug University over RESTFul webservices. Prima verzorgd en erg leerzaam; een aanrader.

Terug naar het onderwerp, want wat is REST nou precies? Iets met http is wat ik ongeveer een week geleden geantwoord zou hebben en hoewel http een voorbeeld van een REST implementatie is behoeft dit toch wel wat meer uitleg. REST is ten eerste een afkorting die staat voor REpresentational State Transfer. In 2000 heeft Roy Fielding deze term gelanceerd in zijn promotiewerk. Het kernidee achter REST is dat het web zich inmiddels qua schaalbaarheid dubbel en dwars bewezen heeft (overigens zijn er meer mensen die het internet als één van de meer schaalbare producten van de mens zien. Hoewel internet en het web verschillende dingen zijn… of niet?). Http en het web hebben onder anderen als kenmerk dat alles uniek benaderbaar is d.m.v. URL’s. Met ‘alles’ bedoel ik hier de op het web aanwezige documenten, de REST term hiervoor is resources. REST wordt dan ook steeds vaker aangeduid als Resource Oriented Architecture (ROA). Neem bijvoorbeeld een service die blogposts aanbiedt, een REST service zou dan via de URL http://www.software-innovators.nl/2008/ de lijst met posts aan kunnen bieden. Aangezien alles benaderbaar moet zijn zou http://www.software-innovators.nl/2008/05/24/restful-webservices-intro/ deze post op moeten leveren. Uiteraard is er nog veel meer mogelijk met dit soort URL’s (denk aan scoping parameters die we mee willen geven) maar ik laat het voorlopig hier even bij.

Een ander uniek kenmerk van REST is de zgn. ‘Uniform Interface’. RESTful webservices kennen maar 5 methoden: GET, POST, HEAD, DELETE en PUT. GET/PUT/DELETE is hierbij voor de CRUD achtige operaties (CRUD staat voor Create/Read/Update/Delete) en POST kan gebruikt worden voor het doorgeven van grotere brokken data en geeft hiermee de mogelijkheid voor grotere en / of samengestelde transacties.

Een laatste interessant kenmerk van REST dat ik hier noem is het uitgangspunt van connectedness. Resources zijn navigeerbaar en staan (zoveel mogelijk) met elkaar in verbinding. Zo zou een klant bijvoorbeeld gerepresenteerd kunnen worden door het volgende XML fragment:

<customer>
<name>piet</name>
<accountmanager>http://www.sogyo.nl/accountmanager/arthur</accountmanager>
</customer>

Wat we hier zien is dat je door een klant op te vragen niet altijd de volledige XML tree terug hoeft te krijgen maar ook bijvoorbeeld pointers naar andere resources. Dit is een zeer krachtig concept waar heel veel problemen met SOAP webservices mee tot het verleden gaan behoren. Ik kom hier ongetwijfeld in latere posts op terug.

Ok, leuk (& wollig) verhaal, samenvattend in hoofdlijnen geldt voor RESTFul webservices dus:

– Alles is een resource
– Alles is uniek benaderbaar
– Er zijn maar 5 operaties mogelijk
– Resources kunnen in verschillende vormen (content-types) beschikbaar zijn
– Resources zijn connected

Wellicht dat deze post meer vragen oproept dan beantwoord, wellicht handig om dus even met wat resources af te sluiten:

Bronnen:
Wikipedia
Proefschrift Roy Fielding
Boek (richardson & Ruby, RESTful Web Services)
Frameworks:
Restlets
JAX-RS
WCF


Werken met ?
Kijk dan bij onze mogelijkheden voor starters en/of ervaren IT'ers.


Categorieën: Architectuur, Development, Java (EE), .Net, Overige talen en platformen

Tags: , ,