HATEOAS - HATEOAS
Hypermedia jako silnik stanu aplikacji ( HATEOAS ) to ograniczenie architektury aplikacji REST, które odróżnia ją od innych architektur aplikacji sieciowych.
Dzięki HATEOAS klient wchodzi w interakcję z aplikacją sieciową, której serwery aplikacji dynamicznie dostarczają informacje za pośrednictwem hipermediów . Klient REST potrzebuje niewielkiej lub żadnej wcześniejszej wiedzy na temat interakcji z aplikacją lub serwerem poza ogólnym zrozumieniem hipermediów.
Natomiast klienci i serwery w architekturze CORBA (Common Object Request Broker Architecture) współdziałają za pośrednictwem stałego interfejsu współdzielonego przez dokumentację lub języka opisu interfejsu (IDL).
Ograniczenia nałożone przez HATEOAS rozdzielają klienta i serwer. Umożliwia to niezależną ewolucję funkcjonalności serwera.
Przykład
Klient użytkownika, który implementuje protokół HTTP, wysyła żądanie HTTP do interfejsu API REST za pomocą prostego adresu URL . Wszystkie kolejne żądania, które może wykonać klient użytkownika, są wykrywane w odpowiedziach na każde żądanie. Te rodzaje materiałów używanych do tych przedstawień, oraz stosunki łącza mogą one zawierać, są standaryzowane. Klient przechodzi przez stany aplikacji, wybierając łącza w reprezentacji lub manipulując reprezentacją w inny sposób, na który pozwala typ mediów. W ten sposób interakcja RESTful jest napędzana przez hipermedia, a nie informacje spoza pasma.
Na przykład to żądanie GET pobiera zasób konta, żądając szczegółów w reprezentacji JSON:
GET /accounts/12345 HTTP/1.1
Host: bank.example.com
Odpowiedź brzmi:
HTTP/1.1 200 OK
{
"account": {
"account_number": 12345,
"balance": {
"currency": "usd",
"value": 100.00
},
"links": {
"deposits": "/accounts/12345/deposits",
"withdrawals": "/accounts/12345/withdrawals",
"transfers": "/accounts/12345/transfers",
"close-requests": "/accounts/12345/close-requests"
}
}
}
Odpowiedź zawiera następujące możliwe linki uzupełniające: POST wpłatę, wypłatę, przelew lub żądanie zamknięcia (aby zamknąć konto).
Na przykład później, po przekroczeniu konta, jest inny zestaw dostępnych linków, ponieważ konto jest przekroczone.
HTTP/1.1 200 OK
{
"account": {
"account_number": 12345,
"balance": {
"currency": "usd",
"value": -25.00
},
"links": {
"deposits": "/accounts/12345/deposits"
}
}
}
Teraz dostępny jest tylko jeden link: aby wpłacić więcej pieniędzy (przez POST do depozytów). W obecnym stanie pozostałe linki nie są dostępne. Stąd termin Engine of Application State . Możliwe działania różnią się w zależności od stanu zasobu.
Klient nie musi rozumieć każdego typu mediów i mechanizmu komunikacji oferowanego przez serwer. Zdolność do zrozumienia nowych typów nośników można uzyskać w czasie wykonywania za pomocą „ kodu na żądanie ” dostarczanego klientowi przez serwer.
Początki
Ograniczenie HATEOAS jest zasadniczą częścią funkcji „jednolitego interfejsu” REST, zgodnie z definicją w rozprawie doktorskiej Roya Fieldinga . Fielding dokładniej opisał tę koncepcję na swoim blogu.
Celem niektórych z tych i innych ograniczeń REST, wyjaśnia Fielding, jest „projektowanie oprogramowania w skali dziesięcioleci: każdy szczegół ma na celu promowanie długowieczności oprogramowania i niezależnej ewolucji. Wiele ograniczeń jest bezpośrednio przeciwnych krótkoterminowym Niestety, ludzie są dość dobrzy w projektowaniu krótkoterminowym i zwykle kiepskim w projektowaniu długoterminowym”.
Zobacz też
- Hipertekstowy język aplikacji
- Universal Description Discovery and Integration jest odpowiednikiem języka opisu usług sieciowych