GraphQL API con C++: tutorial paso a paso para principiantes
GraphQL es un lenguaje de consulta moderno para API que permite a los clientes solicitar solo los datos que realmente necesitan. A diferencia de REST, donde la estructura de la respuesta es fija, GraphQL ofrece flexibilidad y control. En este tutorial, analizaremos cómo crear una API GraphQL simple en C++ desde cero. Aprenderá cómo conectar la biblioteca graphql-cpp, definir el esquema, escribir resolvers y probar consultas. El artículo está dirigido a principiantes familiarizados con los conceptos básicos de C++.
¿Por qué C++? Este lenguaje proporciona un alto rendimiento, lo cual es crítico para API con alta carga. GraphQL en C++ se utiliza a menudo en sistemas en tiempo real, motores de juegos y servicios web de alta demanda. ¡Comencemos!
Instalación y configuración del entorno
Para trabajar necesitaremos un compilador compatible con C++17 (por ejemplo, GCC 8+ o Clang 10+), CMake y la biblioteca graphql-cpp. Instalemos todo lo necesario.
Paso 1: Instalación de dependencias
En Ubuntu/Debian ejecute:
sudo apt updatesudo apt install build-essential cmake libboost-all-dev libssl-devPara macOS use Homebrew:
brew install cmake boost opensslPaso 2: Clonación de la biblioteca graphql-cpp
La biblioteca graphql-cpp es una implementación ligera de GraphQL en C++. Clone el repositorio:
git clone https://github.com/your-repo/graphql-cpp.gitcd graphql-cppmkdir build && cd buildcmake .. -DCMAKE_BUILD_TYPE=Releasemake -j4sudo make installDespués de la instalación, crearemos un nuevo proyecto. Estructura de carpetas:
my_graphql_api/├── CMakeLists.txt├── src/│ ├── main.cpp│ └── schema.cpp└── include/ └── schema.hPaso 3: Configuración de CMakeLists.txt
Cree el archivo CMakeLists.txt:
cmake_minimum_required(VERSION 3.10)project(GraphQLExample)
set(CMAKE_CXX_STANDARD 17)
find_package(graphql-cpp REQUIRED)find_package(Boost REQUIRED COMPONENTS system)
add_executable(graphql_example src/main.cpp src/schema.cpp)target_include_directories(graphql_example PRIVATE include)target_link_libraries(graphql_example graphql-cpp::graphql-cpp Boost::system)Definición del esquema GraphQL
El esquema es el núcleo de una API GraphQL. Describe los tipos de datos, consultas (queries) y mutaciones (mutations). En nuestro ejemplo, crearemos una API para gestionar una lista de libros.
Creación del tipo Book
En el archivo include/schema.h declararemos la estructura de datos y la función para crear el esquema:
#ifndef SCHEMA_H#define SCHEMA_H
#include <graphql-cpp/graphql.hpp>#include <string>#include <vector>
struct Book { int id; std::string title; std::string author; int year;};
graphql::Schema createBookSchema();
#endif // SCHEMA_HImplementación del esquema
En el archivo src/schema.cpp definiremos los tipos y la consulta raíz:
#include "schema.h"#include <graphql-cpp/graphql.hpp>#include <vector>#include <memory>
using namespace graphql;
// Almacenamiento temporal de librosstd::vector<Book> books = { {1, "C++ Primer", "Stanley B. Lippman", 2012}, {2, "Effective Modern C++", "Scott Meyers", 2014}};
Schema createBookSchema() { // 1. Definimos el tipo Book ObjectType bookType("Book"); bookType.addField("id", Type::NonNull(Type::Int())); bookType.addField("title", Type::NonNull(Type::String())); bookType.addField("author", Type::NonNull(Type::String())); bookType.addField("year", Type::Int());
// 2. Definimos la consulta raíz ObjectType queryType("Query"); queryType.addField("books", Type::List(Type::NonNull(bookType)), [](const auto& args) -> json { json result =