HATEOAS
Hypermedia as the Engine of Application State (HATEOAS), або гіпермедіа як двигун стану додатку - є компонентом архітектури мережевих додатків REST, що відрізняє її від інших архітектур мережевих додатків.
З HATEOAS клієнт взаємодіє з мережевим додатком, сервери якого динамічно надають інформацію через гіпермедіа. Клієнт REST не потребує попередніх знань про те, як взаємодіяти з додатком або сервером поза загальним розумінням гіпермедіа.
На відміну від цього, клієнти та сервери з CORBA взаємодіють через фіксований інтерфейс поширений через документацію або мовою опису інтерфейсу (МОІ).
Завдяки HATEOAS, клієнт відв'язується від сервера, що дозволяє серверу розвиватися незалежно.
Приклад
Клієнт REST взаємодіє з REST додатком через просту фіксовану URL-адресу. Всі майбутні дії, які може здійснити клієнт, описані в представленні ресурсу повернутому із сервера. Типи медіа, які використовуються в отриманому описі ресурсу або можливі зв'язки між посиланнями - стандартизовані. Клієнт переходить між станами додатку, обираючи посилання у представленні ресурсу або маніпулюючи представленням іншими способами, які надає його тип медіа. Таким чином, RESTful взаємодія обумовлена гіпермедією, а не попередньо описаною документацією.[1]
Наприклад, [2] цей GET запит отримує ресурс облікового запису, запитуючи деталі в представленні JSON:
GET /accounts/12345/ HTTP/1.1
Host: bank.example.com
Accept: application/vnd.acme.account+json
...
Відповідь сервера:
HTTP/1.1 200 OK
Content-Type: application/vnd.acme.account+json
Content-Length: ...
{
"account": {
"account_number": 12345,
"balance": {
"currency": "usd",
"value": 100.00
},
"links": {
"deposit": "/accounts/12345/deposit",
"withdraw": "/accounts/12345/withdraw",
"transfer": "/accounts/12345/transfer",
"close": "/accounts/12345/close"
}
}
}
Відповідь містить всі можливі подальші посилання: внести, зняти, переказати кошти або закрити рахунок.
Коли матиме місце перевитрата коштів, з доступних опцій буде лише 'внесення коштів' (deposit):
HTTP/1.1 200 OK
Content-Type: application/vnd.acme.account+json
Content-Length: ...
{
"account": {
"account_number": 12345,
"balance": {
"currency": "usd",
"value": -25.00
},
"links": {
"deposit": "/accounts/12345/deposit"
}
}
}
Зараз доступне лише одне посилання: внести більше грошей. У поточному "'стані' інші посилання недоступні. Звідси термін "Двигун стану додатку". Можливі дії залежать від стану ресурсу.
Клієнту не потрібно розуміти кожен тип медіа та механізм зв'язку, запропонований сервером. Здатність розуміти нові типи медіа може бути набута клієнтом під час виконання запиту до сервера.[3]
Витоки
Обмеження HATEOAS є невід'ємною частиною "єдиного інтерфейсу" REST, визначеного в докторській дисертації Роя Філдінга.[3] Філдінг далі описав цю концепцію у своєму блозі.[1]
Філдінг пояснює, що мета суворості цього та інших обмежень REST - "розробка програмного забезпечення в масштабах десятиліть: кожна деталь покликана сприяти довговічності програмного забезпечення та незалежній еволюції. Багато обмежень прямо протиставляються короткотерміновій ефективності. На жаль, люди досить хороші в короткостроковому дизайні додатків і зазвичай жахливі при довгостроковому дизайні."[1]
Посилання
- Fielding, Roy T. (20 жовтня 2008). REST APIs must be hypertext-driven. Процитовано 20 травня 2010.
- "The RESTful CookBook"
- Fielding, Roy Thomas (2000). Representational State Transfer (REST). Architectural Styles and the Design of Network-based Software Architectures (PhD). University of California, Irvine.