GraphQL API mit C++: Schritt-für-Schritt-Tutorial für Anfänger
GraphQL ist eine moderne Abfragesprache für APIs, die es Clients ermöglicht, nur die Daten anzufordern, die sie wirklich benötigen. Im Gegensatz zu REST, wo die Antwortstruktur festgelegt ist, bietet GraphQL Flexibilität und Kontrolle. In diesem Tutorial werden wir durchgehen, wie man eine einfache GraphQL API in C++ von Grund auf erstellt. Sie erfahren, wie Sie die Bibliothek graphql-cpp einbinden, ein Schema definieren, Resolver schreiben und Abfragen testen. Der Artikel richtet sich an Anfänger, die mit den Grundlagen von C++ vertraut sind.
Warum C++? Diese Sprache bietet eine hohe Leistung, die für stark ausgelastete APIs entscheidend ist. GraphQL in C++ wird häufig in Echtzeitsystemen, Spiele-Engines und hochbelasteten Webdiensten verwendet. Los geht's!
Installation und Einrichtung der Umgebung
Für die Arbeit benötigen wir einen Compiler mit C++17-Unterstützung (z. B. GCC 8+ oder Clang 10+), CMake und die Bibliothek graphql-cpp. Installieren wir alles Notwendige.
Schritt 1: Installation der Abhängigkeiten
Führen Sie unter Ubuntu/Debian Folgendes aus:
sudo apt updatesudo apt install build-essential cmake libboost-all-dev libssl-devVerwenden Sie für macOS Homebrew:
brew install cmake boost opensslSchritt 2: Klonen der Bibliothek graphql-cpp
Die Bibliothek graphql-cpp ist eine leichtgewichtige Implementierung von GraphQL in C++. Klonen Sie das Repository:
git clone https://github.com/your-repo/graphql-cpp.gitcd graphql-cppmkdir build && cd buildcmake .. -DCMAKE_BUILD_TYPE=Releasemake -j4sudo make installNach der Installation erstellen wir ein neues Projekt. Die Ordnerstruktur:
my_graphql_api/├── CMakeLists.txt├── src/│ ├── main.cpp│ └── schema.cpp└── include/ └── schema.hSchritt 3: Konfiguration von CMakeLists.txt
Erstellen Sie die Datei CMakeLists.txt:
cmake_minimum_required(VERSION 3.10)project(GraphQLExample)
set(CMAKE_CXX_STANDARD 17)
find_package(graphql-cpp REQUIRED)find_package(Boost REQUIRED COMPONENTS system)
add_executable(graphql_example src/main.cpp src/schema.cpp)target_include_directories(graphql_example PRIVATE include)target_link_libraries(graphql_example graphql-cpp::graphql-cpp Boost::system)Definition des GraphQL-Schemas
Das Schema ist der Kern einer GraphQL API. Es beschreibt die Datentypen, Abfragen (Queries) und Mutationen (Mutations). In unserem Beispiel erstellen wir eine API zur Verwaltung einer Liste von Büchern.
Erstellen des Typs Book
In der Datei include/schema.h deklarieren wir eine Datenstruktur und eine Funktion zum Erstellen des Schemas:
#ifndef SCHEMA_H#define SCHEMA_H
#include <graphql-cpp/graphql.hpp>#include <string>#include <vector>
struct Book { int id; std::string title; std::string author; int year;};
graphql::Schema createBookSchema();
#endif // SCHEMA_HImplementierung des Schemas
In der Datei src/schema.cpp definieren wir die Typen und die Root-Abfrage:
#include "schema.h"#include <graphql-cpp/graphql.hpp>#include <vector>#include <memory>
using namespace graphql;
// Temporärer Buchspeicherstd::vector<Book> books = { {1, "C++ Primer", "Stanley B. Lippman", 2012}, {2, "Effective Modern C++", "Scott Meyers", 2014}};
Schema createBookSchema() { // 1. Typ Book definieren ObjectType bookType("Book"); bookType.addField("id", Type::NonNull(Type::Int())); bookType.addField("title", Type::NonNull(Type::String())); bookType.addField("author", Type::NonNull(Type::String())); bookType.addField("year", Type::Int());
// 2. Root-Abfrage definieren ObjectType queryType("Query"); queryType.addField("books", Type::List(Type::NonNull(bookType)), [](const auto& args) -> json { json result =