Останнім часом я читав про Hypermedia як двигун стану додатків (HATEOAS), обмеження, яке, як стверджується, робить веб-API "справді РЕСТЕВНІМ". Він зводиться до того, що в основному включає в себе посилання на кожну відповідь на можливі переходи, які ви можете зробити з поточного стану.
Дозвольте проілюструвати, на чому ґрунтується HATEOAS, і, будь-ласка, виправте мене, якщо я щось пропустив.
/
GET: {
"_links": {
"child": [
{ "href": "http://myapi.com/articles", "title": "articles" }
]
}
}
/articles?contains=HATEOAS
GET: {
"_items": [
{ "uri": "http://myapi.com/articles/0", "title": "Why Should I Care About HATEOAS?" },
{ "uri": "http://myapi.com/articles/1", "title": "HATEOAS: Problem or Solution?" }
],
"_links": {
"self": { "href": "http://myapi.com/articles", "title": "articles" },
"parent": { "href": "http://myapi.com/", "title": "home" }
}
}
POST: {
"title": "A New Article",
"body": "Article body",
"tags": [ "tag1", "tag2" ]
}
/articles/0
GET: {
"title": "Why Should I Care About HATEOAS?",
"body": "Blah blah blah"
"tags": [ "REST", "HATEOAS" ],
"_links": {
"self": { "href": "http://myapi.com/articles/0", "title": "article" },
"parent": { "href": "http://myapi.com/articles", "title": "articles" }
}
}
Стверджується, що HATEOAS надає дві основні переваги:
Весь сервіс можна знайти, починаючи з кореневого URI, документація більше не потрібна.
Клієнт відключається від сервера, який тепер може вільно змінювати структуру URI. Це виключає необхідність версій API.
Але на мій погляд, сервіс набагато більше, ніж його структура URI. Щоб ефективно використовувати його, вам також потрібно знати:
- які параметри запиту ви можете використовувати та їх можливі значення
- структура JSON / XML / будь-яких документів, які потрібно надіслати у ваших запитах POST / PATCH / тощо
- структура відповіді, що надсилається сервером
- можливі помилки, які можуть виникнути
- ...
Виходячи з вищесказаного, HATEOAS вирішує лише невелику частку проблем виявлення та зв'язку. Вам все одно потрібно документувати вищевказані чотири аспекти, і клієнти все ще будуть сильно пов'язані з сервером через них. Щоб уникнути злому клієнтів, вам все-таки потрібно версію свого API.
Єдина перевага, яку він надає, це те, що ви можете змінити структуру URL-адреси більш-менш вільно (до речі, що сталося з принципом "Прохолодні URI не змінюються" ?). Чи правильно я розумію?