Swagger/OpenAPI Generierung für C++: Die besten Tools und Bibliotheken

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

Swagger/OpenAPI Generierung für C++: Wie man die Erstellung von REST APIs automatisiert

\n\n

Moderne Webentwicklung mit C++ erfordert effiziente Werkzeuge zur Erstellung von REST APIs. Die OpenAPI-Spezifikation (früher Swagger) hat sich als Standard für die Beschreibung von Webservice-Schnittstellen etabliert. Die automatische Codegenerierung in C++ aus OpenAPI-Spezifikationen ist jedoch eine anspruchsvolle Aufgabe. In diesem Artikel analysieren wir die besten Bibliotheken und Tools, die Ihnen helfen, Server- und Client-Code in C++ aus OpenAPI-Dokumenten zu generieren.

\n\n

Warum hinkt C++ bei der OpenAPI-Generierung hinter anderen Sprachen hinterher?

\n

Im Gegensatz zu Python, Java oder JavaScript, für die es ausgereifte Generatoren gibt (z.B. openapi-generator), steht C++ vor mehreren Herausforderungen:

\n
    \n
  • Fehlen eines einheitlichen Standards für HTTP-Frameworks — in C++ gibt es kein dominierendes Webframework wie Flask oder Spring.
  • \n
  • Komplexität der Speicherverwaltung — die Generierung von sicherem Code mit Smart Pointern erfordert zusätzliche Vorlagen.
  • \n
  • Vielfalt der Typen — JSON-Serialisierung in C++ erfordert manuelle Konfiguration für komplexe Strukturen.
  • \n
\n\n

Wichtigste Tools zur Generierung von C++-Code aus OpenAPI

\n\n

1. OpenAPI Generator (offizieller Generator)

\n

Das bekannteste Tool ist der OpenAPI Generator (früher Swagger Codegen). Er unterstützt viele Sprachen, einschließlich C++. Allerdings ist seine C++-Unterstützung eingeschränkt: Es wird nur Client-Code auf Basis von cpprestsdk (Casablanca) oder Qt generiert.

\n

Installation:

\n
# Über npm\nnpm install @openapitools/openapi-generator-cli -g\n\n# Generierung eines C++-Clients (cpprestsdk)\nopenapi-generator generate -i petstore.yaml -g cpp-restsdk -o ./client
\n

Beispiel für generierten Code (Qt):

\n
// PetApi.h\nclass PetApi : public AbstractOpenAPISchema {\n    Q_OBJECT\npublic:\n    explicit PetApi(QObject *parent = nullptr);\n    \n    void addPet(const Pet &body);\n    void getPetById(qint64 petId);\n    \nsignals:\n    void addPetSignal(Pet &result);\n    void getPetByIdSignal(Pet &result);\n};
\n

Vorteile: Unterstützung vieler Formate, aktive Community.
\nNachteile: Der generierte Code erfordert oft Nacharbeit; keine Server-Generierung für C++.

\n\n

2. oat++ (oatpp) — Framework mit OpenAPI-Unterstützung

\n

oat++ ist ein modernes C++-Framework zur Erstellung von REST APIs, das integrierte OpenAPI-Unterstützung bietet. Im Gegensatz zu Generatoren verwendet oat++ einen deklarativen Ansatz mit Annotationen.

\n

Beispiel für die Beschreibung eines Endpunkts:

\n
ENDPOINT("GET", "/users/{userId}", getUser) {\n    auto userId = req->getPathVariable("userId");\n    auto user = userService->getUser(userId);\n    \n    // Automatische OpenAPI-Dokumentation\n    auto dto = UserDto::createShared();\n    dto->id = user->id;\n    dto->name = user->name;\n    return createDtoResponse(Status::CODE_200, dto);\n}
\n

Oat++ generiert automatisch openapi.yaml basierend auf den Annotationen. Dadurch muss die Spezifikation nicht manuell geschrieben werden, sondern wird aus dem Code abgeleitet.

\n\n

3. Restbed + Swagger UI

\n

Restbed ist ein leichtgewichtiges HTTP-Framework für C++11. In Kombination mit der Bibliothek restbed-swagger kann dynamisch eine OpenAPI-Dokumentation generiert werden.

\n
#include <restbed>\n#include <restbed-swagger>\n\nauto resource = std::make_shared<restbed::Resource>();\nresource->set_path("/api/users/{id}");\n\n// Beschreibung der Parameter für Swagger\nrestbed::swagger::Info info;\ninfo.set_title("User API");\ninfo.set_version("1.0.0");\n\nauto swagger = std::make_shared<restbed::swagger::Service>(info);\nswagger->publish(resource);
\n\n

4. Crow — Mikroframework mit OpenAPI-Erweiterung

\n

Crow ist ein

Empfehlungen