Einleitung: Warum GraphQL und PHP ein großartiges Team sind
In der Welt der Webentwicklung war REST API lange Zeit der De-facto-Standard. Mit der zunehmenden Komplexität von Anwendungen und dem Aufkommen mobiler Clients wurden die Nachteile von REST jedoch offensichtlich: Datenüberfluss oder -mangel, viele Endpunkte, komplexe Versionierung. GraphQL, entwickelt von Facebook, löst diese Probleme, indem es dem Client ermöglicht, nur die Daten anzufragen, die er benötigt, und diese in einer einzigen Anfrage zu erhalten.
PHP ist trotz seiner "alten Schule" nach wie vor eine leistungsstarke Sprache für die serverseitige Logik. Dank moderner Bibliotheken wie webonyx/graphql-php ist die Implementierung einer GraphQL API in PHP einfach und effizient geworden. In diesem Tutorial erstellen wir Schritt für Schritt einen vollwertigen GraphQL-Server, der Abfragen, Mutationen verarbeiten und mit einer Datenbank arbeiten kann.
Wir verwenden PHP 8.0+, Composer zur Verwaltung der Abhängigkeiten und den integrierten PHP-Server für lokale Tests. Am Ende des Artikels können Sie Ihre eigene API bereitstellen und in jedes Frontend integrieren.
1. Installation und Einrichtung der Umgebung
Bevor wir Code schreiben, müssen wir das Projekt vorbereiten. Stellen Sie sicher, dass PHP 8.0+ und Composer installiert sind. Erstellen Sie einen neuen Ordner für das Projekt und wechseln Sie hinein:
mkdir graphql-php-tutorialcd graphql-php-tutorialInstallieren Sie nun die Hauptbibliothek webonyx/graphql-php mit Composer:
composer require webonyx/graphql-phpFür die Datenbankarbeit verwenden wir PDO, das in PHP integriert ist. Zusätzlich installieren wir eine Bibliothek zum bequemen Parsen von Abfragen:
composer require graphql-php/graphql-phpErstellen Sie die Datei index.php – dies wird der Einstiegspunkt unserer Anwendung sein. Richten Sie den Composer-Autoloader und die grundlegende Struktur ein:
<?phprequire_once __DIR__ . '/vendor/autoload.php';
use GraphQL\\GraphQL;use GraphQL\\Type\\Schema;use GraphQL\\Type\\Definition\\ObjectType;use GraphQL\\Type\\Definition\\Type;
// Hier kommt unsere LogikErstellen Sie außerdem eine Datei schema.graphql zur Speicherung des Schemas im Textformat (optional, aber praktisch für größere Projekte).
2. Definition des Schemas und der Datentypen
Das Herzstück jeder GraphQL API ist das Schema. Es beschreibt, welche Daten verfügbar sind und wie darauf zugegriffen werden kann. In unserem Beispiel erstellen wir ein einfaches Modell für Benutzer (User) und Beiträge (Post).
Beginnen wir mit der Definition der Typen. Fügen Sie in der Datei index.php die folgenden Klassen hinzu:
// Typ User$userType = new ObjectType([ 'name' => 'User', 'fields' => [ 'id' => Type::int(), 'name' => Type::string(), 'email' => Type::string(), 'posts' => [ 'type' => Type::listOf($postType), 'resolve' => function ($user) use ($db) { // Resolver-Funktion zum Laden der Beiträge eines Benutzers $stmt = $db->prepare('SELECT * FROM posts WHERE user_id = :id'); $stmt->execute([':id' => $user['id']]); return $stmt->fetchAll(PDO::FETCH_ASSOC); } ] ]]);
// Typ Post$postType = new ObjectType([ 'name' => 'Post', 'fields' => [ 'id' => Type::int(), 'title' => Type::string(), 'content' => Type::string(), 'author' => [ 'type' => $userType, 'resolve' => function ($post) use ($db) { $stmt = $db->prepare('SELECT * FROM users WHERE id = :id'); $stmt->execute([':id' => $post['user_id']]); return $stmt->fetch(PDO::FETCH_ASSOC); } ] ]]);Beachten Sie die Resolver – dies sind Funktionen, die festlegen, wie die Daten für jedes Feld abgerufen werden. Im obigen Beispiel verwenden wir PDO für Datenbankabfragen.
Erstellen Sie nun d