Representational State Transfer
Representational state transfer (REST) je cesta jak jednoduše vytvořit, číst, editovat nebo smazat informace ze serveru pomocí jednoduchých HTTP volání.
REST (Representational State Transfer) – je architektura rozhraní, navržená pro distribuované prostředí. REST navrhl 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í
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
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
- 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
- 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.
Vlastnosti metod
Následující tabulka ukazuje, jak jsou typicky vlastnosti HTTP implementovány v podobě webové služby:
Zdroj | GET | PUT | POST | DELETE |
---|---|---|---|---|
předpokládané vlastnosti metody | bezpečná (0: read only, pouze čtení) | idempotentní (1: write once, zápis jen jednou) | datově nebezpečná (x: writing, zapisování) | idempotentní (1: write once, zápis jen jednou) |
URI kolekce, například http://example.com/resources/ |
Seznam (List) URI a případně další detaily členů kolekce. | Vyměnit (Replace) celou kolekci za jinou. | Vytvořit (Create) nový záznam do kolekce. Jeho ID je automaticky přiděleno a většinou vráceno touto operací. | Smazat (Delete) celou kolekci. |
URI prvku, například http://example.com/resources/142 |
Vrátit (Retrieve) reprezentaci adresovaného členu v kolekci, vyjádřeného vhodným internetovým typem média. | Upravit (Update) adresovaný člen kolekce, nebo – pokud neexistuje – vytvořit (create) jej. | Jednat s adresovaným členem jako s kolekcí a přidat pod něj novou položku. | Smazat (Delete) adresovaný prvek z kolekce. |
REST formáty výměny dat
REST používá pro svou datovou výměnu několik jednoduchých standardizovaných formátů:
Výhody REST konceptu 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 cacheovat, transformovat atd.
Nevýhody REST konceptu oproti RPC jsou následující.
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)
Odkazy
Související články
Externí odkazy
V tomto článku byl použit text z článku A REST na blogu dagblog.cz, který je dostupný pod licencí CC-BY 4.0 International
- RESTful Web services: The basics
- Messaging Design Pattern and transparent access to distributed components and services[nedostupný zdroj]
- "Microsoft ADO.NET Data Services (formerly Project Codename Astoria) for REST"
- "Understanding Cloud Storage APIs: Standards, Functions, Lock-in, and What's Next"
- "InfoQ Explores: REST"
- "Grasp the concepts of REST with this fictional dialogue"