Это пятая статья в серии статей про REST API:
В этой статье вы продолжите изучать REST API и узнаете о HATEOAS.
При просмотре веб-страницы вы можете просматривать данные на странице и выполнять с ними действия.
Как насчет REST API? Как правило, когда вы запрашиваете REST ресурс, вы получаете информацию о ресурсе обратно. Как насчет отправки операций, которые вы можете сделать с ресурсом в ответе?
![](https://habrastorage.org/r/w1560/webt/1v/vp/hu/1vvphuqr-kbmc8liortkei-q69o.png)
Термин HATEOAS означает фразу «Hypermedia As The Engine Of Application State» (Гипермедиа как двигатель состояния приложения). Чтобы понять это глубже, нам сначала нужно понять значение гипермедиа. Взгляните на следующую веб-страницу:
![](https://habrastorage.org/r/w1560/webt/tq/5i/jn/tq5ijnir5utbfkikdg25xb4itno.png)
Когда браузер загружает страницу, вы определенно можете увидеть весь контент, который может предложить эта страница. Что еще более интересно, страница также позволяет вам выполнять множество действий с этими данными, например:
Теперь давайте посмотрим, как ведут себя наши REST API:
Если вы посмотрите на типичный запрос GET к RESTful серверу, такой как этот:
![](https://habrastorage.org/r/w1560/webt/bh/d5/or/bhd5or6wjb-8rn_wn0fklsazynk.png)
Запрос GET localhost:8080/users получает набор данных трех пользователей в этом случае. Отправив запрос с помощью GET localhost:8080/users/1, вы получите сведения только о первом пользователе. Как правило, когда мы выполняем запрос REST, мы получаем только данные, а не какие-либо действия с ними. Вот где HATEOAS восполняет пробел. Запрос HATEOAS позволяет вам не только отправлять данные, но и указывать связанные действия:
![](https://habrastorage.org/r/w1560/webt/wf/w3/xn/wfw3xnklhpyr5kekaqla8f0cvto.png)
Этот пример был в формате JSON. Формат XML для другого примера будет выглядеть примерно так:
![](https://habrastorage.org/r/w1560/webt/oo/cc/9e/oocc9epejnlnn5zknz3wtcsrxps.png)
Когда вы отправляете этот запрос для получения данных учетной записи, вы получаете оба:
С HATEOAS запрос на REST ресурс дает мне как данные, так и действия, связанные с данными.
Единственная самая важная причина для HATEOAS — слабая связь (loose coupling). Если потребителю службы REST необходимо жестко закодировать все URL-адреса ресурсов, он тесно связан с реализацией вашей службы. Вместо этого, если вы вернете URL-адреса, которые он может использовать для действий, он будет слабосвязанным. Нет строгой зависимости от структуры URI, так как она указана и используется в ответе. Несколько важных тем, связанных с HATEOAS:
При разработке службы RESTful необходимо указать, как возвращать данные и ссылки, соответствующие запросу. HAL — это формат, который обеспечивает простой и согласованный способ гиперссылки между ресурсами в вашем REST API. Вот пример:
![](https://habrastorage.org/r/w1560/webt/cz/7l/nq/cz7lnqx2clwstyhbfehxfps7fbo.png)
С HAL у вас есть несколько категорий представлений:
Если вам довелось использовать Spring Framework для разработки REST сервиса, то Spring HATEOAS — хороший механизм для вашего сервиса.
По этому вопросу имеется авторское видео.
В этой статье мы рассмотрели, что означает HATEOAS.
С помощью HATEOAS ответы на запросы REST возвращают не только данные, но и действия, которые можно выполнить с ресурсом.
Это помогает сделать приложения слабосвязанными.
REST + MongoDB + HATEOAS?
HATEOAS REST Services With Spring
Spring HATEOAS: Hypermedia APIs with Spring (добавлено переводчиком)
- Введение в REST API — RESTful веб-сервисы
- Различия REST и SOAP
- Разработка REST API — что такое Contract First (контракт в первую очередь)?
- Разработка REST API — что такое Code First (код в первую очередь)?
- REST API — Что такое HATEOAS?
- Рекомендации по REST API — примеры проектирования веб-сервисов на Java и Spring
В этой статье вы продолжите изучать REST API и узнаете о HATEOAS.
При просмотре веб-страницы вы можете просматривать данные на странице и выполнять с ними действия.
Как насчет REST API? Как правило, когда вы запрашиваете REST ресурс, вы получаете информацию о ресурсе обратно. Как насчет отправки операций, которые вы можете сделать с ресурсом в ответе?
![](https://habrastorage.org/webt/1v/vp/hu/1vvphuqr-kbmc8liortkei-q69o.png)
Вы изучите:
- Что такое HATEOAS?
- Почему вам нужно использовать HATEOAS?
- Когда использовать HATEOAS?
Что означает HATEOAS?
Термин HATEOAS означает фразу «Hypermedia As The Engine Of Application State» (Гипермедиа как двигатель состояния приложения). Чтобы понять это глубже, нам сначала нужно понять значение гипермедиа. Взгляните на следующую веб-страницу:
![](https://habrastorage.org/webt/tq/5i/jn/tq5ijnir5utbfkikdg25xb4itno.png)
Когда браузер загружает страницу, вы определенно можете увидеть весь контент, который может предложить эта страница. Что еще более интересно, страница также позволяет вам выполнять множество действий с этими данными, например:
- Нажатие на кнопки (зеленое «Clone» (Клонировать) или «Download» (Скачать)
- Нажатие на вкладки (например, для просмотра «Issues» (Проблемы))
- и еще несколько
Теперь давайте посмотрим, как ведут себя наши REST API:
Если вы посмотрите на типичный запрос GET к RESTful серверу, такой как этот:
![](https://habrastorage.org/webt/bh/d5/or/bhd5or6wjb-8rn_wn0fklsazynk.png)
Запрос GET localhost:8080/users получает набор данных трех пользователей в этом случае. Отправив запрос с помощью GET localhost:8080/users/1, вы получите сведения только о первом пользователе. Как правило, когда мы выполняем запрос REST, мы получаем только данные, а не какие-либо действия с ними. Вот где HATEOAS восполняет пробел. Запрос HATEOAS позволяет вам не только отправлять данные, но и указывать связанные действия:
![](https://habrastorage.org/webt/wf/w3/xn/wfw3xnklhpyr5kekaqla8f0cvto.png)
Этот пример был в формате JSON. Формат XML для другого примера будет выглядеть примерно так:
![](https://habrastorage.org/webt/oo/cc/9e/oocc9epejnlnn5zknz3wtcsrxps.png)
Когда вы отправляете этот запрос для получения данных учетной записи, вы получаете оба:
- Номер счета и данные баланса
- Ссылки, которые обеспечивают действия, чтобы сделать депозит/снятие/перевод/закрытие
С HATEOAS запрос на REST ресурс дает мне как данные, так и действия, связанные с данными.
Зачем нам нужен HATEOAS?
Единственная самая важная причина для HATEOAS — слабая связь (loose coupling). Если потребителю службы REST необходимо жестко закодировать все URL-адреса ресурсов, он тесно связан с реализацией вашей службы. Вместо этого, если вы вернете URL-адреса, которые он может использовать для действий, он будет слабосвязанным. Нет строгой зависимости от структуры URI, так как она указана и используется в ответе. Несколько важных тем, связанных с HATEOAS:
HAL — язык гипертекстовых приложений
При разработке службы RESTful необходимо указать, как возвращать данные и ссылки, соответствующие запросу. HAL — это формат, который обеспечивает простой и согласованный способ гиперссылки между ресурсами в вашем REST API. Вот пример:
![](https://habrastorage.org/webt/cz/7l/nq/cz7lnqx2clwstyhbfehxfps7fbo.png)
С HAL у вас есть несколько категорий представлений:
- Links (Ссылки): указано как комбинация
- Target (Цель) — указана в качестве URI
- Relation (Отношение) — имя
- Embedded Resources (Встроенные ресурсы): другие ресурсы, содержащиеся в данном REST ресурсе
- State (Состояние): фактические данные ресурса
Если вам довелось использовать Spring Framework для разработки REST сервиса, то Spring HATEOAS — хороший механизм для вашего сервиса.
По этому вопросу имеется авторское видео.
Резюме
В этой статье мы рассмотрели, что означает HATEOAS.
С помощью HATEOAS ответы на запросы REST возвращают не только данные, но и действия, которые можно выполнить с ресурсом.
Это помогает сделать приложения слабосвязанными.
Дополнительное чтение
REST + MongoDB + HATEOAS?
HATEOAS REST Services With Spring
Spring HATEOAS: Hypermedia APIs with Spring (добавлено переводчиком)