Wie man in 30 Minuten eine REST API in C++ schreibt: Eine praktische Anleitung

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung: Warum C++ für REST API kein Scherz ist

\n

C++ wird traditionell mit Systemprogrammierung, Spielen und hochbelastbaren Berechnungen assoziiert. In den letzten Jahren wird diese Sprache jedoch zunehmend für die Erstellung von Webservices und REST APIs verwendet. Warum? Weil C++ eine unglaubliche Leistung und Kontrolle über den Speicher bietet, was für hochbelastbare Backend-Lösungen entscheidend ist.

\n

In dieser Anleitung erstellen wir in 30 Minuten eine vollwertige REST API in C++ unter Verwendung der Bibliothek cpp-httplib (eine Header-Only-Bibliothek, keine Installation erforderlich). Sie lernen:

\n
    \n
  • Einen HTTP-Server in C++ einzurichten
  • \n
  • GET-, POST-, PUT- und DELETE-Anfragen zu verarbeiten
  • \n
  • Mit JSON über nlohmann/json zu arbeiten
  • \n
  • Das Projekt zu kompilieren und auszuführen
  • \n
\n

Dieses Material eignet sich sowohl für Anfänger als auch für erfahrene Entwickler, die C++ in der Webentwicklung ausprobieren möchten.

\n\n

Schritt 1: Vorbereitung der Umgebung und Installation der Abhängigkeiten

\n

Für die Arbeit benötigen wir:

\n
    \n
  • Einen C++-Compiler (g++ oder clang) mit C++17-Unterstützung
  • \n
  • Die Bibliothek cpp-httplib (eine h-Datei)
  • \n
  • Die Bibliothek nlohmann/json (eine hpp-Datei)
  • \n
\n

Laden Sie beide Bibliotheken herunter:

\n
# Installation von cpp-httplib\nwget https://raw.githubusercontent.com/yhirose/cpp-httplib/master/httplib.h\n\n# Installation von nlohmann/json\nwget https://raw.githubusercontent.com/nlohmann/json/develop/single_include/nlohmann/json.hpp
\n

Die Projektstruktur wird einfach sein:

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

Schritt 2: Erstellen eines grundlegenden HTTP-Servers

\n

Beginnen wir mit einem minimalen Server, der Port 8080 abhört und auf GET-Anfragen antwortet.

\n

Erstellen Sie die Datei 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    // GET-Anfrage an die Wurzel\n    svr.Get("/", [](const Request& req, Response& res) {\n        res.set_content("Hallo, REST API in C++!", "text/plain");\n    });\n\n    std::cout << "Server gestartet auf http://localhost:8080" << std::endl;\n    svr.listen("0.0.0.0", 8080);\n\n    return 0;\n}
\n

Kompilieren und starten Sie:

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

Öffnen Sie einen Browser oder verwenden Sie curl http://localhost:8080 – Sie sehen eine Begrüßungsnachricht. Der Server läuft!

\n\n

Schritt 3: Implementierung von CRUD-Operationen mit JSON

\n

Jetzt fügen wir eine Datenspeicherung im Arbeitsspeicher hinzu (einfacher Vektor) und implementieren eine vollständige REST API für die Arbeit mit Benutzern.

\n

Aktualisierte main.cpp:

\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// Benutzermodell\nstruct User {\n    int id;\n    std::string name;\n    std::string email;\n};\n\n// Datenbank im Arbeitsspeicher\nstd::vector<User> users;\nint next_id = 1;\n\nint main() {\n    Server svr;\n\n    // POST /users - Benutzer erstellen\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\\":\\"Ungültiges JSON\\"}", "application/json");\n        }\n    });\n\n    // GET /users - Liste aller Benutzer\n    svr.Get("/users", [](const Request& req, Response& res) {\n                

Blogs

Buchempfehlungen