Representational State Transfer

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání

REST (Representational State Transfer) – je architektura rozhraní, navržená pro distribuované prostředí. REST navrhnul a popsal v roce 2000 Roy Fielding (jeden ze spoluautorů protokolu http) 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. Rozhraní REST je použitelné pro jednotný a snadný přístup ke zdrojům (resources). Zdrojem mohou být data, stejně jako stavy aplikace (pokud je lze popsat konkrétními daty). REST je tedy na rozdíl od známějších XML-RPC či SOAP, orientován datově, nikoli procedurálně. Všechny zdroje mají vlastní identifikátor URI a REST definuje čtyři základní metody pro přístup k nim.

Historie a použití[editovat | editovat zdroj]

Architektonický styl REST byl vyvinut souběžně s protokolem HTTP/1.1, na základě stávajícího návrhu HTTP/1.0. REST je druhem softwarové architektury navržený pro „hypermediové“ systémy jako je např. WWW (world wide web). Jako takový není stavěn jen pro webové služby. REST v nejdůslednějším slova smyslu definuje sbírku principů síťové architektury, která popisuje, jak jsou zdroje definovány a adresovány. Ve volnějším slova smyslu je popisován jednoduchým rozhraním, které přenáší doménově specifikovaná data pomocí HTTP protokolu bez přidané zprávové vrstvy jakou je např. SOAP či HTTP cookies. Tyto dva významy mohou být v rozporu a stejně tak se mohou ve svém významu překrývat. Je možné navrhnout síť s REST architekturou bez použití HTTP a bez interakce s WWW, ale také je možné navrhnout jednoduché XML a HTTP rozhraní, které se plně neřídí REST principy, na místo toho sleduje model RPC. Tyto diference mezi použitím termínu REST způsobuje jistý zmatek v technických dokumentacích, proto systémy, které používají principy Fieldingova REST, se označují jako RESTful.

Koncept[editovat | editovat zdroj]

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 svoji 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.

Základní principy RESTu[editovat | editovat zdroj]

  • stav aplikace a chování je vyjádřen takzvaným resourcem (klíčová abstrakce), každý resource musí mít unikátní identifikátor (URL, URN)
  • HATEOAS (= Hypermedia as the Engine of Application State, v překladu Hypermedia jako aplikační stav) – stav aplikace je určen pomocí URL. Další možné stavy můžeme získat pomocí odkazů, které klient dostane v odpovědi od serveru.
  • 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), klient nepracuje přímo s resource, ale s jeho reprezentací

Komunikační protokol[editovat | editovat zdroj]

  • 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 klientem a serverem
  • 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 dvou 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.

Následující tabulka ukazuje, jak jsou typicky vlastnosti HTTP implementovány v podobě webové služby:

RESTful Web Service HTTP methods
Resource GET PUT POST DELETE
Collection URI, such as http://example.com/resources/ List the URIs and perhaps other details of the collection's members. Replace the entire collection with another collection. Create a new entry in the collection. The new entry's ID is assigned automatically and is usually returned by the operation. Delete the entire collection.
Element URI, such as http://example.com/resources/142 Retrieve a representation of the addressed member of the collection, expressed in an appropriate Internet media type. Update the addressed member of the collection, or if it doesn't exist, create it. Treat the addressed member as a collection in its own right and create a new entry in it. Delete the addressed member of the collection.

REST formáty výměny dat[editovat | editovat zdroj]

REST používá pro svou datovou výměnu několik jednoduchých standardizovaných formátů:

  • ATOM/RSS: velmi populární sada protokolů pro publikaci a aktualizaci informačních zdrojů.
  • JSON (JavaScript Object Notation): speciální záznam popisu dat odvozený z JavaScriptu s nízkou provozní režií, snadno a rychle interpretovatelný v jakémkoliv prohlížeči.
  • XML: univerzální formát, který funguje vždy a všude, ale např. práce s JSON je v prohlížeči mnohem rychlejší.

Hlavní cíle, které zahrnuje REST[editovat | editovat zdroj]

  • Obecné rozhraní
  • Škálovatelnost komunikujících komponent
  • Nezávislé nahrávání (deploy) komponent
  • Použit zprostředkující komponenty ke snížení odezvy (latence), zvýšení bezpečnosti a zapouzdření systémů

REST výhody a nevýhody oproti RPC[editovat | editovat zdroj]

Výhody REST konceptu jsou následující.[editovat | editovat zdroj]

  • 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 cacheovat, transformovat atd.

Nevýhody REST konceptu oproti RPC jsou následující.[editovat | editovat zdroj]

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. (3)

Externí odkazy[editovat | editovat zdroj]