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

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


person HighTML    schedule 22.10.2013    source источник


Ответы (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.

person Oliver Drotbohm    schedule 22.10.2013
comment
Я бы добавил, что Spring Data REST явно зависит от Spring HATEOAS: github.com/spring-projects/spring-data-rest/blob/ - person David Riccitelli; 16.09.2015
comment
Разве не об этом ясно сказано во втором абзаце? Spring Data REST использует Spring HATEOAS… - person Oliver Drotbohm; 16.09.2015
comment
Да, безусловно, я давал ссылку. И еще мне нравятся ваши скринкасты :-) - person David Riccitelli; 17.09.2015

Я решил использовать их обоих в своем проекте. Один уровень контроллеров был построен с помощью Spring Data REST. Другой уровень контроллеров - @ RestController (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).

person Hezi Schrager    schedule 12.02.2015
comment
В более поздних версиях SDR вы можете использовать @BasePathAwareController или @RepositoryRestController для интеграции ваших пользовательских контроллеров MVC с SDR, не прибегая к использованию других DispatcherServlet. - person Marc Zampetti; 19.01.2016

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

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

person Valerio Vaudi    schedule 15.03.2016