Cómo escribir una API REST en C++ en 30 minutos: guía práctica

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

Introducción: por qué C++ para API REST no es una broma

\n

C++ se asocia tradicionalmente con la programación de sistemas, juegos y computación de alto rendimiento. Sin embargo, en los últimos años, este lenguaje se utiliza cada vez más para crear servicios web y API REST. ¿Por qué? Porque C++ ofrece un rendimiento increíble y control sobre la memoria, lo cual es crítico para soluciones backend de alta carga.

\n

En esta guía, crearemos en 30 minutos una API REST completa en C++ utilizando la biblioteca cpp-httplib (una biblioteca de solo encabezado, no requiere instalación). Aprenderás a:

\n
    \n
  • Configurar un servidor HTTP en C++
  • \n
  • Procesar solicitudes GET, POST, PUT y DELETE
  • \n
  • Trabajar con JSON mediante nlohmann/json
  • \n
  • Compilar y ejecutar el proyecto
  • \n
\n

Este material es adecuado tanto para principiantes como para desarrolladores experimentados que quieran probar C++ en el desarrollo web.

\n\n

Paso 1: Preparación del entorno e instalación de dependencias

\n

Para trabajar necesitaremos:

\n
    \n
  • Compilador de C++ (g++ o clang) con soporte para C++17
  • \n
  • Biblioteca cpp-httplib (un archivo .h)
  • \n
  • Biblioteca nlohmann/json (un archivo .hpp)
  • \n
\n

Descarga ambas bibliotecas:

\n
# Instalación de cpp-httplib\nwget https://raw.githubusercontent.com/yhirose/cpp-httplib/master/httplib.h\n\n# Instalación de nlohmann/json\nwget https://raw.githubusercontent.com/nlohmann/json/develop/single_include/nlohmann/json.hpp
\n

La estructura del proyecto será simple:

\n
my_rest_api/\n├── main.cpp\n├── httplib.h\n└── json.hpp
\n\n

Paso 2: Creación de un servidor HTTP básico

\n

Empecemos con un servidor mínimo que escuchará en el puerto 8080 y responderá a solicitudes GET.

\n

Crea el archivo main.cpp:

\n
#include "httplib.h"\n#include "json.hpp"\n#include <iostream>\n\nusing namespace httplib;\nusing json = nlohmann::json;\n\nint main() {\n    Server svr;\n\n    // Solicitud GET a la raíz\n    svr.Get("/", [](const Request& req, Response& res) {\n        res.set_content("¡Hola, API REST en C++!", "text/plain");\n    });\n\n    std::cout << "Servidor iniciado en http://localhost:8080" << std::endl;\n    svr.listen("0.0.0.0", 8080);\n\n    return 0;\n}
\n

Compila y ejecuta:

\n
g++ -std=c++17 -pthread -o server main.cpp\n./server
\n

Abre el navegador o usa curl http://localhost:8080 — verás un mensaje de bienvenida. ¡El servidor funciona!

\n\n

Paso 3: Implementación de operaciones CRUD con JSON

\n

Ahora agregaremos almacenamiento de datos en memoria (un vector simple) e implementaremos una API REST completa para trabajar con usuarios.

\n

main.cpp actualizado:

\n
#include "httplib.h"\n#include "json.hpp"\n#include <iostream>\n#include <vector>\n#include <string>\n#include <sstream>\n\nusing namespace httplib;\nusing json = nlohmann::json;\n\n// Modelo de usuario\nstruct User {\n    int id;\n    std::string name;\n    std::string email;\n};\n\n// Base de datos en memoria\nstd::vector<User> users;\nint next_id = 1;\n\nint main() {\n    Server svr;\n\n    // POST /users - crear usuario\n    svr.Post("/users", [](const Request& req, Response& res) {\n        try {\n            auto data = json::parse(req.body);\n            User u;\n            u.id = next_id++;\n            u.name = data["name"];\n            u.email = data["email"];\n            users.push_back(u);\n\n            json response = {{"id", u.id}, {"name", u.name}, {"email", u.email}};\n            res.set_content(response.dump(), "application/json");\n        } catch (...) {\n            res.status = 400;\n            res.set_content("{\\"error\\":\\"JSON inválido\\"}", "application/json");\n        }\n    });\n\n    // GET /users - lista de todos los usuarios\n    svr.Get("/users", [](const Request& req, Response& res) {\n                

Blogs

Book Recommendations