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

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

3 ответа

Решение

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.

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

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

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

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

Другие вопросы по тегам