MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment exposer une nouvelle méthode REST via un référentiel Spring Data MongoDB avec des métadonnées ALPS/HATEOAS ?

tl;dr

Il aura besoin d'implémentations personnalisées pour le référentiel et le contrôleur.

Détails

Nous devons nous assurer de ne pas nous perdre dans tous les différents aspects que vous mentionnez ici. Je vais essayer de démêler les branches de bas en haut :

Exécuter des scripts MongoDB

En tant que documentation de référence sur l'exécution de scripts avec MongoDB états (et vous avez déjà découvert), la fonctionnalité est fournie by MongoTemplate ScriptOperations de . Ainsi, comment utiliser cette API devrait être clair. Consultez la Javadoc pour plus d'informations.

Exécuter des scripts via les référentiels Spring Data

La prochaine chose que vous demandez est d'exécuter ces scripts via l'abstraction du référentiel. Pour ne pas jeter le bébé avec l'eau du bain ici, assurez-vous que nous comprenons le but d'un référentiel :il simule une collection de racines agrégées et y accède sans exposer le mécanisme de persistance sous-jacent . Exposer des types comme ExecutableMongoScript sur le référentiel briserait ce dernier trait. Ainsi, l'approche correcte ici consiste à créer une implémentation personnalisée pour cette fonctionnalité particulière, comme décrit dans le documentation de référence sur les référentiels Spring Data .

Exposer la fonctionnalité via REST

Je suppose que vous faites référence à la fonctionnalité de Spring Data REST pour exposer une ressource dédiée à la méthode de requête du référentiel dans votre question. Actuellement, Spring Data REST n'expose automatiquement que les méthodes de requête déclaratives, principalement parce qu'il est difficile de raisonner sur la bonne méthode HTTP à prendre en charge pour les implémentations personnalisées, car nous ne pouvons pas deviner ce qui se passe à l'intérieur de la méthode.

La méthode recommandée pour exposer les méthodes de requête de référentiel personnalisées à l'aide d'un contrôleur personnalisé avec un @RequestMapping en fonction de votre objectif, en appelant le référentiel et en utilisant un PersistentEntityResourceAssembler injectable dans la méthode du gestionnaire pour produire un PersistentEntityResource pour revenir.