web-dev-qa-db-fra.com

Spring HATEOAS vs Spring Data Rest

La question est, quelle est la différence entre Spring HATEOAS et Spring Data Rest?

Je pense que les deux peuvent faire la même chose, et Spring Data Rest (dans le cadre de Spring Data) semble un peu plus vivant.

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

Quand utiliseriez-vous l'un ou l'autre?

36
HighTML

Spring HATEOAS fournit des abstractions communes (modèles de représentation, une classe Link, API permettant de créer des liens pointant vers des contrôleurs Spring MVC, etc.) afin de faciliter la construction d’API REST pilotées par hypermédia avec Spring MVC en général. Ainsi, vous pouvez l'utiliser avec Spring MVC pour créer manuellement ces services.

Spring Data REST utilise Spring HATEOAS pour exposer automatiquement les ressources des entités gérées par les référentiels Spring Data et exploite les aspects hypermédia pour la pagination, les entités de liaison, etc. Elle couvre ainsi le cas d'utilisation à 80% des éléments de base et vous permet de sélectionner ajouter des processus plus complexes en utilisant ultérieurement des contrôleurs mis en œuvre manuellement.

Pour vous faire une idée, n'hésitez pas à jeter un coup d'œil au projet exemple Spring RESTBucks . Le traitement des instances Order est entièrement effectué par Spring Data REST (avec quelques ajustements mineurs pour l'implémentation de contraintes métier). L'ensemble de la logique de paiement est ensuite implémenté manuellement, car le processus ne relève pas de la catégorie CRUD, car nous devons en réalité mettre en œuvre certaines étapes et un protocole pour exécuter la commande. Encore une fois, le code est ici , un diaporama avec quelques visuels supplémentaires peut être trouvé sur speakerdeck.com .

71
Oliver Drotbohm

HATEOAS représente Hypermedia en tant que moteur de l'état de l'application et constitue l'un des principaux atouts de REST. Fondamentalement, le point clé consiste à utiliser des liens sur la représentation de votre ressource pour mapper la transition valide de l'état de l'application. Dans ce cas, le fournisseur de services fournira le prochain état correct valide de votre application accessible via le lien. Spring HATEOAS est le projet Spring destiné à vous aider à créer les contrôles Hymeridia dans votre ressource. C’est un projet intégré à Spring MVC et vous pouvez penser que l’extension Spring MVC permet de créer un véritable RESTFull WS avec un très bon support pour augmenter le niveau de votre formulaire de service CRUD (niveau 2 de maturité dans le modèle de Richardson) à un niveau supérieur. Hypermédia conscient (niveau 3 de maturité dans le modèle de Richardson). Spring Data Rest, d’autre part, est un très beau projet qui utilise Spring HATEOAS comme brique de base, pour vous fournir une couche de référentiel utilisable à l’aide de restwull. Dans proctis, l’aide au projet a permis de réduire le code boliporlent classique afin d’exposer la couche de votre référentiel en tant que point de terminaison stable. Nous pouvons dire que c’était la raison pour laquelle les projets étaient très différents. Avec Spring HATEOAS, vous disposiez d'un framework utilisable pour tout type de point de terminaison, alors qu'avec Spring Data, vous disposiez d'un projet Spring, qui fournit déjà un point de terminaison et un framework pour le personnaliser.

J'espère que ces réflexions pourront vous aider à clarifier la différence entre les deux projets et à mieux comprendre comment utiliser l'un ou l'autre

1
Valerio Vaudi

J'ai choisi d'utiliser les deux dans mon projet. Une couche de contrôleurs a été construite avec Spring Data REST. L’autre couche de contrôleurs était @ RestController (spring-wevmvc). Dans cette couche, j'ai utilisé Spring HATEOAS pour créer la page personnalisée ____. (Le processus était: 1.créer Pageable Pageable pageable = new PageRequest 2. créer une nouvelle page Page<FooDt> page = new PageImpl<FooDt> 3.créer PagedResources PagedResources<Resource<FooDt>> resource = fooAssembler.toResource(page, fooAssembler) après ce processus en utilisant ObjectMapper de Jackson retourner json.

La solution que j’ai trouvée pour charger les deux technologies dans le contexte utilise deux variables de DispatcherServlet . Sinon, Spring Data Rest prend le contrôle et il n’est pas possible d’utiliser d’autres contrôleurs. (De cette façon, j'avais deux domaines dans mon application: un pour Data Rest et un pour webmvc + HATEOS).

0
Hezi Schrager