API GraphQL avec C++ : tutoriel pas à pas pour débutants
GraphQL est un langage de requête moderne pour les API qui permet aux clients de demander uniquement les données dont ils ont réellement besoin. Contrairement à REST, où la structure de la réponse est fixe, GraphQL offre flexibilité et contrôle. Dans ce tutoriel, nous allons voir comment créer une API GraphQL simple en C++ à partir de zéro. Vous apprendrez à connecter la bibliothèque graphql-cpp, à définir un schéma, à écrire des résolveurs et à tester les requêtes. Cet article est destiné aux débutants connaissant les bases du C++.
Pourquoi le C++ ? Ce langage offre des performances élevées, ce qui est essentiel pour les API à forte charge. GraphQL en C++ est souvent utilisé dans les systèmes temps réel, les moteurs de jeux et les services web à forte charge. Commençons !
Installation et configuration de l'environnement
Pour travailler, nous aurons besoin d'un compilateur prenant en charge C++17 (par exemple, GCC 8+ ou Clang 10+), de CMake et de la bibliothèque graphql-cpp. Installons tout le nécessaire.
Étape 1 : Installation des dépendances
Sous Ubuntu/Debian, exécutez :
sudo apt updatesudo apt install build-essential cmake libboost-all-dev libssl-devPour macOS, utilisez Homebrew :
brew install cmake boost opensslÉtape 2 : Clonage de la bibliothèque graphql-cpp
La bibliothèque graphql-cpp est une implémentation légère de GraphQL en C++. Clonez le dépôt :
git clone https://github.com/your-repo/graphql-cpp.gitcd graphql-cppmkdir build && cd buildcmake .. -DCMAKE_BUILD_TYPE=Releasemake -j4sudo make installAprès l'installation, créons un nouveau projet. Structure des dossiers :
my_graphql_api/├── CMakeLists.txt├── src/│ ├── main.cpp│ └── schema.cpp└── include/ └── schema.hÉtape 3 : Configuration de CMakeLists.txt
Créez le fichier 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)Définition du schéma GraphQL
Le schéma est le cœur de l'API GraphQL. Il décrit les types de données, les requêtes (queries) et les mutations (mutations). Dans notre exemple, nous allons créer une API pour gérer une liste de livres.
Création du type Book
Dans le fichier include/schema.h, déclarez la structure de données et la fonction pour créer le schéma :
#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_HImplémentation du schéma
Dans le fichier src/schema.cpp, définissons les types et la requête racine :
#include "schema.h"#include <graphql-cpp/graphql.hpp>#include <vector>#include <memory>
using namespace graphql;
// Stockage temporaire des livresstd::vector<Book> books = { {1, "C++ Primer", "Stanley B. Lippman", 2012}, {2, "Effective Modern C++", "Scott Meyers", 2014}};
Schema createBookSchema() { // 1. Définir le type 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. Définir la requête racine ObjectType queryType("Query"); queryType.addField("books", Type::List(Type::NonNull(bookType)), [](const auto& args) -> json { json result =