Einleitung: Warum eine REST API in C++ schreiben?
REST API (Representational State Transfer) ist ein Architekturstil für die Interaktion von Komponenten einer verteilten Anwendung im Netzwerk. Normalerweise wählt man für die Entwicklung einer REST API Python (Flask, FastAPI), JavaScript (Express.js) oder Java. C++ wird jedoch zu Unrecht übersehen. Zu Unrecht.
Moderne Bibliotheken wie Crow, cpp-httplib und Drogon ermöglichen es, leistungsstarke REST APIs in C++ buchstäblich in einer halben Stunde zu erstellen. Dank der Geschwindigkeit von C++ und dem minimalen Speicherverbrauch eignen sich solche APIs ideal für:
- Microservices mit hohen Leistungsanforderungen;
- eingebettete Systeme und IoT-Geräte;
- die Verarbeitung einer großen Anzahl paralleler Anfragen;
- die Implementierung von Gateways und Proxy-Servern.
In diesem Artikel werden wir in der Praxis eine einfache REST API in C++ mit der Bibliothek Crow erstellen. Sie werden sehen, dass es nicht komplizierter ist als in Python, aber in Bezug auf die Geschwindigkeit um ein Vielfaches schneller.
Einrichtung der Umgebung und Installation der Bibliothek Crow
Für unser Projekt verwenden wir Crow – ein minimalistisches und sehr schnelles C++ Micro-Web-Framework. Es unterstützt Routing, Middleware, JSON-Serialisierung und funktioniert unter Windows, Linux und macOS.
Was wird benötigt
- Ein C++17-Compiler oder neuer (GCC 8+, Clang 7+, MSVC 2019+);
- CMake Version 3.14+;
- Die Bibliothek
asio(wird automatisch mit Crow installiert); - Die Bibliothek
nlohmann/json(für die Arbeit mit JSON).
Installation von Crow
Crow ist eine Header-Only-Bibliothek. Das bedeutet, dass Sie sie nicht kompilieren müssen – es reicht, die Header-Dateien in das Projekt zu kopieren. Der einfachste Weg ist über CMake FetchContent.
Erstellen Sie die Projektstruktur:
rest-api-cpp/├── CMakeLists.txt├── src/│ └── main.cpp└── include/Inhalt der Datei CMakeLists.txt:
cmake_minimum_required(VERSION 3.14)project(rest_api_cpp)
set(CMAKE_CXX_STANDARD 17)
# Crow einbindeninclude(FetchContent)FetchContent_Declare( crow GIT_REPOSITORY https://github.com/ipkn/crow.git GIT_TAG master)FetchContent_MakeAvailable(crow)
# nlohmann/json einbindenFetchContent_Declare( json GIT_REPOSITORY https://github.com/nlohmann/json.git GIT_TAG v3.11.2)FetchContent_MakeAvailable(json)
add_executable(rest_api src/main.cpp)target_link_libraries(rest_api PRIVATE Crow::Crow nlohmann_json::nlohmann_json)Führen Sie danach Folgendes aus:
mkdir build && cd buildcmake ..makeAlles ist bereit zum Schreiben des Codes.
Erstellung einer grundlegenden REST API in C++ mit Crow
Wir schreiben eine einfache API zur Verwaltung einer Aufgabenliste (Task Manager). Sie wird die vier wichtigsten HTTP-Methoden unterstützen: GET, POST, PUT, DELETE.
Grundgerüst des Servers und GET-Endpunkt
#include <crow.h>#include <nlohmann/json.hpp>#include <vector>#include <string>
using json = nlohmann::json;
struct Task { int id; std::string title; bool completed;};
std::vector<Task> tasks = { {1, "Crow lernen", false}, {2, "REST API schreiben", false}};int next_id = 3;
int main() { crow::SimpleApp app;
// GET /tasks — alle Aufgaben abrufen CROW_ROUTE(app, "/tasks") .methods("GET"_method) ([](){ json j = json::array(); for (const auto& t : tasks) { j.push_back({{"id", t.id}, {"title", t.title}, {"completed", t.completed}}); } return crow::response(j.dump()); });
app.port(8080).multithreaded().run();}Dieser Code startet einen HTTP-Server auf Port 8080. Bei einer GET-Anfrage an /tasks