Introdução: por que escrever uma REST API em C++?
REST API (Representational State Transfer) é um estilo arquitetônico para interação de componentes de aplicações distribuídas em rede. Geralmente, para escrever uma REST API, escolhe-se Python (Flask, FastAPI), JavaScript (Express.js) ou Java. No entanto, C++ permanece injustamente negligenciado. E é uma pena.
Bibliotecas modernas como Crow, cpp-httplib e Drogon permitem criar REST APIs de alto desempenho em C++ em literalmente meia hora. Graças à velocidade do C++ e ao consumo mínimo de memória, essas APIs são ideais para:
- microsserviços com altos requisitos de desempenho;
- sistemas embarcados e dispositivos IoT;
- processamento de um grande número de requisições simultâneas;
- implementação de gateways e servidores proxy.
Neste artigo, criaremos na prática uma REST API simples em C++ usando a biblioteca Crow. Você verá que não é mais difícil do que em Python, e em termos de velocidade de execução, é muitas vezes mais rápido.
Configuração do ambiente e instalação da biblioteca Crow
Para nosso projeto, usaremos Crow — um micro-framework web C++ minimalista e muito rápido. Ele suporta roteamento, middleware, serialização JSON e funciona em Windows, Linux e macOS.
O que será necessário
- Compilador C++17 ou superior (GCC 8+, Clang 7+, MSVC 2019+);
- CMake versão 3.14+;
- Biblioteca
asio(instalada automaticamente com Crow); - Biblioteca
nlohmann/json(para trabalhar com JSON).
Instalação do Crow
Crow é uma biblioteca header-only. Isso significa que você não precisa compilá-la — basta copiar os arquivos de cabeçalho para o projeto. A maneira mais simples é através do CMake FetchContent.
Crie a estrutura do projeto:
rest-api-cpp/├── CMakeLists.txt├── src/│ └── main.cpp└── include/Conteúdo do arquivo CMakeLists.txt:
cmake_minimum_required(VERSION 3.14)project(rest_api_cpp)
set(CMAKE_CXX_STANDARD 17)
# Inclui Crowinclude(FetchContent)FetchContent_Declare( crow GIT_REPOSITORY https://github.com/ipkn/crow.git GIT_TAG master)FetchContent_MakeAvailable(crow)
# Inclui nlohmann/jsonFetchContent_Declare( json GIT_REPOSITORY https://github.com/nlohmann/json.git GIT_TAG v3.11.2)FetchContent_MakeAvailable(json)
add_executable(rest_api src/main.cpp)target_link_libraries(rest_api PRIVATE Crow::Crow nlohmann_json::nlohmann_json)Depois disso, execute:
mkdir build && cd buildcmake ..makeTudo pronto para escrever o código.
Criação de uma REST API básica em C++ com Crow
Vamos escrever uma API simples para gerenciar uma lista de tarefas (Task Manager). Ela suportará quatro métodos HTTP principais: GET, POST, PUT, DELETE.
Estrutura do servidor e endpoint GET
#include <crow.h>#include <nlohmann/json.hpp>#include <vector>#include <string>
using json = nlohmann::json;
struct Task { int id; std::string title; bool completed;};
std::vector<Task> tasks = { {1, "Estudar Crow", false}, {2, "Escrever REST API", false}};int next_id = 3;
int main() { crow::SimpleApp app;
// GET /tasks — obter todas as tarefas CROW_ROUTE(app, "/tasks") .methods("GET"_method) ([](){ json j = json::array(); for (const auto& t : tasks) { j.push_back({{"id", t.id}, {"title", t.title}, {"completed", t.completed}}); } return crow::response(j.dump()); });
app.port(8080).multithreaded().run();}Este código inicia um servidor HTTP na porta 8080. Quando uma requisição GET é feita para /tasks