Яка користь від гіпермедіа (HATEOAS)?


17

Я не розумію переваги HATEOAS для API, призначених для використання програмами (на відміну від людей, які безпосередньо переглядають ваш API). Звичайно, клієнт не прив’язаний до схеми URL-адрес, але він прив’язаний до схеми даних, яка є тим самим, що я думаю.

Наприклад, припустимо, що я хочу переглянути товар у замовлення, припустимо, я вже виявив URL-адресу замовлення чи знаю її вже.

HATEOAS:

order = get(orderURL);
item = get(order.itemURL[5]);

не HATEOAS:

order = get(orderURL);
item = get(getItemURL(order,5));

У першій моделі я повинен знати факт, що в об’єкта замовлення є поле itemURL. У другій моделі я повинен знати, як побудувати URL-адресу елемента. В обох випадках я мушу щось «знати» достроково, і що, власне, HATEOAS робить для мене?


1
get(orderURL);повинен вам сказати the fact that the order object has an itemURL field.
Янніс

Коли ви пишете клієнтську програму, ви повинні заздалегідь знати, що таке поле.
Темп


8
Як програма повинна отримувати товар із замовлення, якщо програма навіть не знає, що у замовлення є товар? Discovery працює для ручного перегляду, але не для автоматизованих програм.
Темп

Сам чоловік говорив про це тут: roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven
Thiago Silva

Відповіді:


6

Одна відмінність полягає в тому, що схема, сподіваємось, є стандартом або, принаймні, може бути використана іншими.

Наприклад, скажімо, ви використовуєте API Twitter і ви хочете також підтримувати StatusNet (або замість цього). Оскільки вони використовують ту саму модель даних, що і Twitter, якщо API слідує за HATEOAS, вам зараз просто потрібно змінити основну URL-адресу. Якщо це не так, тепер вам доведеться змінити кожну окрему URL-адресу з коду.

Звичайно, якщо вам потрібно змінити код, щоб все-таки поставити URL-адресу вхідної служби служби, це може здатися не таким корисним. Це дійсно світить, якщо ця URL-адреса динамічно вставлена; наприклад, якщо ви будували таку службу, як Twillio, яка взаємоділа б із власним API користувача.


Це цікавий момент, який я не вважав.
Темп

@YannisRizos: Хм, я не бачу, де я сказав, що HATEOAS - це стандарт. Я сказав, що схема "(дані), мабуть, є стандартом". У термінології REST це тип медіа.
Андре Парамеш

У другому читанні ви абсолютно праві.
янніс

2
Так, якщо припустити, що імена відносних посилань однакові. Але говорячи загалом, а не лише на конкретному прикладі, який ви згадуєте, кожен програміст у світі не обов'язково вибирає однакові імена для подібних або рівнозначних дій. Ця вигода полягає в тому, що програмісти погоджують загальну назву та параметри інтерфейсу.
derloopkat

8
  1. API, що досліджується: це може здатися тривіальним, але не варто недооцінювати потужність досліджуваного API. Можливість перегляду даних значно полегшує розробникам клієнтів побудову ментальної моделі API та його структур даних.

  2. Вбудована документація: використання URL-адрес як зв'язкових зв’язків може вказувати розробникам клієнтів на документацію.

  3. Проста логіка клієнта: Клієнт, який просто слідує за URL-адресами, а не створювати їх сам, повинен бути простішим у реалізації та підтримці.

  4. Сервер приймає право власності на URL-структури: Використання гіпермедіа видаляє чітко зашифровані знання клієнта про структури URL-адрес, які використовується сервером.

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

  6. Версія з посиланнями: Hypermedia допомагає версії API.

  7. Кілька впроваджень однієї і тієї ж послуги: Hypermedia - це необхідність, коли існує кілька реалізацій однієї послуги (і одному клієнту потрібно отримати доступ до більш ніж однієї з них).

Поглиблене пояснення цих пунктів можна знайти тут: http://soabits.blogspot.no/2013/12/selling-benefits-of-hypermedia.html


> Вимкнення завантаження вмісту для інших служб: Hypermedia необхідна, коли ви завантажуєте вміст на інші сервери (наприклад, CDN). Ні це не так. Ви можете просто зберігати ті самі посилання та використовувати CDN.
Бруно Коста
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.