Jak jsem (ne)pochopil REST
S křížkem po funusu ale přece! V tomto článku bych chtěl několika větami okomentovat :lednovou přednášku":http://www.java.cz/detail.do?… Jakuba Podlešáka Java API pro RESTful web services. Po obyčejném blogování se mi už pekelně stýskalo. Od půlky prosince totiž nedělám nic jiného než že se snažím přivést k životu naše kontaktní čočky.
REST
REST chápu jako soubor pravidel pro manipulaci s daty po síti (zpravidla pomocí HTTP protokolu). V RESTu se pracuje se resourci – zdroji. Každý zdroj má svoji unikátní adresu. Pomocí volání adresy zdroje s ním lze provádět operace. Od prostého načtení po vytvoření, modifikaci až po smazání. Kromě zavolání zdroje pomocí adresy (URL) lze do těla požadavku zabalit další data – například pro vytvoření nového zdroje. Data mohou být v různé formě – např XML, JSON, plain text…
REST naopak nedefinuje autentizaci a autorizaci uživatelů. REST je bezstavový.
Jak je to s tou stavovostí RESTu?
A právě o stavovosti RESTu bych se chtěl zamyslet. Na přednášce proběhla vášnivá debata na téma stavovost RESTu. Padly zde názory, že když pracuju s webovou aplikací používající REST a uložím nový zdroj, tak se přece musí jednat o stavové chování. Vždyť se přece změnil stav aplikace.
Výše uvedený názor je nesmysl. Se stavovostí RESTu je to stejně jako se stavostí HTTP protokolu – je nestavový. Uvedu na jednoduchém příkladu. Tím příkladem jsou sessions.
Příklad se sessions
Sessions fungují tak, že server přibalí do odpovědi klienta unikátní idenfikátor, který označuje session id. Toto cookies se pak přenáší při další komunikaci mezi serverem a klientem. Klient session id přibaluje buď do:
- URL
- POST dat
- cookies
A naprosto stejně to funguje i s RESTem. Když budeme mít
resource na adrese http://vavru.cz/eshop/vytvorit-kosik/
,
může odpověď vypada například takto –
http://vavru.cz/eshop/kosik/wsdei9012309a/
. Dostali
jsme zpět adresu na nově vytvořený košík. Když pak klient chce
s tím to košíkem (každý klient má svůj košík) musí uvést celou
adresu košíku. Takže pro přidání nové položky bychom mohli použít
například takovýhle odkaz –
http://vavru.cz/eshop/kosik/wsdei9012309a/pridat-produkt/
a v těle požadavku specifikovat o jaký produkt se jedná a
například počet kusů.
Zdá se vám to jednoduché?
Mně taky. Proto nechápu tolik případů nepochopení ze strany posluchačů. Možná jsem to celé jenom špatně pochopil a chyba je na mé straně. V tom případě prosím nějakého zkušeného RESTovače, aby mě například pomocí komentáře přivedl na správnou cestu.
Celý článek 12 komentářů 28. February 2008