Introducció a GraphQL
GraphQL és un llenguatge de consulta per a APIs i un entorn d'execució per a les consultes amb les dades existents. Proporciona una manera més eficient, potent i flexible de treballar amb APIs en comparació amb REST.
Conceptes Clau de GraphQL
- Schema: Defineix la forma de les dades i les operacions disponibles.
- Query: Una consulta que permet obtenir dades.
- Mutation: Una operació que permet modificar dades.
- Resolver: Una funció que resol una consulta o mutació.
Configuració de GraphQL en un Projecte Node.js
Instal·lació de les Dependències Necessàries
Per començar a utilitzar GraphQL en un projecte Node.js, necessitarem instal·lar algunes dependències:
Configuració Bàsica
- Crear un fitxer
server.js:
const express = require('express');
const { graphqlHTTP } = require('express-graphql');
const { buildSchema } = require('graphql');
// Definir el schema
const schema = buildSchema(`
type Query {
hello: String
}
`);
// Definir els resolvers
const root = {
hello: () => {
return 'Hello, world!';
},
};
const app = express();
app.use('/graphql', graphqlHTTP({
schema: schema,
rootValue: root,
graphiql: true,
}));
app.listen(4000, () => console.log('Servidor en funcionament a http://localhost:4000/graphql'));Explicació del Codi
- Schema: Definim un tipus
Queryamb un camphelloque retorna una cadena de text. - Resolvers: Definim una funció
helloque retorna el text "Hello, world!". - Express: Configurem un servidor Express que utilitza
express-graphqlper gestionar les peticions a/graphql.
Definició de Schemas Complexos
Podem definir schemas més complexos amb múltiples tipus i relacions.
Exemple de Schema Complex
const schema = buildSchema(`
type Query {
user(id: ID!): User
users: [User]
}
type User {
id: ID
name: String
age: Int
}
`);Resolvers per a Schemas Complexos
const users = [
{ id: '1', name: 'Alice', age: 25 },
{ id: '2', name: 'Bob', age: 30 },
];
const root = {
user: ({ id }) => users.find(user => user.id === id),
users: () => users,
};Mutations en GraphQL
Les mutations permeten modificar dades.
Exemple de Mutation
const schema = buildSchema(`
type Query {
users: [User]
}
type Mutation {
addUser(name: String!, age: Int!): User
}
type User {
id: ID
name: String
age: Int
}
`);
let users = [
{ id: '1', name: 'Alice', age: 25 },
{ id: '2', name: 'Bob', age: 30 },
];
const root = {
users: () => users,
addUser: ({ name, age }) => {
const user = { id: `${users.length + 1}`, name, age };
users.push(user);
return user;
},
};Integració amb Bases de Dades
Podem integrar GraphQL amb bases de dades com MongoDB o SQL.
Exemple amb MongoDB
- Instal·lació de Mongoose:
- Configuració de Mongoose:
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/mydatabase', { useNewUrlParser: true, useUnifiedTopology: true });
const UserSchema = new mongoose.Schema({
name: String,
age: Number,
});
const User = mongoose.model('User', UserSchema);- Resolvers amb Mongoose:
const root = {
users: async () => await User.find(),
addUser: async ({ name, age }) => {
const user = new User({ name, age });
await user.save();
return user;
},
};Exercicis Pràctics
Exercici 1: Crear una Query per Obtenir un Usuari per Nom
- Afegir al Schema:
- Afegir al Resolver:
Exercici 2: Crear una Mutation per Actualitzar l'Edat d'un Usuari
- Afegir al Schema:
- Afegir al Resolver:
updateUserAge: async ({ id, age }) => {
const user = await User.findById(id);
user.age = age;
await user.save();
return user;
},Resum
En aquesta secció, hem après els conceptes bàsics de GraphQL i com configurar-lo en un projecte Node.js. Hem vist com definir schemas, crear resolvers, treballar amb mutations i integrar GraphQL amb bases de dades com MongoDB. Els exercicis pràctics proporcionats ajuden a reforçar els conceptes apresos i a aplicar-los en situacions reals.
Curs de Node.js
Mòdul 1: Introducció a Node.js
Mòdul 2: Conceptes Bàsics
Mòdul 3: Sistema de Fitxers i I/O
Mòdul 4: HTTP i Servidors Web
Mòdul 5: NPM i Gestió de Paquets
Mòdul 6: Framework Express.js
- Introducció a Express.js
- Configuració d'una Aplicació Express
- Middleware
- Routing en Express
- Gestió d'Errors
Mòdul 7: Bases de Dades i ORMs
- Introducció a les Bases de Dades
- Utilitzar MongoDB amb Mongoose
- Utilitzar Bases de Dades SQL amb Sequelize
- Operacions CRUD
Mòdul 8: Autenticació i Autorització
Mòdul 9: Proves i Depuració
- Introducció a les Proves
- Proves Unitàries amb Mocha i Chai
- Proves d'Integració
- Depuració d'Aplicacions Node.js
Mòdul 10: Temes Avançats
Mòdul 11: Desplegament i DevOps
- Variables d'Entorn
- Utilitzar PM2 per a la Gestió de Processos
- Desplegar a Heroku
- Integració i Desplegament Continu
