GraphQL Bibliothek PHP: webonyx/graphql-php und Lighthouse
GraphQL ist eine Abfragesprache für APIs, die es Clients ermöglicht, nur die benötigten Daten anzufragen. Im PHP-Ökosystem ist die wichtigste Bibliothek zur Implementierung von GraphQL webonyx/graphql-php. Sie bietet einen vollständigen Satz von Werkzeugen zur Erstellung von Schemata, Typen und Resolvern. Für das Laravel-Framework gibt es das Paket Lighthouse, das die Möglichkeiten von graphql-php erweitert und die Entwicklung vereinfacht.
Installation von webonyx/graphql-php
Die Installation erfolgt über Composer:
composer require webonyx/graphql-phpErstellung von Schema und Typen
Die Grundlage von GraphQL ist ein Schema, das die Datentypen und ihre Beziehungen definiert. Betrachten wir ein Beispiel zur Erstellung eines einfachen Schemas zum Abrufen einer Benutzerliste.
<?phpuse GraphQL\\Type\\Definition\\ObjectType;use GraphQL\\Type\\Definition\\Type;use GraphQL\\Type\\Schema;use GraphQL\\GraphQL;
// Definieren des Typs User$userType = new ObjectType([ 'name' => 'User', 'fields' => [ 'id' => Type::int(), 'name' => Type::string(), 'email' => Type::string(), ]]);
// Definieren des Typs Query (Root-Typ für Abfragen)$queryType = new ObjectType([ 'name' => 'Query', 'fields' => [ 'user' => [ 'type' => $userType, 'args' => [ 'id' => Type::nonNull(Type::int()) ], 'resolve' => function ($root, $args) { // Beispieldaten - in einem echten Projekt würde hier eine Datenbankabfrage stehen $users = [ 1 => ['id' => 1, 'name' => 'Ivan', 'email' => 'ivan@example.com'], 2 => ['id' => 2, 'name' => 'Maria', 'email' => 'maria@example.com'], ]; return $users[$args['id']] ?? null; } ], 'users' => [ 'type' => Type::listOf($userType), 'resolve' => function () { return [ ['id' => 1, 'name' => 'Ivan', 'email' => 'ivan@example.com'], ['id' => 2, 'name' => 'Maria', 'email' => 'maria@example.com'], ]; } ] ]]);
// Schema erstellen$schema = new Schema([ 'query' => $queryType]);
// Abfrage ausführen$rawInput = file_get_contents('php://input');$input = json_decode($rawInput, true);$query = $input['query'];$result = GraphQL::executeQuery($schema, $query);$output = $result->toArray();
header('Content-Type: application/json');echo json_encode($output);Arbeit mit Mutationen
Neben Abfragen (Query) unterstützt GraphQL Mutationen zur Änderung von Daten. Beispiel für die Erstellung einer Mutation zum Hinzufügen eines Benutzers:
<?php// Definieren des Mutationstyps$mutationType = new ObjectType([ 'name' => 'Mutation', 'fields' => [ 'addUser' => [ 'type' => $userType, 'args' => [ 'name' => Type::nonNull(Type::string()), 'email' => Type::nonNull(Type::string()) ], 'resolve' => function ($root, $args) { // Hier sollte der Code zum Speichern in der Datenbank stehen return [ 'id' => 3, 'name' => $args['name'], 'email' => $args['email'] ]; } ] ]]);
// Schema aktualisieren$schema = new Schema([ 'query' => $queryType, 'mutation' => $mutationType]);Verwendung von Lighthouse für Laravel
Wenn Sie mit Laravel arbeiten, wird die Verwendung von Lighthouse empfohlen. Es automatisiert die Erstellung des Schemas auf Basis von Eloquent-Modellen und bietet
Auch in der Bibliothek
Arbeit mit Apache Kafka in Node.js: Bibliothek KafkaJS
Arbeiten mit Markdown in Kotlin: Bibliotheken und Parser
PDF-Berichterstellung mit C# (.NET): iTextSharp, QuestPDF, PDFsharp
Geolokalisierung und Karten in JavaScript (Node.js): Bibliotheken und Werkzeuge