it-roy-ru.com

Spring HATEOAS vs Spring Data Rest

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

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

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

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

36
HighTML

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

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

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

71
Oliver Drotbohm

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 у вас был проект Spring, который уже предоставляет конечную точку и среду для ее настройки.

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

1
Valerio Vaudi

Я решил использовать их обоих в своем проекте. Один уровень контроллеров был построен с помощью 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).

0
Hezi Schrager