Я не понимаю преимущества 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?
web-development
rest
аллюр
источник
источник
get(orderURL);
должен сказать вамthe fact that the order object has an itemURL field
.Ответы:
Одно из отличий состоит в том, что схема, как мы надеемся, является стандартом или, по крайней мере, может использоваться другими.
Например, предположим, что вы используете API Twitter и хотите тоже поддерживать StatusNet (или вместо него). Поскольку они используют ту же модель данных, что и Twitter, если API следует HATEOAS, вам просто нужно изменить основной URL. Если это не так, теперь вы должны изменить каждый URL-адрес из кода.
Конечно, если вам все равно нужно изменить код, чтобы указать URL-адрес точки входа службы, это может показаться не очень полезным. Это действительно хорошо, если этот URL-адрес вставлен динамически; например, если вы создавали сервис, подобный Twillio, который взаимодействовал бы с собственным API пользователя.
источник
Изучаемый API: Это может показаться тривиальным, но не стоит недооценивать возможности исследуемого API. Возможность просмотра данных значительно упрощает разработку клиентской модели API-интерфейса и его структур данных.
Встроенная документация. Использование URL-адресов в качестве отношений ссылок может указывать разработчикам клиента на документацию.
Простая клиентская логика: клиент, который просто следует URL-адресам, а не создает их сам, должен быть проще в реализации и обслуживании.
Сервер становится владельцем структур URL: использование гипермедиа устраняет жестко закодированные знания клиента о структурах URL, используемых сервером.
Отключение загрузки контента в другие службы. Гипермедиа необходима при разгрузке контента на другие серверы (например, CDN).
Управление версиями со ссылками: Hypermedia помогает управлять версиями API.
Несколько реализаций одного и того же сервиса. Гипермедиа является необходимостью, когда существует несколько реализаций одного и того же сервиса (и один клиент должен получить доступ к нескольким из них).
Вы можете найти подробное объяснение этих пунктов здесь: http://soabits.blogspot.no/2013/12/selling-benefits-of-hypermedia.html
источник