Como escrever uma API REST em C++ em 30 minutos: guia prático

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: por que C++ para API REST não é brincadeira

\n

C++ é tradicionalmente associado à programação de sistemas, jogos e computação de alta carga. No entanto, nos últimos anos, essa linguagem tem sido cada vez mais usada para criar serviços web e APIs REST. Por quê? Porque C++ oferece desempenho incrível e controle sobre a memória, o que é crítico para soluções backend de alta carga.

\n

Neste guia, em 30 minutos criaremos uma API REST completa em C++ usando a biblioteca cpp-httplib (uma biblioteca de cabeçalho único, sem necessidade de instalação). Você aprenderá a:

\n
    \n
  • Configurar um servidor HTTP em C++
  • \n
  • Processar requisições GET, POST, PUT e DELETE
  • \n
  • Trabalhar com JSON através do nlohmann/json
  • \n
  • Compilar e executar o projeto
  • \n
\n

Este material é adequado tanto para iniciantes quanto para desenvolvedores experientes que desejam experimentar C++ no desenvolvimento web.

\n\n

Passo 1: Preparação do ambiente e instalação das dependências

\n

Para trabalhar, precisaremos de:

\n
    \n
  • Compilador C++ (g++ ou clang) com suporte a C++17
  • \n
  • Biblioteca cpp-httplib (um único arquivo .h)
  • \n
  • Biblioteca nlohmann/json (um único arquivo .hpp)
  • \n
\n

Baixe ambas as bibliotecas:

\n
# Instalação do cpp-httplib\nwget https://raw.githubusercontent.com/yhirose/cpp-httplib/master/httplib.h\n\n# Instalação do nlohmann/json\nwget https://raw.githubusercontent.com/nlohmann/json/develop/single_include/nlohmann/json.hpp
\n

A estrutura do projeto será simples:

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

Passo 2: Criação de um servidor HTTP básico

\n

Vamos começar com um servidor mínimo que escutará na porta 8080 e responderá a requisições GET.

\n

Crie o arquivo 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    // Requisição GET para a raiz\n    svr.Get("/", [](const Request& req, Response& res) {\n        res.set_content("Olá, API REST em C++!", "text/plain");\n    });\n\n    std::cout << "Servidor iniciado em http://localhost:8080" << std::endl;\n    svr.listen("0.0.0.0", 8080);\n\n    return 0;\n}
\n

Compile e execute:

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

Abra o navegador ou use curl http://localhost:8080 — você verá a mensagem de boas-vindas. O servidor está funcionando!

\n\n

Passo 3: Implementação de operações CRUD com JSON

\n

Agora vamos adicionar armazenamento de dados em memória (um vetor simples) e implementar uma API REST completa para trabalhar com usuários.

\n

Arquivo main.cpp atualizado:

\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 usuário\nstruct User {\n    int id;\n    std::string name;\n    std::string email;\n};\n\n// Banco de dados em memória\nstd::vector<User> users;\nint next_id = 1;\n\nint main() {\n    Server svr;\n\n    // POST /users - criar usuário\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 os usuários\n    svr.Get("/users", [](const Request& req, Response& res) {\n                

Blogs

Book Recommendations