Einleitung: API – das ist keine Magie, sondern ein Werkzeug
\nWenn 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.
\nDer 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\nREST API in PHP: Bewährte Klassik
\nREST (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.
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
Beispiel eines REST-Clients in PHP mit Guzzle
\nDie Bibliothek Guzzle ist der De-facto-Standard für HTTP-Anfragen in PHP. Installieren Sie sie über Composer: composer require guzzlehttp/guzzle.
<?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?>\nWas 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.
Wann ist REST nicht die beste Wahl?
\nWenn Sie zusammenhängende Daten abrufen müssen (z. B. Beitrag + Autor + Kommentare), zwingt REST Sie zu mehreren Anfragen. Hier kommt GraphQL ins Spiel.
\n\nGraphQL in PHP: Fordere nur das an, was du brauchst
\nGraphQL ist eine von Facebook entwickelte Abfragesprache. Der Client beschreibt selbst die Struktur der Antwort. Eine Anfrage – eine Antwort, ohne Über- oder Unterversorgung mit Daten.
\nWie funktioniert GraphQL in PHP?
\nServerseite: die Bibliothek webonyx/graphql-php (Installation: composer require webonyx/graphql-php). Clientseite – eine normale HTTP-POST-Anfrage mit JSON-Body.
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
Lesen Sie auch
KaptExecution in Kotlin: Was hinter dem Gradle-Fehler steckt
Warum der Datumsunterschied im Jahr 1927 den Code zerstört? Top Java-Fehler
require, include, require_once, include_once in PHP: vollständige Anleitung mit Beispielen
Parallelität und Multithreading in PHP: Von A bis Z
(change) vs (ngModelChange) in Angular: Was wählen im Jahr 2024?