Подтвердить что ты не робот

Spring HATEOAS против Spring Data Rest

Вопрос в том, какая разница между Spring HATEOAS и Spring Data Rest?

Я чувствую, что оба могут сделать то же самое, и Spring Data Rest (как часть Spring Data) кажется немного более живым.

https://github.com/spring-projects/spring-hateoas https://github.com/spring-projects/spring-data-rest

Когда вы будете использовать один или другой?

4b9b3361

Ответ 1

Spring HATEOAS предоставляет общие абстракции (репрезентативные модели, класс Link, API для создания ссылок, указывающих на контроллеры Spring MVC и т.д.), Чтобы упростить построение управляемых гипермедиа REST API с помощью Spring MVC в целом. Таким образом, вы можете использовать его вместе со Spring MVC для создания этих сервисов вручную.

Spring Data REST использует Spring HATEOAS для автоматического раскрытия ресурсов для сущностей, управляемых репозиториями Spring Data, и использует аспекты гипермедиа для разбивки на страницы, связывания сущностей и т.д. Таким образом, он охватывает вариант использования 80% для базовых компонентов и позволяет выборочно добавлять более сложные процессы. с помощью реализованных вручную контроллеров позже.

Чтобы почувствовать это, не стесняйтесь взглянуть на пример проекта Spring RESTBucks. Обработка экземпляров Order полностью выполняется Spring Data REST (с небольшими изменениями для реализации бизнес-ограничений). Затем вся логика платежей реализуется вручную, поскольку процесс не попадает в категорию CRUD, поскольку нам фактически необходимо реализовать определенные шаги и протокол для выполнения заказа. Опять же, код здесь, слайд-колоду с некоторыми дополнительными визуальными эффектами можно найти на сайте speakerdeck.com.

Ответ 2

HATEOAS означает Hypermedia как механизм состояния приложения и является одним из ключевых элементов REST. В основном ключевой момент состоит в том, чтобы использовать ссылки в представлении вашего ресурса для отображения действительного перехода состояния приложения. В этом случае это будет поставщик услуг, который обеспечит правильное правильное состояние вашего приложения, доступное по ссылке. Spring HATEOAS - это проекты Spring для помощи в создании элементов управления Hymeridia в вашем ресурсе. Это проект, интегрированный с Spring MVC, и вы можете думать как расширение Spring MVC для создания реального RESTFull WS с очень хорошей поддержкой для повышения уровня вашей служебной формы CRUD (уровень 2 зрелости в Richardson модель) до уровня Hypermedia (уровень 3 зрелости в модели Ричардсона). Spring Data Rest на других руках - очень приятный проект, который использует Spring HATEOAS в качестве основного кирпича, чтобы дать вам слой репозитория, который можно использовать как restfull ws. В proctis проект помогает уменьшить классический код с более высоким коэффициентом, чтобы обеспечить уровень вашего репозитория в качестве конечной точки restfull. Мы можем сказать, что это была идея разных проектов. С помощью Spring HATEOAS у вас была структура, пригодная для любой конечной точки отдыха, с остатком данных Spring у вас был проект Spring, который уже предоставляет конечную точку и среду для ее настройки.

Я надеюсь, что эти размышления помогут вам прояснить разницу между двумя проектами и лучше понять, как использовать один или другой

Ответ 3

Я решил использовать оба из них в моем проекте. Один слой контроллеров был построен с Spring Data REST. Другим уровнем контроллеров был @RestController (spring -wevmvc). В этом слое я использовал Spring HATEOAS для создания настраиваемых страниц. (Процесс был: 1.Создание страницы Pageable pageable = new PageRequest 2. создание новой страницы Page<FooDt> page = new PageImpl<FooDt> 3.creating PagedResources PagedResources<Resource<FooDt>> resource = fooAssembler.toResource(page, fooAssembler) после этого процесса с использованием Jackson ObjectMapper для возврата json.

Решение, которое я нашел для загрузки в контекст обеих технологий, - это использование двух DispatcherServlet. В противном случае, Spring Data Rest получает контроль и нет возможности использовать другие контроллеры. (Таким образом, у меня было два домена в моем приложении: один для Data Rest и один для webmvc + HATEOS).