Introduction : pourquoi C++ pour une API REST n'est pas une blague
\nC++ est traditionnellement associé à la programmation système, aux jeux et aux calculs à forte charge. Cependant, ces dernières années, ce langage est de plus en plus utilisé pour créer des services web et des API REST. Pourquoi ? Parce que C++ offre une incroyable performance et un contrôle de la mémoire, ce qui est crucial pour les solutions backend à forte charge.
\nDans ce guide, nous allons créer en 30 minutes une API REST complète en C++ en utilisant la bibliothèque cpp-httplib (une bibliothèque d'en-tête unique, sans installation requise). Vous apprendrez à :
- \n
- Configurer un serveur HTTP en C++ \n
- Gérer les requêtes GET, POST, PUT et DELETE \n
- Travailler avec JSON via
nlohmann/json\n - Compiler et exécuter le projet \n
Ce contenu convient aussi bien aux débutants qu'aux développeurs expérimentés qui souhaitent essayer C++ dans le développement web.
\n\nÉtape 1 : Préparation de l'environnement et installation des dépendances
\nPour travailler, nous aurons besoin de :
\n- \n
- Un compilateur C++ (g++ ou clang) avec le support de C++17 \n
- La bibliothèque
cpp-httplib(un seul fichier .h) \n - La bibliothèque
nlohmann/json(un seul fichier .hpp) \n
Téléchargez les deux bibliothèques :
\n# Installation de cpp-httplib\nwget https://raw.githubusercontent.com/yhirose/cpp-httplib/master/httplib.h\n\n# Installation de nlohmann/json\nwget https://raw.githubusercontent.com/nlohmann/json/develop/single_include/nlohmann/json.hpp\nLa structure du projet sera simple :
\nmy_rest_api/\n├── main.cpp\n├── httplib.h\n└── json.hpp\n\nÉtape 2 : Création d'un serveur HTTP de base
\nCommençons par un serveur minimal qui écoutera sur le port 8080 et répondra aux requêtes GET.
\nCréez le fichier main.cpp :
#include "httplib.h"\n#include "json.hpp"\n#include <iostream>\n\nusing namespace httplib;\nusing json = nlohmann::json;\n\nint main() {\n Server svr;\n\n // Requête GET à la racine\n svr.Get("/", [](const Request& req, Response& res) {\n res.set_content("Bonjour, API REST en C++ !", "text/plain");\n });\n\n std::cout << "Serveur démarré sur http://localhost:8080" << std::endl;\n svr.listen("0.0.0.0", 8080);\n\n return 0;\n}\nCompilez et exécutez :
\ng++ -std=c++17 -pthread -o server main.cpp\n./server\nOuvrez un navigateur ou utilisez curl http://localhost:8080 — vous verrez le message de bienvenue. Le serveur fonctionne !
Étape 3 : Implémentation des opérations CRUD avec JSON
\nAjoutons maintenant un stockage de données en mémoire (un simple vecteur) et implémentons une API REST complète pour gérer les utilisateurs.
\nmain.cpp mis à jour :
#include "httplib.h"\n#include "json.hpp"\n#include <iostream>\n#include <vector>\n#include <string>\n#include <sstream>\n\nusing namespace httplib;\nusing json = nlohmann::json;\n\n// Modèle d'utilisateur\nstruct User {\n int id;\n std::string name;\n std::string email;\n};\n\n// Base de données en mémoire\nstd::vector<User> users;\nint next_id = 1;\n\nint main() {\n Server svr;\n\n // POST /users - créer un utilisateur\n svr.Post("/users", [](const Request& req, Response& res) {\n try {\n auto data = json::parse(req.body);\n User u;\n u.id = next_id++;\n u.name = data["name"];\n u.email = data["email"];\n users.push_back(u);\n\n json response = {{"id", u.id}, {"name", u.name}, {"email", u.email}};\n res.set_content(response.dump(), "application/json");\n } catch (...) {\n res.status = 400;\n res.set_content("{\\"error\\":\\"JSON invalide\\"}", "application/json");\n }\n });\n\n // GET /users - liste de tous les utilisateurs\n svr.Get("/users", [](const Request& req, Response& res) {\n