Einleitung: Warum eine REST API in C++ schreiben?
C++ wird traditionell mit Systemprogrammierung, Spielen und hochbelasteten Anwendungen assoziiert. Modernes C++ (ab den Standards C++11/17/20) bietet jedoch alle notwendigen Werkzeuge für die schnelle Entwicklung von Webdiensten. Das Schreiben einer REST API in C++ kann gerechtfertigt sein, wenn maximale Leistung, geringer Speicherverbrauch oder die Integration mit bestehendem C++-Code (z. B. Bibliotheken für Computer Vision oder numerische Berechnungen) erforderlich ist.
In diesem Leitfaden erstellen wir in 30 Minuten eine vollwertige REST API in C++. Dazu verwenden wir die leichte und elegante Bibliothek Crow. Sie erfordert keine komplexe Einrichtung, unterstützt Routing, JSON (über json.hpp) und Middleware. Am Ende des Artikels haben Sie einen funktionierenden Server mit drei Endpunkten.
Schritt 1: Einrichtung der Umgebung und Installation von Crow
Für die Arbeit benötigen wir einen Compiler mit C++17-Unterstützung (g++ 7+, clang 5+ oder MSVC 2017+) und das Build-System CMake. Crow ist eine "Header-only"-Bibliothek, was die Installation vereinfacht: Es genügt, eine einzige Header-Datei herunterzuladen.
Installation
- Laden Sie die neueste Version von Crow von GitHub herunter (oder verwenden Sie
git clone). - Kopieren Sie den Ordner
includein Ihr Projekt. - Installieren Sie
nlohmann/json(ebenfalls Header-only) für die Arbeit mit JSON.
Projektstruktur
my_rest_api/
├── CMakeLists.txt
├── main.cpp
└── include/
├── crow.h
└── json.hpp
CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(my_rest_api)
set(CMAKE_CXX_STANDARD 17)
include_directories(include)
add_executable(my_rest_api main.cpp)
target_link_libraries(my_rest_api pthread)
Build: mkdir build && cd build && cmake .. && make
Schritt 2: Erstellung eines grundlegenden Servers und von Routen
Crow verwendet eine einfache DSL zur Definition von Routen. Lassen Sie uns einen Server erstellen, der auf Port 8080 hört und GET- und POST-Anfragen verarbeitet.
Grundlegender Server-Code
#include "crow.h"
#include <string>
int main() {
crow::SimpleApp app;
// Einfache GET-Route
CROW_ROUTE(app, "/")([](){
return "Willkommen zur REST API in C++!";
});
// GET mit Pfadparameter
CROW_ROUTE(app, "/user/<int>")([](int user_id){
return crow::response("Benutzer-ID: " + std::to_string(user_id));
});
app.port(8080).multithreaded().run();
}
Dieser Code erstellt zwei Endpunkte. crow::SimpleApp ist die Hauptanwendungsklasse. Die Methode multithreaded() aktiviert die Verarbeitung von Anfragen in einem Thread-Pool. Starten Sie den Server und überprüfen Sie im Browser http://localhost:8080/.
Parametertypen in Routen
Crow unterstützt die folgenden Parametertypen im Pfad:
<int>— Ganzzahl<string>— Zeichenkette<path>— Rest des Pfades (z. B./files/<path>)<float>— Gleitkommazahl
Schritt 3: Arbeiten mit JSON und POST-Anfragen
Eine echte REST API muss JSON empfangen und zurückgeben können. Binden wir nlohmann/json ein und implementieren CRUD-ähnliche Operationen.
Beispiel: Einfache "Datenbank" im Speicher
#include "crow.h"
#include "json.hpp"
#include <unordered_map>
#include <memory>
using json = nlohmann::json;
struct Task {
int id;
std::string title;
bool completed;
};
std::unordered_map<int, std::shared_ptr<Task>> tasks;
int next_id = 1;
int main() {
crow::SimpleApp app;
// GET /tasks — alle Aufgaben abrufen
CROW_RO