Introduction : Pourquoi écrire une API REST en C++ ?
C++ est traditionnellement associé à la programmation système, aux jeux et aux applications à forte charge. Cependant, le C++ moderne (à partir des normes C++11/17/20) fournit tous les outils nécessaires pour le développement rapide de services web. Écrire une API REST en C++ peut être justifié lorsque des performances maximales, une faible consommation de mémoire ou une intégration avec du code C++ existant (par exemple, des bibliothèques de vision par ordinateur ou de calcul numérique) sont requises.
Dans ce tutoriel, nous allons créer une API REST complète en C++ en 30 minutes. Pour cela, nous utiliserons la bibliothèque légère et élégante Crow. Elle ne nécessite pas de configuration complexe, prend en charge le routage, le JSON (via json.hpp) et les middleware. À la fin de l'article, vous disposerez d'un serveur fonctionnel avec trois endpoints.
Étape 1 : Configuration de l'environnement et installation de Crow
Pour travailler, nous aurons besoin d'un compilateur prenant en charge C++17 (g++ 7+, clang 5+ ou MSVC 2017+) et du système de build CMake. Crow est une bibliothèque "header-only", ce qui simplifie l'installation : il suffit de télécharger un seul fichier d'en-tête.
Installation
- Téléchargez la dernière version de Crow depuis GitHub (ou utilisez
git clone). - Copiez le dossier
includedans votre projet. - Installez
nlohmann/json(également header-only) pour travailler avec JSON.
Structure du projet
my_rest_api/├── CMakeLists.txt├── main.cpp└── include/ ├── crow.h └── json.hppCMakeLists.txt
cmake_minimum_required(VERSION 3.10)project(my_rest_api)
set(CMAKE_CXX_STANDARD 17)
include_directories(include)
add_executable(my_rest_api main.cpp)target_link_libraries(my_rest_api pthread)Build : mkdir build && cd build && cmake .. && make
Étape 2 : Création du serveur de base et des routes
Crow utilise un DSL simple pour définir les routes. Créons un serveur qui écoute sur le port 8080 et traite les requêtes GET et POST.
Code serveur de base
#include "crow.h"#include <string>
int main() { crow::SimpleApp app;
// Route GET simple CROW_ROUTE(app, "/")([](){ return "Bienvenue dans l'API REST en C++!"; });
// GET avec paramètre de chemin CROW_ROUTE(app, "/user/<int>")([](int user_id){ return crow::response("ID de l'utilisateur : " + std::to_string(user_id)); });
app.port(8080).multithreaded().run();}Ce code crée deux endpoints. crow::SimpleApp est la classe principale de l'application. La méthode multithreaded() active le traitement des requêtes dans un pool de threads. Lancez le serveur et vérifiez dans le navigateur http://localhost:8080/.
Types de paramètres dans les routes
Crow prend en charge les types de paramètres suivants dans le chemin :
<int>— nombre entier<string>— chaîne de caractères<path>— reste du chemin (par exemple,/files/<path>)<float>— nombre à virgule flottante
Étape 3 : Travailler avec JSON et les requêtes POST
Une véritable API REST doit pouvoir accepter et retourner du JSON. Connectons nlohmann/json et implémentons des opérations de type CRUD.
Exemple : Une simple "base de données" en mémoire
#include "crow.h"#include "json.hpp"#include <unordered_map>#include <memory>
using json = nlohmann::json;
struct Task { int id; std::string title; bool completed;};
std::unordered_map<int, std::shared_ptr<Task>> tasks;int next_id = 1;
int main() { crow::SimpleApp app;
// GET /tasks — obtenir toutes les tâches CROW_RO