В чем выгода гипермедиа (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
Тиаго Сильва

Ответы:

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. Отключение загрузки контента в другие службы. Гипермедиа необходима при разгрузке контента на другие серверы (например, CDN).

  6. Управление версиями со ссылками: Hypermedia помогает управлять версиями API.

  7. Несколько реализаций одного и того же сервиса. Гипермедиа является необходимостью, когда существует несколько реализаций одного и того же сервиса (и один клиент должен получить доступ к нескольким из них).

Вы можете найти подробное объяснение этих пунктов здесь: http://soabits.blogspot.no/2013/12/selling-benefits-of-hypermedia.html

Йорн Вильдт
источник
> Отключение загрузки контента в другие службы: гипермедиа необходима при выгрузке контента на другие серверы (например, CDN). Нет, это не так. Вы можете просто сохранить те же ссылки и использовать CDN.
Бруно Коста