A REST
Representational State Transfer (REST) je koncept pro design distribuované architektury. Distribuovaná architektura v tomto smyslu znamená, že části programu běží na různých strojích a pro svojí komunikaci využívají síť. Pod programem si můžete představit například webovou aplikaci, kde internetový prohlížeč komunikuje s webovým serverem, aplikaci pro výměnu dat mezi finančními institucemi, kde dochází k vzájemnému volání mezi servery.
REST navrhnul a popsal v roce 2000 Roy Fielding v rámci disertační práce Architectural Styles and the Design of Network-based Software Architectures. V kontextu práce je nejzajímavější kapitola 5, ve které Fielding odvozuje principy RESTu na základě známých přístupů k architektuře.
Základní principy RESTu
- stav aplikace a chování je vyjádřen takzvaným resourcem (klíčová abstrakce)
- každý resource má unikátní identifikátor (URL, URN)
- je definován jednotný přístup pro získání a manipulaci s resourcem v podobě čtyř operací CRUD (Create, Read, Update, Delete)
- resource může mít různé reprezentace (XML, HTML, JSON, SVG, PDF)
Komunikační protokol
- client/server — slouží k oddělení odpovědností
- bezestavovost (stateless)- každý požadavek musí obsahovat všechny informace nutné k jeho vykonání
- cache — každý požadavek může být explicitně označený jako cacheovatelný či necacheovatelný, to umožňuje transparentně zvýšit výkonnost přidáním cache mezi klient a server
- Code-On-Demand — funkcionalita klienta může být rozšířena kódem, který zašle server (například JavaScript)
- vrstevnatost — umožňuje skládání vrstev poskytujících služby za účelem zvýšení variabilnosti (cache, transformace, rozložení zátěže atd.)
Existují samozřejmě i další přístupy k řešení distribuované architektury jako Remote Procedure Call (RPC). Obecně můžeme říci, že rozdíl mezi RESTem a RPC je ve dvouch rovinách, sémantice operací a tím co se distribuuje. Sémantika operací v RESTu je konečná a tvoří ji pouze CRUD (create, read, update, delete) na daném resourcu. Oproti tomu v RPC sémantika odpovídá metodám, které jsou volány. V RESTU se distribuuje stav (data představovaná resourcem), oproti chování, které se distribuuje v RPC.
Výhody REST konceptu oproti RCP jsou následující.
- jednoduché a změnám odolné rozhraní — snadná rozšiřitelnost
- malé nároky na klienta z hlediska porozumění sémantice operací
- transparentnost — resource lze na “cestě” velice snadno cahceovat, transformovat atd.
Nevýhody REST konceptu oproti RPC jsou následující.
- klient musí s každým požadavkem posílat všechny informace nutné k jeho vykonání
- chybějící podpora na úrovni middleware — všechno si člověk musí napsat sám
Právě chybějící podpora na úrovní middleware je asi největším problémem protože vede k velkému nepohodlí při práci s RESTem. Samozřejmě existují výjimky jako Google a jeho GData, pomocí kterých je využívání Google služeb přes REST pohodlné. GData mají klientské knihovny pro Java, JavaScript, .NET, PHP, C++ a Python.
V Jave se můžeme těšit na JSR 311 — Java API for RESTful Web services, které doufejme přinese usnadnění práce s RESTEm v Jave. Referenční implementace této specky nese název Jersey a můžete se o ní něco dozvědět v rozhovoru RESTful Web Services and Jersey. Spíše bych vám doporučil prezentaci JSR 311: JAX-RS, ve které jsou vidět praktické ukázky.
REST bude tématem některého z příštích CZJUGu a o Jersey bychom se měli pobavit přímo s jedním z jeho autorů v dalších podcastech. Na závěr přidávám pár zajímavých odkazů.
Související články
Související epizody CZ Podcastu
- #217 · Ivo Lukačovič
O Windy, JavaScriptu a budování firem.
- #3 · Java 6 SE, Vývoj webových aplikací
Dagi a Filemon o novinkách v Javě 6 a webových frameworcích.
- #1 · Vývojová prostředí v Javě
První díl CZ Podcastu se věnuje vývojovým prostředím pro Javu.