GraphQL-Bibliothek für C++: API-Implementierung mit graphql-cpp

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

GraphQL-Bibliothek für C++: graphql-cpp



In der Welt moderner Webtechnologien ist GraphQL zum Standard für die Erstellung flexibler und effizienter APIs geworden. Wenn Sie in C++ entwickeln und die Unterstützung dieses Protokolls implementieren möchten, benötigen Sie eine zuverlässige Bibliothek. Eine der besten Lösungen ist graphql-cpp – eine Open-Source-Bibliothek, mit der Sie vollwertige GraphQL-Server in C++ mit minimalem Aufwand erstellen können.



Was ist graphql-cpp?

graphql-cpp ist eine schlanke, aber leistungsstarke Bibliothek, die die GraphQL-Spezifikation (Juni 2018) in C++14 und höher implementiert. Sie bietet alle notwendigen Komponenten: einen Query-Parser, ein Typsystem, eine Query-Ausführungs-Engine und Unterstützung für Subscriptions. Die Bibliothek ist unabhängig von externen HTTP-Frameworks, sodass sie in jedes Projekt integriert werden kann – von eingebetteten Systemen bis hin zu hochbelasteten Servern.



Wichtige Funktionen

  • Vollständige GraphQL-Schema-Unterstützung: Objekte, Interfaces, Union-Typen, Enum, Skalare und Input-Typen.
  • Query-Validierung und -Ausführung: Integrierter Validator und Executor mit Unterstützung für komplexe Abfragen, Fragmente und Direktiven.
  • Unterstützung für Subscriptions: Implementierung über reaktive Streams.
  • Anpassbare Resolver: Flexibles System zur Anbindung von Geschäftslogik an Schemafelder.
  • Kompatibilität mit C++17/20: Nutzung moderner Sprachfeatures für maximale Leistung.
  • Keine Abhängigkeiten: Erfordert kein Boost, POCO oder andere externe Bibliotheken.


Installation und Einbindung

Die Bibliothek wird als Header-only (nur Header-Dateien) verteilt. Zur Installation klonen Sie das Repository:

git clone https://github.com/your-repo/graphql-cpp.gitcd graphql-cppmkdir build && cd buildcmake ..makesudo make install

In Ihrem Projekt genügt es, eine einzige Header-Datei einzubinden:

#include <graphqlcpp/GraphQL.h>


Beispiel: Erstellung einer einfachen API

Betrachten wir die Erstellung eines Schemas zum Abrufen von Benutzerinformationen.



1. Schema-Definition

using namespace graphqlcpp;

auto schema = Schema::create(R"( type Query { user(id: ID!): User users: [User] } type User { id: ID! name: String! email: String })");


2. Implementierung der Resolver

// Beispiel-Datenspeicherstd::map<std::string, User> users = {    {"1", {"1", "Alice", "alice@example.com"}},    {"2", {"2", "Bob", "bob@example.com"}}};

// Resolver für das Feld userschema->addResolver("Query", "user", [](const ResolverArgs& args) { auto id = args.getArgument<std::string>("id"); if (users.count(id)) return users[id]; return nullptr; // null, wenn Benutzer nicht gefunden});

// Resolver für das Feld usersschema->addResolver("Query", "users", [](const ResolverArgs&) { std::vector<User> result; for (const auto& [_, user] : users) { result.push_back(user); } return result;});


3. Abfrageverarbeitung

std::string query = R"(    {        user(id: "1") {            name            email        }    })";

auto result = schema->execute(query);std::cout << result.dump(2) << std::endl;

Ausgabe:

{  "data": {    "user": {      "name": "Alice",      "email": "alice@example.com"    }  }}


Vorteile für eine Bildungswebsite

  • Verständliche Dokumentation: Die Bibliothek enthält ausführliche Code-Kommentare und Beispiele für jeden Typ.
  • Niedrige Einstiegshürde: Für den Einstieg reichen Grundkenntnisse in C++ und grundlegende Konzepte aus.

Empfehlungen