Introducción: ¿Por qué escribir una API REST en C++?
C++ se asocia tradicionalmente con la programación de sistemas, juegos y aplicaciones de alta carga. Sin embargo, el C++ moderno (a partir de los estándares C++11/17/20) proporciona todas las herramientas necesarias para el desarrollo rápido de servicios web. Escribir una API REST en C++ puede estar justificado cuando se requiere el máximo rendimiento, bajo consumo de memoria o integración con código C++ existente (por ejemplo, bibliotecas de visión por computadora o cálculos numéricos).
En esta guía, crearemos una API REST completa en C++ en 30 minutos. Para ello, utilizaremos la biblioteca ligera y elegante Crow. No requiere configuración compleja, soporta enrutamiento, JSON (a través de json.hpp) y middleware. Al final del artículo, tendrá un servidor funcional con tres endpoints.
Paso 1: Configuración del entorno e instalación de Crow
Para trabajar, necesitaremos un compilador con soporte para C++17 (g++ 7+, clang 5+ o MSVC 2017+) y el sistema de compilación CMake. Crow es una biblioteca "header-only", lo que simplifica la instalación: basta con descargar un único archivo de encabezado.
Instalación
- Descargue la última versión de Crow desde GitHub (o use
git clone). - Copie la carpeta
includeen su proyecto. - Instale
nlohmann/json(también header-only) para trabajar con JSON.
Estructura del proyecto
my_rest_api/├── CMakeLists.txt├── main.cpp└── include/ ├── crow.h └── json.hppCMakeLists.txt
cmake_minimum_required(VERSION 3.10)project(my_rest_api)
set(CMAKE_CXX_STANDARD 17)
include_directories(include)
add_executable(my_rest_api main.cpp)target_link_libraries(my_rest_api pthread)Compilación: mkdir build && cd build && cmake .. && make
Paso 2: Creación del servidor base y rutas
Crow utiliza un DSL simple para definir rutas. Creemos un servidor que escuche en el puerto 8080 y maneje solicitudes GET y POST.
Código base del servidor
#include "crow.h"#include <string>
int main() { crow::SimpleApp app;
// Ruta GET simple CROW_ROUTE(app, "/")([](){ return "¡Bienvenido a la API REST en C++!"; });
// GET con parámetro de ruta CROW_ROUTE(app, "/user/<int>")([](int user_id){ return crow::response("ID de usuario: " + std::to_string(user_id)); });
app.port(8080).multithreaded().run();}Este código crea dos endpoints. crow::SimpleApp es la clase principal de la aplicación. El método multithreaded() habilita el procesamiento de solicitudes en un pool de hilos. Inicie el servidor y verifique en el navegador http://localhost:8080/.
Tipos de parámetros en rutas
Crow soporta los siguientes tipos de parámetros en la ruta:
<int>— número entero<string>— cadena de texto<path>— resto de la ruta (por ejemplo,/files/<path>)<float>— número de punto flotante
Paso 3: Trabajo con JSON y solicitudes POST
Una API REST real debe poder recibir y devolver JSON. Conectaremos nlohmann/json e implementaremos operaciones similares a CRUD.
Ejemplo: "Base de datos" simple en memoria
#include "crow.h"#include "json.hpp"#include <unordered_map>#include <memory>
using json = nlohmann::json;
struct Task { int id; std::string title; bool completed;};
std::unordered_map<int, std::shared_ptr<Task>> tasks;int next_id = 1;
int main() { crow::SimpleApp app;
// GET /tasks — obtener todas las tareas CROW_RO