Pierre-Henry Soria – Articles en français sur la technologie et la vie intentionnelle

Créer une API web en C++ avec Drogon

Oui, on peut créer un service web en C++. Je ne choisirais pas ce langage pour chaque site, mais il a du sens lorsqu’une équipe connaît déjà C++, vise une faible latence ou veut partager du code avec un autre composant natif.

Les anciens exemples CGI ne sont plus une bonne introduction. Un framework actuel gère le routage, HTTP, JSON, TLS, les WebSockets et l’accès aux bases de données.

Pourquoi Drogon

Drogon est un framework HTTP en C++17 et C++20. Il fonctionne sur Linux, macOS et Windows. Il fournit des entrées-sorties non bloquantes, des routes, des filtres, des sessions, du JSON et un ORM.

Pour un petit service, on peut enregistrer une route directement dans main.

Un premier endpoint JSON

Crée un fichier main.cc :

 1#include <drogon/drogon.h>
 2
 3int main()
 4{
 5    drogon::app().registerHandler(
 6        "/api/health",
 7        [](const drogon::HttpRequestPtr&,
 8           std::function<void(const drogon::HttpResponsePtr&)>&& callback) {
 9            Json::Value body;
10            body["status"] = "ok";
11            callback(drogon::HttpResponse::newHttpJsonResponse(body));
12        },
13        {drogon::Get}
14    );
15
16    drogon::app()
17        .addListener("127.0.0.1", 8080)
18        .run();
19}

Ajoute CMakeLists.txt :

 1cmake_minimum_required(VERSION 3.16)
 2project(hello_drogon LANGUAGES CXX)
 3
 4set(CMAKE_CXX_STANDARD 17)
 5set(CMAKE_CXX_STANDARD_REQUIRED ON)
 6
 7find_package(Drogon CONFIG REQUIRED)
 8
 9add_executable(hello_drogon main.cc)
10target_link_libraries(hello_drogon PRIVATE Drogon::Drogon)

Compile et lance :

1cmake -S . -B build
2cmake --build build
3./build/hello_drogon

Teste la route :

1curl http://127.0.0.1:8080/api/health

La réponse doit contenir :

1{"status":"ok"}

Préparer le passage en production

Le gestionnaire déclaré dans main convient à ce prototype. Quand l’API grandit, je déplace les routes dans des contrôleurs et je sépare le transport HTTP de la logique métier.

Je vérifie aussi cinq points avant une mise en production :

  1. Les entrées JSON sont validées et les erreurs suivent un format constant.
  2. La taille des requêtes et les délais d’attente sont limités.
  3. Aucun appel bloquant ne ralentit les gestionnaires asynchrones.
  4. Les journaux sont structurés et les métriques couvrent les erreurs et la latence.
  5. Le service ne tourne pas avec les droits administrateur et son exposition TLS est maîtrisée.

Quand je choisirais un autre langage

C++ demande une chaîne de compilation, une gestion attentive des dépendances et une bonne maîtrise des erreurs mémoire. Pour un produit classique avec beaucoup de formulaires et peu de calcul, PHP, Python, Go ou TypeScript permet souvent d’avancer plus vite.

Je garde C++ pour les services où ses contraintes apportent une valeur réelle. Le langage n’est pas un argument commercial. La fiabilité de l’API, ses tests, son suivi et sa facilité de maintenance comptent davantage.


Pierre-Henry Soria

GitHub · PierreWriter.com · YouTube

<< Previous Post

|

Next Post >>

#C++ #Api #Drogon #Backend #Développement Web