Geração Swagger/OpenAPI para C++: melhores ferramentas e bibliotecas

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

Geração Swagger/OpenAPI para C++: como automatizar a criação de REST API



O desenvolvimento web moderno em C++ exige ferramentas eficientes para criar REST APIs. A especificação OpenAPI (anteriormente Swagger) tornou-se o padrão para descrever interfaces de serviços web. No entanto, a geração automática de código C++ a partir de especificações OpenAPI é uma tarefa desafiadora. Neste artigo, analisaremos as melhores bibliotecas e ferramentas que o ajudarão a gerar código de servidor e cliente em C++ a partir de documentos OpenAPI.



Por que o C++ está atrás de outras linguagens na geração OpenAPI?

Ao contrário de Python, Java ou JavaScript, onde existem geradores maduros (por exemplo, openapi-generator), o C++ enfrenta vários problemas:

  • Falta de um padrão único para frameworks HTTP — em C++ não há um framework web dominante como Flask ou Spring.
  • Complexidade do gerenciamento de memória — a geração de código seguro com ponteiros inteligentes requer modelos adicionais.
  • Diversidade de tipos — a serialização JSON em C++ requer configuração manual para estruturas complexas.


Principais ferramentas para geração de código C++ a partir de OpenAPI



1. OpenAPI Generator (gerador oficial)

A ferramenta mais popular é o OpenAPI Generator (anteriormente Swagger Codegen). Ele suporta várias linguagens, incluindo C++. No entanto, seu suporte para C++ é limitado: apenas código cliente é gerado com base em cpprestsdk (Casablanca) ou Qt.

Instalação:

# Via npmnpm install @openapitools/openapi-generator-cli -g

# Geração de cliente C++ (cpprestsdk)openapi-generator generate -i petstore.yaml -g cpp-restsdk -o ./client

Exemplo de código gerado (Qt):

// PetApi.hclass PetApi : public AbstractOpenAPISchema {    Q_OBJECTpublic:    explicit PetApi(QObject *parent = nullptr);        void addPet(const Pet &body);    void getPetById(qint64 petId);    signals:    void addPetSignal(Pet &result);    void getPetByIdSignal(Pet &result);};

Prós: Suporte a múltiplos formatos, comunidade ativa.
Contras: O código gerado frequentemente requer ajustes; não há geração de servidor para C++.



2. oat++ (oatpp) — framework com suporte a OpenAPI

oat++ é um framework C++ moderno para criar REST APIs que inclui suporte embutido para OpenAPI. Ao contrário dos geradores, o oat++ usa uma abordagem declarativa com anotações.

Exemplo de descrição de endpoint:

ENDPOINT("GET", "/users/{userId}", getUser) {    auto userId = req->getPathVariable("userId");    auto user = userService->getUser(userId);        // Documentação automática OpenAPI    auto dto = UserDto::createShared();    dto->id = user->id;    dto->name = user->name;    return createDtoResponse(Status::CODE_200, dto);}

O oat++ gera automaticamente openapi.yaml com base nas anotações. Isso permite não escrever a especificação manualmente, mas derivá-la do código.



3. Restbed + Swagger UI

Restbed é um framework HTTP leve para C++11. Combinado com a biblioteca restbed-swagger, é possível gerar dinamicamente documentação OpenAPI.

#include <restbed>#include <restbed-swagger>

auto resource = std::make_shared<restbed::Resource>();resource->set_path("/api/users/{id}");

// Descrição de parâmetros para Swaggerrestbed::swagger::Info info;info.set_title("User API");info.set_version("1.0.0");

auto swagger = std::make_shared<restbed::swagger::Service>(info);swagger->publish(resource);


4. Crow — microframework com extensão OpenAPI

Crow —

Recommendations