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 installIn 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.
Auch in der Bibliothek
Maschinelles Lernen: TypeScript-Bibliotheken für Browser und Node.js
OneOf für C# (.NET): Vollständige Anleitung mit Beispielen
Redis-Client in Rust: Vollständige Anleitung zur Arbeit mit der Bibliothek redis-rs
OAuth-Client für PHP: Integration mit Google, GitHub und VK
PDF-Berichterstellung mit C# (.NET) mit iTextSharp und QuestPDF