Cómo escribir una API REST en C++ en 30 minutos: inicio rápido

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 REST API?

C++ se asocia tradicionalmente con la programación de sistemas, juegos y aplicaciones de alta carga. Sin embargo, el C++ moderno (estándares C++17 y C++20) junto con bibliotecas ligeras permite crear servicios web rápidos y eficientes. Si necesitas una REST API que procese miles de solicitudes por segundo con latencia mínima, C++ es una excelente opción.

En este artículo crearemos en 30 minutos una REST API completa en C++ utilizando la biblioteca Crow. Es un mini-framework similar a Python Flask, pero escrito en C++. Configuraremos rutas, aprenderemos a parsear JSON y devolver respuestas.



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

Para trabajar necesitaremos un compilador con soporte para C++17 (GCC 7+, Clang 5+, MSVC 2019+) y un gestor de dependencias vcpkg o Conan. La forma más sencilla es descargar Crow como archivo de cabecera (header-only).



1.1 Instalación mediante vcpkg (recomendado)

Si tienes instalado vcpkg, ejecuta el comando:

vcpkg install crow

Luego, al compilar, indica la ruta a las bibliotecas:

g++ main.cpp -std=c++17 -I/path/to/vcpkg/installed/x64-linux/include -lpthread -o server


1.2 Instalación manual (header-only)

Descarga la última versión de Crow desde GitHub. Solo necesitas el archivo crow_all.h (todo incluido). Colócalo en la carpeta del proyecto.



Paso 2: Creación de un servidor simple con dos endpoints

Escribamos un servidor mínimo que escuche en el puerto 8080 y responda a solicitudes GET y POST. Crea el archivo main.cpp.



2.1 Código básico del servidor

#include "crow_all.h"

int main() { crow::SimpleApp app;

// GET-endpoint: página raíz CROW_ROUTE(app, "/")([](){ return "Hello, REST API on C++!"; });

// GET-endpoint: /api/status CROW_ROUTE(app, "/api/status")([](){ crow::json::wvalue response; response["status"] = "ok"; response["message"] = "Server is running"; return response; });

app.port(8080).multithreaded().run();}


Compila y ejecuta:

g++ main.cpp -std=c++17 -lpthread -o api_server./api_server

Ahora ve en el navegador a http://localhost:8080/api/status — verás una respuesta JSON.



Paso 3: Trabajo con JSON y manejo de solicitudes POST

Una REST API real implica recibir datos del cliente. Aprendamos a aceptar JSON en el cuerpo de la solicitud.



3.1 POST-endpoint para crear un usuario

#include "crow_all.h"#include <string>#include <unordered_map>

int main() { crow::SimpleApp app; // Almacenamiento simple en memoria (para demostración) std::unordered_map<int, std::string> users; int next_id = 1;

// POST /api/users — crear un usuario CROW_ROUTE(app, "/api/users").methods("POST"_method)([&](const crow::request& req){ auto body = crow::json::load(req.body); if (!body || !body.has("name")) { return crow::response(400, "Missing 'name' field"); } std::string name = body["name"].s(); int id = next_id++; users[id] = name;

crow::json::wvalue response; response["id"] = id; response["name"] = name; return crow::response(201, response); });

// GET /api/users/{id} — obtener un usuario CROW_ROUTE(app, "/api/users/<int>")([&](int id){ auto it = users.find(id); if (it == users.end()) { return crow::response(404, "User not found"); } crow::json::wvalue response; response["id"] = id; response["name"] = it->second; return crow::response(respon

Blogs

Book Recommendations