GraphQL API com C++: tutorial passo a passo para iniciantes
GraphQL é uma linguagem moderna de consultas para APIs que permite aos clientes solicitar apenas os dados de que realmente precisam. Diferente do REST, onde a estrutura da resposta é fixa, o GraphQL oferece flexibilidade e controle. Neste tutorial, vamos explorar como criar uma GraphQL API simples em C++ do zero. Você aprenderá como conectar a biblioteca graphql-cpp, definir o esquema, escrever resolvers e testar consultas. O artigo é voltado para iniciantes familiarizados com os fundamentos do C++.
Por que C++? Esta linguagem oferece alta performance, o que é crítico para APIs com alta carga. GraphQL em C++ é frequentemente usado em sistemas de tempo real, motores de jogos e serviços web de alta demanda. Vamos começar!
Instalação e configuração do ambiente
Para trabalhar, precisaremos de um compilador com suporte a C++17 (por exemplo, GCC 8+ ou Clang 10+), CMake e a biblioteca graphql-cpp. Vamos instalar tudo o que é necessário.
Passo 1: Instalação das dependências
No Ubuntu/Debian, execute:
sudo apt updatesudo apt install build-essential cmake libboost-all-dev libssl-devPara macOS, use o Homebrew:
brew install cmake boost opensslPasso 2: Clonagem da biblioteca graphql-cpp
A biblioteca graphql-cpp é uma implementação leve do GraphQL em C++. Clone o repositório:
git clone https://github.com/your-repo/graphql-cpp.gitcd graphql-cppmkdir build && cd buildcmake .. -DCMAKE_BUILD_TYPE=Releasemake -j4sudo make installApós a instalação, crie um novo projeto. Estrutura de pastas:
my_graphql_api/├── CMakeLists.txt├── src/│ ├── main.cpp│ └── schema.cpp└── include/ └── schema.hPasso 3: Configuração do CMakeLists.txt
Crie o arquivo CMakeLists.txt:
cmake_minimum_required(VERSION 3.10)project(GraphQLExample)
set(CMAKE_CXX_STANDARD 17)
find_package(graphql-cpp REQUIRED)find_package(Boost REQUIRED COMPONENTS system)
add_executable(graphql_example src/main.cpp src/schema.cpp)target_include_directories(graphql_example PRIVATE include)target_link_libraries(graphql_example graphql-cpp::graphql-cpp Boost::system)Definição do esquema GraphQL
O esquema é o núcleo da GraphQL API. Ele descreve os tipos de dados, consultas (queries) e mutações (mutations). No nosso exemplo, criaremos uma API para gerenciar uma lista de livros.
Criação do tipo Book
No arquivo include/schema.h, declare a estrutura de dados e a função para criar o esquema:
#ifndef SCHEMA_H#define SCHEMA_H
#include <graphql-cpp/graphql.hpp>#include <string>#include <vector>
struct Book { int id; std::string title; std::string author; int year;};
graphql::Schema createBookSchema();
#endif // SCHEMA_HImplementação do esquema
No arquivo src/schema.cpp, defina os tipos e a consulta raiz:
#include "schema.h"#include <graphql-cpp/graphql.hpp>#include <vector>#include <memory>
using namespace graphql;
// Armazenamento temporário de livrosstd::vector<Book> books = { {1, "C++ Primer", "Stanley B. Lippman", 2012}, {2, "Effective Modern C++", "Scott Meyers", 2014}};
Schema createBookSchema() { // 1. Definir o tipo Book ObjectType bookType("Book"); bookType.addField("id", Type::NonNull(Type::Int())); bookType.addField("title", Type::NonNull(Type::String())); bookType.addField("author", Type::NonNull(Type::String())); bookType.addField("year", Type::Int());
// 2. Definir a consulta raiz ObjectType queryType("Query"); queryType.addField("books", Type::List(Type::NonNull(bookType)), [](const auto& args) -> json { json result =