Einleitung: Warum C++ für REST API?
C++ wird traditionell mit Systemprogrammierung, Spielen und Hochlastanwendungen assoziiert. Allerdings ermöglicht modernes C++ (C++17 und C++20 Standards) in Kombination mit leichtgewichtigen Bibliotheken die Erstellung schneller und effizienter Webdienste. Wenn Sie eine REST-API benötigen, die Tausende von Anfragen pro Sekunde mit minimaler Latenz verarbeitet, ist C++ eine ausgezeichnete Wahl.
In diesem Artikel erstellen wir in 30 Minuten eine vollwertige REST-API in C++ mit der Crow-Bibliothek. Dies ist ein Mini-Framework ähnlich wie Python Flask, jedoch in C++ geschrieben. Wir richten Routen ein, lernen JSON zu parsen und Antworten zurückzugeben.
Schritt 1: Umgebungseinrichtung und Installation von Crow
Zum Arbeiten benötigen wir einen Compiler mit C++17-Unterstützung (GCC 7+, Clang 5+, MSVC 2019+) und einen Abhängigkeitsmanager wie vcpkg oder Conan. Der einfachste Weg ist, Crow als Header-Only-Datei herunterzuladen.
1.1 Installation über vcpkg (empfohlen)
Wenn Sie vcpkg installiert haben, führen Sie den Befehl aus:
vcpkg install crow
Geben Sie dann beim Kompilieren den Pfad zu den Bibliotheken an:
g++ main.cpp -std=c++17 -I/pfad/zu/vcpkg/installed/x64-linux/include -lpthread -o server
1.2 Manuelle Installation (Header-Only)
Laden Sie die neueste Version von Crow von GitHub herunter. Sie benötigen nur die Datei crow_all.h (All-in-One). Platzieren Sie sie in Ihrem Projektordner.
Schritt 2: Erstellen eines einfachen Servers mit zwei Endpunkten
Lassen Sie uns einen minimalen Server schreiben, der auf Port 8080 lauscht und auf GET- und POST-Anfragen antwortet. Erstellen Sie eine Datei main.cpp.
2.1 Grundlegender Server-Code
#include "crow_all.h"
int main() {
crow::SimpleApp app;
// GET-Endpunkt: Startseite
CROW_ROUTE(app, "/")([](){
return "Hallo, REST API auf C++!";
});
// GET-Endpunkt: /api/status
CROW_ROUTE(app, "/api/status")([](){
crow::json::wvalue response;
response["status"] = "ok";
response["message"] = "Server läuft";
return response;
});
app.port(8080).multithreaded().run();
}
Kompilieren und ausführen:
g++ main.cpp -std=c++17 -lpthread -o api_server
./api_server
Gehen Sie nun in Ihrem Browser zu http://localhost:8080/api/status — Sie sehen eine JSON-Antwort.
Schritt 3: Arbeiten mit JSON und Verarbeiten von POST-Anfragen
Eine echte REST-API beinhaltet den Empfang von Daten vom Client. Lernen wir, JSON im Anforderungstext zu akzeptieren.
3.1 POST-Endpunkt zum Erstellen eines Benutzers
#include "crow_all.h"
#include <string>
#include <unordered_map>
int main() {
crow::SimpleApp app;
// Einfacher In-Memory-Speicher (zur Demonstration)
std::unordered_map<int, std::string> users;
int next_id = 1;
// POST /api/users — Benutzer erstellen
CROW_ROUTE(app, "/api/users").methods("POST"_method)([&](const crow::request& req){
auto body = crow::json::load(req.body);
if (!body || !body.has("name")) {
return crow::response(400, "Feld 'name' fehlt");
}
std::string name = body["name"].s();
int id = next_id++;
users[id] = name;
crow::json::wvalue response;
response["id"] = id;
response["name"] = name;
return crow::response(201, response);
});
// GET /api/users/{id} — Benutzer abrufen
CROW_ROUTE(app, "/api/users/<int>")([&](int id){
auto it = users.find(id);
if (it == users.end()) {
return crow::response(404, "Benutzer nicht gefunden");
}
crow::json::wvalue response;
response["id"] = id;
response["name"] = it->second;
return crow::response(respon