Conexión de Base de Datos y Consultas en GraphQL con SQLite
Clase 12 de 24 • Curso de GraphQL con Node.js
Resumen
¿Cómo conectar la capa de servicios a la base de datos?
Para establecer la conexión con la base de datos y gestionar datos reales en nuestra aplicación, utilizamos SQLite. Esta se encuentra definida en la capa de servicios, donde se implementa el modelo de negocio y se realizan las consultas necesarias. Tener la estructura de archivos bien organizada facilita este proceso.
¿Cómo se declaran los servicios?
En el archivo Product Resolvers
, gestionamos la declaración del servicio de productos. Seguir el ejemplo de las rutas es útil. En las rutas, cada endpoint tiene validaciones y servicios específicos, como el de productos. Se necesita una instancia de este servicio:
const productService = new ProductService();
Este servicio contiene la lógica necesaria para gestionar los productos. Por ejemplo, para obtener un producto, se utilizan los parámetros de entrada y se realiza una consulta mediante findOne
.
¿Cómo resolver queries a la base de datos?
El uso de GraphQL permite especificar qué datos exactos queremos recuperar. Al hacer una query, podemos solicitar solo los campos necesarios. Por ejemplo, para obtener una lista de productos:
query {
getProduct {
id
name
description
price
}
}
Así se obtiene una lista de productos con los campos requeridos, directamente desde la base de datos.
¿Cómo gestionar peticiones y errores en GraphQL?
Al resolver las peticiones en GraphQL, es crucial manejar adecuadamente los errores para asegurar un feedback claro al usuario.
¿Qué ocurre cuando un producto no se encuentra?
Cuando solicitamos un producto con un ID que no existe, la aplicación responde con un mensaje de error claro, gracias a la librería Boom. Esta biblioteca facilita el manejo de errores HTTP, y aunque fue diseñada para REST API, se adapta a GraphQL. Al no encontrar el producto, Boom devuelve un mensaje de error "Product not-found" y un código 404:
async findOne(id) {
const product = await db.Product.findByPk(id);
if (!product) {
throw Boom.notFound('Product not-found');
}
return product;
}
Esta estructura permite que Apollo Server interprete y reutilice los errores, generando una respuesta consistente en GraphQL.
¿Cómo se verifican estas respuestas en herramientas de pruebas?
Al usar herramientas como Insomnia para verificar las respuestas, se puede observar cómo, al enviar una petición con un ID que no existe, GraphQL devuelve un mensaje similar al de una REST API, mostrando que la integración es eficiente y adaptable.
Explorando Apollo Server y el manejo de errores
Apollo Server ha demostrado ser capaz de integrarse con mensajes de error estándar, combinando sin esfuerzo arquitecturas REST y GraphQL. Esto ofrece una flexibilidad valiosa para los desarrolladores, permitiendo la reutilización de lógica existente y asegurando un flujo de trabajo consistente.
¿Cómo aprovechar estas características?
Una práctica recomendada es utilizar siempre librerías populares y probadas para el manejo de errores en nuestras aplicaciones, garantizando que los mensajes sean claros y que el comportamiento sea consistente en todas las tecnologías usadas. Esto demuestra un enfoque adaptable y centrado en el usuario al construir aplicaciones modernas.
Con este conocimiento, estamos listos para seguir ampliando las capacidades de nuestra aplicación, asegurando una integración sólida entre servicios y bases de datos. ¡Continúa explorando y aprendiendo para crear aplicaciones excepcionales!