Einführung in GraphQL und PHP
GraphQL ist eine Abfragesprache für APIs und eine Laufzeitumgebung zur Ausführung dieser Abfragen mit vorhandenen Daten. Im Gegensatz zu REST, wo Sie eine feste Antwortstruktur erhalten, ermöglicht GraphQL dem Client, nur die Daten anzufragen, die er tatsächlich benötigt. Das macht die API flexibler und effizienter.
In diesem Tutorial erstellen wir eine einfache GraphQL API mit PHP von Grund auf. Sie erfahren, wie Sie die notwendigen Bibliotheken installieren, ein Schema definieren, Resolver schreiben und Abfragen verarbeiten. Der Artikel richtet sich an Anfänger, die mit den Grundlagen von PHP und Datenbanken (z. B. MySQL oder SQLite) vertraut sind.
Wir verwenden die Bibliothek webonyx/graphql-php – das ist das beliebteste und stabilste Paket zur Implementierung von GraphQL in PHP. Am Ende können Sie Ihren eigenen GraphQL-Server starten und Abfragen über jeden HTTP-Client (z. B. cURL oder Insomnia) an ihn senden.
Installation und Einrichtung des Projekts
Schritt 1: Projekt erstellen und Abhängigkeiten installieren
Erstellen Sie zunächst ein neues Verzeichnis für das Projekt und initialisieren Sie Composer:
mkdir graphql-php-tutorialcd graphql-php-tutorialcomposer initInstallieren Sie dann die Bibliothek webonyx/graphql-php:
composer require webonyx/graphql-phpAußerdem benötigen wir einen PSR-7-kompatiblen HTTP-Server. Der Einfachheit halber verwenden wir den integrierten PHP-Server und die Bibliothek guzzlehttp/psr7 für die Arbeit mit Anfragen und Antworten:
composer require guzzlehttp/psr7Schritt 2: Projektstruktur
Erstellen Sie die folgende Dateistruktur:
index.php– Einstiegspunkt der Anwendungschema.graphql– Datei mit der Definition des GraphQL-Schemasresolvers.php– Datei mit den Resolver-Funktionendata.php– Simulation einer Datenbank (Array mit Daten)
Definition des GraphQL-Schemas
Schritt 3: Schema schreiben
Das Schema ist die Beschreibung der Datentypen und verfügbaren Operationen (Abfragen und Mutationen). Erstellen wir ein einfaches Schema zur Verwaltung einer Bücherliste. Öffnen Sie die Datei schema.graphql und fügen Sie den folgenden Code ein:
type Book { id: ID! title: String! author: String! year: Int}
type Query { books: [Book] book(id: ID!): Book}
type Mutation { addBook(title: String!, author: String!, year: Int): Book deleteBook(id: ID!): Book}Hier haben wir definiert:
- Book – Datentyp mit den Feldern id, title, author und year.
- Query – Operationen zum Abrufen von Daten: Liste aller Bücher und ein Buch nach ID.
- Mutation – Operationen zum Ändern von Daten: Hinzufügen und Löschen eines Buches.
Schritt 4: Daten und Resolver vorbereiten
Erstellen Sie die Datei data.php mit einem Array von Büchern:
<?php$books = [ 1 => ['id' => 1, 'title' => 'Krieg und Frieden', 'author' => 'Leo Tolstoi', 'year' => 1869], 2 => ['id' => 2, 'title' => 'Verbrechen und Strafe', 'author' => 'Fjodor Dostojewski', 'year' => 1866],];Schreiben wir nun die Resolver in der Datei resolvers.php. Resolver sind Funktionen, die die Daten für jedes Feld des Schemas zurückgeben.
<?phprequire 'data.php';
function resolveBooks() { global $books; return array_values($books);}
function resolveBook($root, $args) { global $books; return $books[$args['id']] ?? null;}
function resolveAddBook($root, $args) { global $books; $newId = count($books) + 1; $newBook = [ 'id' => $newId, 'title' => $args['title'], 'author' => $args['author'], 'year' => $args['year'] ?? null ]; $books[$newId] = $newBook; return $newBook;}
function resolveDeleteBook($root, $args) { global $books;