HATEOAS
HATEOAS (Hypermedia as the Engine of Application State, v překladu Hypermedia jako aplikační stav) je v informatice jedním ze základních principů REST architektury, kterým se odlišuje od ostatních síťových aplikačních architektur. Princip spočívá v komunikaci klientské aplikace s aplikačním serverem skrze dynamicky poskytované hypermédium. REST klient nepotřebuje žádné předchozí znalosti o tom, jak komunikovat s jakoukoliv částí aplikačního serveru – kromě všeobecného porozumění poskytovanému hypermédiu. Jako opak jsou architektury orientované na služby SOA (Service Oriented Architecture), ve kterých je komunikace mezi klientem a serverem dána fixním rozhraním. Rozhraní může být definováno dokumentací nebo pomocí Interface description language (IDL).
HATEOAS princip v REST architektuře odděluje klienta od serveru způsobem, který umožňuje serveru nezávislé rozšiřování funkcionality.
Komunikace
REST klient se dotáže serverové REST aplikace skrze URL. Všechny následující akce, které klientská aplikace může provést, jsou obsažené v resource vrácené serverem. Typ internetového média (Content type), v němž je resource navrácený serverem reprezentován, je standardizován, stejně tak jako vztahy k volitelným odkazům v něm uvedených.
Klient tak pomocí dostupných odkazů může manipulovat s resource, či získávat jiná k němu vztahující se data. Takto je docíleno tzv. RESTful komunikace, která je řízena pouze pomocí hypermedia a jím poskytnutých informací o dostupných akcí nad resource.
Jako příklad je zde dotaz[1] na server HTTP metodou GET k získání resource (informací) bankovního účtu reprezentového v XML:
GET /account/12345 HTTP/1.1
Host: somebank.org
Accept: application/xml
...
V odpovědi přišly informace o daném účtu:
HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: ...
<?xml version="1.0"?>
<account>
<account_number>12345</account_number>
<balance currency="usd">100.00</balance>
<link rel="deposit" href="/account/12345/deposit" />
<link rel="withdraw" href="/account/12345/withdraw" />
<link rel="transfer" href="/account/12345/transfer" />
<link rel="close" href="/account/12345/close" />
</account>
Spolu s informacemi o bankovním účtu jsou dostupné 4 možné akce dostupné přes poskytnuté odkazy:
- Vložit peníze (deposit)
- Vybrat peníze (withdraw)
- Převod peněz (transfer)
- Uzavření účtu (close)
Při pozdějším dotazu na informace o účtu, kdy bude v tomto případě zůstatek na účtě záporný, bude odpověď serveru vypadat takto:
HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: ...
<?xml version="1.0"?>
<account>
<account_number>12345</account_number>
<balance currency="usd">-25.00</balance>
<link rel="deposit" href="/account/12345/deposit" />
</account>
Teď je již dostupný pouze jeden odkaz/akce: vložení peněz(deposit). A to kvůli tomu, že v aktuálním stavu nejsou jiné akce povoleny.
Klient nemusí rozumět všem typům media nebo komunikačním mechanismům serveru. Schopnost rozumět novým či jiným typům media může být získána za běhu aplikace pomocí „code-on-demand“, v překladu „získání kódu na požádání“. V praxi to znamená, že server navrátí kód, například v JavaScriptu, který rozšíří funkcionalitu klienta.
Původ
HATEOAS je základním principem umožňující jednotné rozhraní REST aplikací. Obojí bylo definováno v dizertační práci Roye Fieldinga.[2]
Koncept byl hlouběji pro vývojáře popsán na jeho blogu.[3]
Účelem některých přísností tohoto a dalších omezení REST, vysvětluje Fielding, je "návrh softwaru v měřítku desetiletí: každý detail je určen k podpoře dlouhé životnosti softwaru a nezávislého vývoje. Mnohá omezení jsou přímo proti krátkodobým efektivita. Bohužel, lidé jsou docela dobří v krátkodobém designu a obvykle jsou hrozní v dlouhodobém designu."[4]
Reference
V tomto článku byl použit překlad textu z článku HATEOAS na anglické Wikipedii.
- "The RESTful CookBook"
- "Representational State Transfer (REST)"
- FIELDING, Roy T. REST APIs must be hypertext-driven [online]. 20. října 2008 [cit. 2010-05-20]. Dostupné online.
- Price, Roy Kenneth, (16 May 1916–20 Oct. 2005), Under-Secretary (Legal), in office of HM Treasury Solicitor, 1972–81. [s.l.]: Oxford University Press Dostupné online.