API in PHP: REST, GraphQL und gRPC – was wählt man 2025?

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung: API – das ist keine Magie, sondern ein Werkzeug

\n

Wenn Ihre PHP-Website aufhört, eine statische Seite zu sein und beginnt, mit der Außenwelt zu kommunizieren – mit Telegram-Bots, Zahlungsgateways oder Ihrer eigenen mobilen App – stoßen Sie unweigerlich auf API (Application Programming Interface). Es ist einfach ein Vertrag: „Wenn du mir eine Anfrage in diesem Format sendest, gebe ich dir die Daten zurück.“ Heute gibt es auf der PHP-Bühne drei Hauptakteure: das klassische REST, das flexible GraphQL und das kühne gRPC. Welches wählen? Lassen Sie es uns anhand von Live-Beispielen herausfinden.

\n

Der Artikel richtet sich an diejenigen, die bereits PHP schreiben können und ihren Horizont erweitern möchten. Wir werden nicht einfach die Dokumentation kopieren, sondern jedes Protokoll mit den Augen eines Entwicklers betrachten, der eine reale Aufgabe löst.

\n\n

REST API in PHP: Bewährte Klassik

\n

REST (Representational State Transfer) ist kein Protokoll, sondern ein Architekturstil. Es verwendet HTTP-Methoden (GET, POST, PUT, DELETE) zur Arbeit mit Ressourcen. Wenn Sie jemals file_get_contents('https://api.example.com/users') geschrieben haben – haben Sie bereits mit REST gearbeitet.

\n

Warum bleibt REST der König?

\n
    \n
  • Einfachheit: Jeder HTTP-Client kann damit arbeiten.
  • \n
  • Caching: Auf HTTP-Ebene können GET-Anfragen gecacht werden.
  • \n
  • Breite Unterstützung: Von curl bis zu spezialisierten Bibliotheken.
  • \n
\n

Beispiel eines REST-Clients in PHP mit Guzzle

\n

Die Bibliothek Guzzle ist der De-facto-Standard für HTTP-Anfragen in PHP. Installieren Sie sie über Composer: composer require guzzlehttp/guzzle.

\n
<?php\nrequire 'vendor/autoload.php';\n\nuse GuzzleHttp\\Client;\n\n$client = new Client([\n    'base_uri' => 'https://jsonplaceholder.typicode.com/',\n    'timeout'  => 5.0,\n]);\n\n// GET-Anfrage\n$response = $client->get('posts/1');\n$post = json_decode($response->getBody(), true);\necho "Beitragstitel: " . $post['title'] . PHP_EOL;\n\n// POST-Anfrage\n$response = $client->post('posts', [\n    'json' => [\n        'title' => 'Neuer Beitrag',\n        'body' => 'Beitragstext',\n        'userId' => 1\n    ]\n]);\necho "Beitrag mit ID erstellt: " . json_decode($response->getBody(), true)['id'];\n?>
\n

Was haben wir gemacht? Einfach HTTP-Anfragen gesendet. REST erfordert keine spezielle Bibliothek – man kann sogar file_get_contents() mit Kontext verwenden, aber Guzzle bietet eine bequeme Fehlerbehandlung, Middleware und Streaming.

\n

Wann ist REST nicht die beste Wahl?

\n

Wenn Sie zusammenhängende Daten abrufen müssen (z. B. Beitrag + Autor + Kommentare), zwingt REST Sie zu mehreren Anfragen. Hier kommt GraphQL ins Spiel.

\n\n

GraphQL in PHP: Fordere nur das an, was du brauchst

\n

GraphQL ist eine von Facebook entwickelte Abfragesprache. Der Client beschreibt selbst die Struktur der Antwort. Eine Anfrage – eine Antwort, ohne Über- oder Unterversorgung mit Daten.

\n

Wie funktioniert GraphQL in PHP?

\n

Serverseite: die Bibliothek webonyx/graphql-php (Installation: composer require webonyx/graphql-php). Clientseite – eine normale HTTP-POST-Anfrage mit JSON-Body.

\n

Beispiel einer GraphQL-Abfrage aus PHP

\n
<?php\nrequire 'vendor/autoload.php';\n\nuse GuzzleHttp\\Client;\n\n$client = new Client(['base_uri' => 'https://countries.trevorblades.com/']);\n\n$query = '\nquery GetCountry {\n    country(code: "RU") {\n        name\n        capital\n        currency\n        languages {\n            name\n        }\n    }\n}';\n\n$response = $client->post('', [\n    'json' => ['query' => $query]\n]);\n\n$data = json_decode($response->getBody(), true);\necho "Land: " . $data['data']['country']['name'] . PHP_EOL;\necho "Hauptstadt: " . $data['data']['country']['capital'] . PHP_EOL;\necho "Währung: " . $data['data']['country']['currency'] . PHP_EOL;\necho "Sprachen: ";\nforeach ($data['data']['country']['languages'] as $lang) {\n    echo $lang['name'] . " ";\n}\n?>

                
                

Blogs

Buchempfehlungen