Express para GraphQL
Express se puede usar como servidor para gestionar GraphQL, integrando bibliotecas como graphql-http o Apollo Server. Esto permite combinar la flexibilidad de GraphQL con la simplicidad de Express.
Ejemplo básico con Apollo Server:
import express from "express";
import { ApolloServer } from "@apollo/server";
import { expressMiddleware } from "@apollo/server/express4";
import bodyParser from "body-parser";
import cors from "cors";
// Definir esquema (types + queries + mutations)
const typeDefs = `
type User {
id: ID!
name: String!
email: String!
}
type Query {
users: [User]
user(id: ID!): User
}
type Mutation {
addUser(name: String!, email: String!): User
}
`;
// Datos de ejemplo
let users = [
{ id: "1", name: "Ana", email: "ana@mail.com" },
{ id: "2", name: "Luis", email: "luis@mail.com" },
];
// Resolvers (cómo responder a cada consulta)
const resolvers = {
Query: {
users: () => users,
user: (_, { id }) => users.find(u => u.id === id),
},
Mutation: {
addUser: (_, { name, email }) => {
const newUser = { id: String(users.length + 1), name, email };
users.push(newUser);
return newUser;
},
},
};
// Crear servidor Apollo
const server = new ApolloServer({ typeDefs, resolvers });
await server.start();
const app = express();
app.use("/graphql", cors(), bodyParser.json(), expressMiddleware(server));
app.listen(4000, () => {
console.log("Servidor GraphQL en http://localhost:4000/graphql");
});
Abre http://localhost:4000/graphql en un navegador.
Ejecuta la consulta:
{
usuarios {
id
name
}
}
La API devuelve exactamente los campos id y name de cada usuario en formato JSON.