sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Cómo expongo un nuevo método REST a través de un repositorio Spring Data MongoDB con metadatos ALPS/HATEOAS?

tl;dr

Necesitará implementaciones personalizadas para el repositorio y el controlador.

Detalles

Tenemos que asegurarnos de no perdernos en todos los diferentes aspectos que mencionas aquí. Intentaré desenredar las ramas de abajo hacia arriba:

Ejecución de secuencias de comandos MongoDB

Como documentación de referencia sobre la ejecución de scripts con MongoDB estados (y ya lo descubrió), la funcionalidad es proporcionada por by MongoTemplate 's ScriptOperations . Por lo tanto, debe quedar claro cómo usar esa API. Consulte el Javadoc para obtener más información.

Ejecución de scripts a través de repositorios Spring Data

Lo siguiente que está pidiendo es ejecutar esos scripts a través de la abstracción del repositorio. Para no tirar al bebé con el agua del baño aquí, asegúrese de entender el propósito de un depósito:simula una colección de raíces agregadas y el acceso a ellas sin exponer el mecanismo de persistencia subyacente . Exponiendo tipos como ExecutableMongoScript en el repositorio rompería este último rasgo. Por lo tanto, el enfoque correcto aquí es crear una implementación personalizada para esa funcionalidad en particular, como se describe en documentación de referencia sobre repositorios Spring Data .

Exponiendo la funcionalidad a través de REST

Supongo que se refiere a la función REST de Spring Data para exponer un recurso dedicado para el método de consulta del repositorio en su pregunta. Spring Data REST actualmente solo expone métodos de consulta declarativos automáticamente, principalmente porque es difícil razonar sobre el método HTTP correcto para admitir implementaciones personalizadas, ya que no podemos adivinar lo que sucede dentro del método.

La forma recomendada de exponer métodos de consulta de repositorio personalizados usando un controlador personalizado con un @RequestMapping adaptándose a su propósito, llamando al repositorio y usando un PersistentEntityResourceAssembler inyectable en el método del controlador para producir un PersistentEntityResource para volver.