Pistache para C++: el framework REST de nueva generación
Pistache es una biblioteca moderna, ligera y de alto rendimiento para crear APIs REST en C++. Diseñada desde cero aprovechando las características de C++11/14/17, ofrece a los desarrolladores una interfaz limpia e intuitiva para construir servidores y clientes HTTP. A diferencia de soluciones más complejas como Boost.Asio, Pistache proporciona una API concisa que hace que crear servicios web en C++ sea tan sencillo como en Python o Node.js, pero conservando toda la potencia y el rendimiento del código nativo.
¿Por qué usar Pistache? En el mundo actual de arquitectura de microservicios e Internet de las Cosas (IoT), a menudo se necesitan servidores HTTP ligeros, rápidos y fiables. C++ es ideal para estas tareas gracias a su rendimiento, pero tradicionalmente escribir un servidor HTTP en C++ era un proceso complejo y laborioso. Pistache resuelve este problema proporcionando abstracciones listas para usar para enrutamiento, procesamiento de solicitudes, análisis de parámetros, gestión de sesiones y mucho más. La biblioteca se utiliza activamente en producción para construir APIs REST, webhooks, microservicios e incluso como base para aplicaciones de red más complejas.
Las características clave de Pistache incluyen: procesamiento asíncrono de solicitudes basado en epoll (Linux) o kqueue (macOS), soporte para HTTP/1.1, análisis integrado de parámetros de consulta y JSON (a través de bibliotecas de terceros), un sistema de enrutamiento flexible con soporte para parámetros de ruta, gestión automática de memoria mediante punteros inteligentes y seguridad total para subprocesos. Todo esto convierte a Pistache en una excelente opción para proyectos donde tanto la velocidad de desarrollo como la velocidad de ejecución son importantes.
Instalación de Pistache
Pistache no se instala mediante pip o npm, ya que es una biblioteca nativa de C++. La instalación se realiza a través de gestores de paquetes del sistema o compilando desde el código fuente.
Linux (Ubuntu/Debian)
# Instalación de dependencias
sudo apt-get update
sudo apt-get install -y libpistache-dev cmake g++ libssl-dev
# Verificar la instalación
dpkg -l | grep pistache
macOS (Homebrew)
brew install pistache
Compilación desde el código fuente (multiplataforma)
git clone https://github.com/pistacheio/pistache.git
cd pistache
mkdir build && cd build
cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release ..
make -j$(nproc)
sudo make install
Inicio rápido: servidor mínimo
Vamos a crear un servidor HTTP básico que responda "¡Hola, Mundo!" a cualquier solicitud GET.
#include <pistache/endpoint.h>
#include <pistache/http.h>
#include <iostream>
using namespace Pistache;
class HelloHandler : public Http::Handler {
public:
HTTP_PROTOTYPE(HelloHandler)
void onRequest(const Http::Request& request, Http::ResponseWriter writer) override {
writer.send(Http::Code::Ok, "¡Hola, Mundo!\n");
}
};
int main() {
// Creamos un endpoint en el puerto 9080
Address addr(Ipv4::any(), Port(9080));
auto opts = Http::Endpoint::options().threads(1);
Http::Endpoint server(addr);
server.init(opts);
server.setHandler(std::make_shared<HelloHandler>());
server.serve();
return 0;
}
Compilación: g++ -std=c++17 -lpistache -lpthread -o server server.cpp
Ejecuta el servidor y abre en tu navegador http://localhost:9080 — verás el mensaje de bienvenida.
Clases y métodos principales de Pistache
Veamos los componentes clave de la biblioteca con ejemplos de uso.
1. Http::Endpoint — punto de entrada del servidor
Firma: Http::Endpoint(const Address& addr);
Función: Crea un servidor HTTP vinculado a una dirección y puerto específicos. Gestiona el ciclo de vida del servidor.