GraphQL em C++: biblioteca cppgraphqlgen para APIs modernas

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

GraphQL em C++: cppgraphqlgen — uma ferramenta poderosa para APIs modernas



GraphQL é uma linguagem de consulta para APIs que permite que os clientes obtenham apenas os dados necessários. Embora GraphQL seja mais frequentemente associado a JavaScript (Apollo, Relay) ou Python (Graphene, Strawberry), para sistemas de alta carga em C++ também existe uma excelente solução — a biblioteca cppgraphqlgen. Ela fornece um conjunto completo de ferramentas para criar a parte do servidor GraphQL em C++ puro com suporte aos padrões modernos C++17/20.



O que é cppgraphqlgen?



cppgraphqlgen é uma biblioteca header-only (com compilação opcional em .so/.dll) que implementa a especificação GraphQL (June 2018). Ela gera código type-safe com base no esquema (SDL — Schema Definition Language) e permite criar servidores GraphQL eficientes e multithread.



Principais características:

  • Geração de código a partir do esquema — você descreve tipos, consultas e mutações em um arquivo .graphql, e a ferramenta graphqlgen cria classes C++.
  • Type-safety — todos os tipos são verificados em tempo de compilação. Sem erros de tipo em tempo de execução.
  • Desempenho — overhead mínimo, suporte a resolvedores assíncronos (via std::future).
  • Suporte a Subscriptions — via WebSocket ou gRPC.
  • Integração com qualquer servidor HTTP — pode ser usado com crow, drogon, beast (Boost.Asio) ou até mesmo com sua própria implementação.


Arquitetura da biblioteca



cppgraphqlgen consiste em duas partes:

  1. Gerador de código (graphqlgen) — lê o esquema e cria arquivos de cabeçalho com classes para cada tipo, interfaces para resolvedores e funções auxiliares.
  2. Biblioteca runtime — parser de consultas, validador, executor e serializador de respostas.


Instalação

A biblioteca é distribuída via vcpkg ou compilada a partir do código fonte:

git clone https://github.com/microsoft/cppgraphqlgen.gitcd cppgraphqlgenmkdir build && cd buildcmake .. -DCMAKE_BUILD_TYPE=Releasecmake --build . --target install


Para usar o gerador, é necessário node.js (ele é escrito em TypeScript), mas o runtime é C++ puro.



Exemplo: criando um servidor GraphQL simples



Primeiro, crie o esquema schema.graphql:

type Query {    hello: String    user(id: Int!): User}

type User { id: Int name: String email: String}


Em seguida, execute o gerador:

graphqlgen --schema schema.graphql --output ./generated


Depois disso, na pasta generated, aparecerão os arquivos: SchemaTypes.h, SchemaResolver.h e outros. Agora, escreva os resolvedores:



#include "generated/SchemaTypes.h"#include "generated/SchemaResolver.h"

class QueryResolver : public graphql::schema::Query::Resolver {public: std::shared_ptr<graphql::schema::String> getHello() override { return std::make_shared<graphql::schema::String>("Hello, GraphQL from C++!"); }

std::shared_ptr<graphql::schema::User> getUser(int id) override { auto user = std::make_shared<graphql::schema::User>(); user->id = std::make_shared<graphql::schema::Int>(id); user->name = std::make_shared<graphql::schema::String>("John Doe"); user->email = std::make_shared<graphql::schema::String>("john@example.com"); return user; }};


Agora, compile o servidor usando crow:



#include <crow.h>#include "generated/Schema.h"

Recommendations