Comment écrire une API REST en C++ en 30 minutes : guide pratique

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : pourquoi C++ pour une API REST n'est pas une blague

\n

C++ 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.

\n

Dans 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
    \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
\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

\n

Pour 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
\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
\n

La structure du projet sera simple :

\n
my_rest_api/\n├── main.cpp\n├── httplib.h\n└── json.hpp
\n\n

Étape 2 : Création d'un serveur HTTP de base

\n

Commençons par un serveur minimal qui écoutera sur le port 8080 et répondra aux requêtes GET.

\n

Créez le fichier main.cpp :

\n
#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}
\n

Compilez et exécutez :

\n
g++ -std=c++17 -pthread -o server main.cpp\n./server
\n

Ouvrez un navigateur ou utilisez curl http://localhost:8080 — vous verrez le message de bienvenue. Le serveur fonctionne !

\n\n

Étape 3 : Implémentation des opérations CRUD avec JSON

\n

Ajoutons 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.

\n

main.cpp mis à jour :

\n
#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                

Blogs

Book Recommendations