API GraphQL con C++: guía paso a paso para crear un servidor

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

API GraphQL con C++: tutorial paso a paso



GraphQL es un lenguaje de consultas para API, desarrollado por Facebook. A diferencia de REST, permite al cliente solicitar solo los datos que necesita, lo que reduce el volumen de información transferida y acelera el funcionamiento de las aplicaciones. En este tutorial crearemos un servidor GraphQL simple en C++ utilizando la biblioteca graphql-cpp. Aprenderá cómo definir un esquema, escribir resolvers y procesar consultas y mutaciones.



¿Qué es GraphQL y por qué C++?



GraphQL proporciona un único punto final para todas las consultas. Los conceptos principales son:

  • Esquema (Schema) — descripción de los tipos de datos disponibles y las operaciones (consultas, mutaciones, suscripciones).
  • Consultas (Queries) — operaciones de lectura de datos.
  • Mutaciones (Mutations) — operaciones de escritura/modificación de datos.
  • Resolvers — funciones que devuelven datos para cada campo.

C++ es un lenguaje potente para sistemas de alta carga. El uso de GraphQL con C++ permite crear API eficientes y escalables. La biblioteca graphql-cpp proporciona una interfaz conveniente para la integración.



Instalación y configuración del proyecto



Para trabajar necesitaremos:

  • Compilador C++17 (por ejemplo, g++ o MSVC).
  • Biblioteca graphql-cpp (instalación mediante vcpkg o compilación desde el código fuente).
  • Servidor HTTP (usaremos cpp-httplib por simplicidad).


Instalación mediante vcpkg

vcpkg install graphql-cppvcpkg install cpp-httplib


Estructura del proyecto

Cree los archivos:

  • main.cpp — punto de entrada y servidor HTTP.
  • schema.hpp — definición del esquema GraphQL.
  • resolvers.hpp — implementación de los resolvers.
  • CMakeLists.txt — configuración de compilación.


Definición del esquema GraphQL



Crearemos un esquema simple para gestionar una lista de usuarios. El tipo User contiene los campos id, name y email. Consultas: users (lista de todos los usuarios) y user(id: ID!) (un usuario). Mutación: addUser(name: String!, email: String!): User.



En el archivo schema.hpp:

#ifndef SCHEMA_HPP#define SCHEMA_HPP

#include <graphqlcpp/GraphQLSchema.h>

using namespace graphqlcpp;

// Definimos el tipo Userauto userType = std::make_shared<ObjectType>( "User", { {"id", Type::NonNull(Type::ID)}, {"name", Type::NonNull(Type::String)}, {"email", Type::NonNull(Type::String)} });

// Definimos Queryauto queryType = std::make_shared<ObjectType>( "Query", { {"users", Type::List(Type::NonNull(userType))}, {"user", Type::NonNull(userType), {{"id", Type::NonNull(Type::ID)}}} });

// Definimos Mutationauto mutationType = std::make_shared<ObjectType>( "Mutation", { {"addUser", Type::NonNull(userType), { {"name", Type::NonNull(Type::String)}, {"email", Type::NonNull(Type::String)} }} });

// Armamos el esquemaauto schema = std::make_shared<Schema>(queryType, mutationType);

#endif // SCHEMA_HPP


Implementación de los resolvers



Los resolvers son funciones que devuelven datos para cada campo. En nuestro ejemplo, los datos se almacenarán en un vector global. En el archivo resolvers.hpp:



#ifndef RESOLVERS_HPP#define RESOLVERS_HPP

#include <vector>#include <string>#include <graphqlcpp/Resolvers.h>

using namespace graphqlcpp;

struct User { std::string id; std::string name; std::string email;};

std::vector<User> users = { {"1", "

Blogs

Book Recommendations