Meer
Wat is RESTful programmeren precies?
Wat is RESTful programmeren precies?
voor zoekmachines: wat is RESTful programmeren REST -->
3909
3
REST is het onderliggende architectuurprincipe van het web. Het verbazingwekkende van het web is het feit dat clients (browsers) en servers op complexe manieren met elkaar kunnen communiceren zonder dat de client van tevoren iets weet over de server en de bronnen die hij host. De belangrijkste beperking is dat de server en de client het beide eens moeten zijn over de gebruikte media, die in het geval van het web HTML is.
Een API die de principes van REST volgt, vereist niet dat de client iets weet over de structuur van de API. In plaats daarvan moet de server alle informatie verstrekken die de client nodig heeft om met de dienst te interageren. Een HTML-formulier is hier een voorbeeld van: De server specificeert de locatie van de bron en de vereiste velden. De browser weet niet van tevoren waar hij de informatie moet indienen, en hij weet niet van tevoren welke informatie hij moet indienen. Beide vormen van informatie worden volledig door de server aangeleverd. (Dit principe wordt HATEOAS: Hypermedia As The Engine Of Application State genoemd.)
Hoe is dit van toepassing op HTTP, en hoe kan het in de praktijk worden geïmplementeerd? HTTP is georiënteerd op werkwoorden en bronnen. De twee meest gebruikte werkwoorden zijn
GET
enPOST
, waarvan ik denk dat iedereen ze zal herkennen. Echter, de HTTP standaard definieert verschillende andere zoalsPUT
enDELETE
. Deze werkwoorden worden dan toegepast op bronnen, volgens de instructies van de server.Laten we ons bijvoorbeeld voorstellen dat we een gebruikersdatabase hebben die wordt beheerd door een webdienst. Onze service gebruikt een aangepaste hypermedia gebaseerd op JSON, waarvoor we het mimetype
application/json+userdb
toewijzen (Er kan ook eenapplication/xml+userdb
enapplication/whatever+userdb
zijn - vele mediatypen kunnen worden ondersteund). De client en de server zijn beide geprogrammeerd om dit formaat te begrijpen, maar ze'weten niets van elkaar. Zoals Roy Fielding opmerkt:Een verzoek voor de basis resource
/
zou iets als dit kunnen opleveren:Verzoek
Response
Uit de beschrijving van onze media weten we dat we informatie over verwante bronnen kunnen vinden in secties genaamd "links". Dit wordt Hypermedia controls genoemd. In dit geval kunnen we uit zo'n sectie opmaken dat we een gebruikerslijst kunnen vinden door nog een request te doen naar
/user
:Vraag
Response
Uit dit antwoord kunnen we veel afleiden. Zo weten we nu bijvoorbeeld dat we een nieuwe gebruiker kunnen aanmaken door
POST
ing naar/user
:Request
Response
We weten ook dat we bestaande gegevens kunnen wijzigen:
Vraag
Response
Merk op dat we verschillende HTTP werkwoorden gebruiken (
GET
,PUT
,POST
,DELETE
enz.) om deze bronnen te manipuleren, en dat de enige kennis die we veronderstellen van de kant van de client's onze media definitie is.Verder lezen:
(Op dit antwoord is nogal wat kritiek gekomen omdat het de kern van de zaak zou missen. Voor het grootste deel is dat terechte kritiek geweest. Wat ik oorspronkelijk beschreef was meer in overeenstemming met hoe REST gewoonlijk werd geïmplementeerd een paar jaar geleden toen ik dit voor het eerst schreef, in plaats van de ware betekenis ervan. Ik'heb het antwoord herzien om beter de echte betekenis weer te geven).
REST is het gebruik van de verschillende HTTP-methoden (hoofdzakelijk GET/PUT/DELETE) om gegevens te manipuleren.
In plaats van een specifieke URL te gebruiken om een methode te verwijderen (zeg,
/user/123/delete
), zou je een DELETE verzoek sturen naar de/user/[id]
URL, om een gebruiker te bewerken, om info over een gebruiker op te halen stuur je een GET verzoek naar/user/[id]
Bijvoorbeeld, in plaats van een aantal URLs die er als volgt uit zouden kunnen zien...
Je gebruikt de HTTP "werkwoorden" en hebt...
Het is programmeren waarbij de architectuur van je systeem past in de REST-stijl die Roy Fielding in zijn proefschrift heeft uiteengezet. Aangezien dit de architectuurstijl is die het web (min of meer) beschrijft, zijn veel mensen erin geïnteresseerd.
Bonus antwoord: Nee. Tenzij je'als academicus softwarearchitectuur studeert of webdiensten ontwerpt, is er eigenlijk geen reden om van de term gehoord te hebben.