En aquest tema, aprendrem com connectar un servidor GraphQL a una base de dades. Això és essencial per a qualsevol aplicació que necessiti emmagatzemar i recuperar dades de manera eficient. Explorarem els conceptes bàsics de la connexió a bases de dades, utilitzant exemples pràctics amb Node.js i una base de dades SQL (PostgreSQL) i NoSQL (MongoDB).
Objectius d'aprenentatge
- Entendre com configurar una connexió a una base de dades des d'un servidor GraphQL.
- Aprendre a utilitzar llibreries populars per a la connexió a bases de dades SQL i NoSQL.
- Implementar consultes bàsiques per recuperar i modificar dades.
Requisits previs
- Coneixements bàsics de Node.js.
- Familiaritat amb els conceptes de bases de dades SQL i NoSQL.
- Haver completat els mòduls anteriors del curs.
- Configuració del projecte
Instal·lació de dependències
Primer, necessitem instal·lar les dependències necessàries. Utilitzarem pg per a PostgreSQL i mongoose per a MongoDB.
Configuració de PostgreSQL
- Instal·lació de PostgreSQL: Si no tens PostgreSQL instal·lat, pots descarregar-lo des de aquí.
- Creació d'una base de dades: Un cop instal·lat, crea una base de dades.
Configuració de MongoDB
- Instal·lació de MongoDB: Si no tens MongoDB instal·lat, pots descarregar-lo des de aquí.
- Creació d'una base de dades: MongoDB crea automàticament una base de dades quan s'insereix el primer document.
- Connexió a PostgreSQL
Configuració de la connexió
Crea un fitxer db.js per gestionar la connexió a PostgreSQL.
// db.js
const { Pool } = require('pg');
const pool = new Pool({
user: 'yourusername',
host: 'localhost',
database: 'mydatabase',
password: 'yourpassword',
port: 5432,
});
module.exports = pool;Exemple de consulta
Ara, podem utilitzar aquesta connexió en els nostres resolvers de GraphQL.
// resolvers.js
const pool = require('./db');
const resolvers = {
Query: {
users: async () => {
const res = await pool.query('SELECT * FROM users');
return res.rows;
},
},
};
module.exports = resolvers;
- Connexió a MongoDB
Configuració de la connexió
Crea un fitxer db.js per gestionar la connexió a MongoDB.
// db.js
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/mydatabase', {
useNewUrlParser: true,
useUnifiedTopology: true,
});
const db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', () => {
console.log('Connected to MongoDB');
});
module.exports = mongoose;Definició d'un model
Definim un model per a la col·lecció users.
// models/User.js
const mongoose = require('mongoose');
const userSchema = new mongoose.Schema({
name: String,
email: String,
});
const User = mongoose.model('User', userSchema);
module.exports = User;Exemple de consulta
Ara, podem utilitzar aquest model en els nostres resolvers de GraphQL.
// resolvers.js
const User = require('./models/User');
const resolvers = {
Query: {
users: async () => {
return await User.find();
},
},
};
module.exports = resolvers;Exercicis pràctics
Exercici 1: Connexió a PostgreSQL
- Configura una connexió a PostgreSQL en un nou projecte.
- Crea una taula
productsamb les columnesid,nameiprice. - Implementa una consulta GraphQL per recuperar tots els productes.
Exercici 2: Connexió a MongoDB
- Configura una connexió a MongoDB en un nou projecte.
- Crea un model
Productamb els campsnameiprice. - Implementa una consulta GraphQL per recuperar tots els productes.
Solucions
Solució a l'Exercici 1
-- Crea la taula products CREATE TABLE products ( id SERIAL PRIMARY KEY, name VARCHAR(100), price NUMERIC );
// resolvers.js
const pool = require('./db');
const resolvers = {
Query: {
products: async () => {
const res = await pool.query('SELECT * FROM products');
return res.rows;
},
},
};
module.exports = resolvers;Solució a l'Exercici 2
// models/Product.js
const mongoose = require('mongoose');
const productSchema = new mongoose.Schema({
name: String,
price: Number,
});
const Product = mongoose.model('Product', productSchema);
module.exports = Product;// resolvers.js
const Product = require('./models/Product');
const resolvers = {
Query: {
products: async () => {
return await Product.find();
},
},
};
module.exports = resolvers;Conclusió
En aquesta secció, hem après com connectar un servidor GraphQL a bases de dades SQL i NoSQL. Hem vist exemples pràctics de com configurar les connexions i implementar consultes bàsiques. Aquest coneixement és fonamental per desenvolupar aplicacions GraphQL que necessiten interactuar amb bases de dades per emmagatzemar i recuperar dades. En el següent tema, explorarem estratègies de recuperació de dades per optimitzar el rendiment de les nostres aplicacions.
Curs de GraphQL
Mòdul 1: Introducció a GraphQL
- Què és GraphQL?
- GraphQL vs REST
- Configuració d'un servidor GraphQL
- Conceptes bàsics de l'esquema de GraphQL
Mòdul 2: Conceptes bàsics
Mòdul 3: Disseny avançat d'esquemes
Mòdul 4: Treballant amb dades
- Connexió a una base de dades
- Estratègies de recuperació de dades
- Agrupació i emmagatzematge en memòria cau
- Gestió d'errors
Mòdul 5: Rendiment i seguretat
Mòdul 6: Eines i ecosistema
Mòdul 7: Proves i desplegament
- Proves unitàries de resolvers
- Proves d'integració
- Integració contínua
- Desplegament de servidors GraphQL
