HATEOAS

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Hypermedia as the Engine of Application State (HATEOAS), або гіпермедіа як двигун стану додатку - є компонентом архітектури мережевих додатків REST, що відрізняє її від інших архітектур мережевих додатків.

Rest-from-get-to-hateoas-25-728.

З 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"
        }
    }
}

Відповідь містить всі можливі подальші посилання: внести депозит, зняти або переказати або закрити рахунок.

Коли інформація про обліковий запис буде отримана пізніше, рахунок буде призупинено:

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]

Посилання[ред. | ред. код]

  1. а б в Fielding, Roy T. (20 Oct 2008). REST APIs must be hypertext-driven. Процитовано 20 May 2010. 
  2. "The RESTful CookBook"
  3. а б Fielding, Roy Thomas (2000). Representational State Transfer (REST). Architectural Styles and the Design of Network-based Software Architectures (PhD). University of California, Irvine.