Zur Vorbereitung habe ich mir gedacht, dass ich einen Blick darauf werfe, wie HTTP im Allgemeinen funktioniert und wie du mit nativen WordPress Funktionen damit arbeiten kannst, um deine Produkte für die Integration mit Twitter, Facebook, Mailchimp und allen möglichen anderen Tools zu öffnen.

In diesem Artikel – Teil 1 von 2 – zeige ich dir die Grundlagen von HTTP-Anfragen, wie sie aufgebaut sind, welche Informationen sie enthalten und wie man sie sinnvoll nutzen kann. In Teil 2 werden wir unser Wissen in die Praxis umsetzen – durch WordPress.

Was ist HTTP

HTTP ist das Hauptprotokoll, das heute im Web verwendet wird. Es steht für Hypertext Transfer Protocol und ist dafür verantwortlich, dir HTML, Bilder und mehr zu zeigen. HTTP-Clients – wie dein Browser – senden Anfragen an HTTP-Server, die eine Antwort zurücksenden.

Wenn du zum Beispiel deinen Browser auf Kinsta.com richtest, sendest du eine Anfrage an die Server von Kinsta. Der Server liest deine Anfrage, findet heraus, was du brauchst (wir werden bald darüber sprechen, wie das passiert) und schickt eine Antwort zurück, die den HTML-Code für die Seite enthält. Dein Browser liest die Antwort und rendert den HTML-Code für dich auf dem Bildschirm.

Grundlagen der HTTP-Anfrage

Jede Transaktion zwischen einem Client und einem Server beginnt mit einer HTTP-Anfrage. Die zwei wichtigsten Teile einer Anfrage sind der Methodenname und die URL der angeforderten Ressource. Lass uns mit letzterem beginnen.

Ressourcen

Eine Ressource ist ein Teil von Daten, der mit einer URL identifiziert werden kann. Zum Beispiel: http://myblog.com/my-awesome-article wird wahrscheinlich eine HTML-Datei zurückgeben – den Code, der benötigt wird, um deinen tollen Artikel darzustellen.

Methoden-Namen

Methodennamen identifizieren die Art der Aktion, die du mit der Ressource durchführen willst. Browser verwenden fast immer GET, was anzeigt, dass du die Ressource abrufen möchtest.

Andere Methoden sind POST für das Erstellen neuer Artikel, PUT für das Aktualisieren von Artikeln, DELETE für das Löschen von Artikeln und HEAD für das Abrufen von Header-Informationen.

Diese Methodennamen bilden zusammen mit den URLs die Basis der REST APIs. Du könntest eine get-Anfrage an /article/4 senden, um Artikel 4 abzurufen. Du könntest auch eine PUT-Anfrage zusammen mit einigen Daten senden, um sie zu ändern, oder eine DELETE-Anfrage, um sie zu entfernen.

Die Struktur von HTTP

HTTP-Anfragen und -Antworten sind von der Struktur her sehr ähnlich. Jede von ihnen hat vier verschiedene Teile:

  • Eine Anfangszeile, die für die Anfrage und die Antwort unterschiedlich ist
  • Optionale Kopfzeilen, die Informationen über die Anfrage oder Antwort enthalten
  • Eine leere Zeile
  • Optionaler Inhalt des Bodys

1. Die Anfangszeile

Bei Anfragen enthält die Anfangszeile drei Informationen: den Methodennamen, den Ressourcenpfad und die verwendete HTTP-Version. Hier ist, wie es aussehen könnte:

GET /users/4 HTTP/1.1

Beachte, dass diese Zeile den lokalen relativen Pfad enthält, nicht die vollständige URL. Die Basis-URL wird in einem Header (dem Host-Header) gesendet, wir werden uns die Header bald ansehen.

Antworten enthalten ebenfalls drei Informationen: die HTTP-Version, den Statuscode und einen Grund, der den Statuscode beschreibt.

HTTP/1.1 302 Moved Temporarily

Für eine Liste aller Status Codes und ein wenig über jeden einzelnen, wirf einen Blick auf die HTTP Status Codes Spezifikation, dort ist alles ziemlich klar.

2. Header

Header sind im Wesentlichen Name-Wert-Paare von Informationen. Der bereits erwähnte Host Header ist ein gutes Beispiel, tatsächlich ist es der einzige erforderliche Header in HTTP 1.1. Header geben dir mehr Kontrolle und mehr Informationen.

Mit dem Accept-Header kannst du den Typ des Inhalts angeben, den du in einer Anfrage zulässt. Der Accept-Language Header lässt dich die Sprache des Inhalts kontrollieren, den du akzeptieren willst. Beides sind Formen der Inhaltsaushandlung.

Der Authorization-Header ist ein Header, den du häufig verwenden wirst, wenn du mit APIs arbeitest, um auf autorisierte Aktionen zuzugreifen, wie das Löschen eines Tweets oder den Zugriff auf dein Benutzerkonto.

3. Body

Der Body ist der Bereich, in dem die Ressource zurückgegeben wird, oder in dem weitere Erklärungen gegeben werden können, wenn du auf einen Fehler gestoßen bist. Du kannst eine Sprache deiner Wahl verwenden, um die Daten aus dem Body zu lesen und anzuzeigen, oder es intern verwenden, um mit Fehlern umzugehen.

HTTP benutzen

Ich habe festgestellt, dass das Verständnis von HTTP enorm hilfreich war, als ich die Dokumentation für APIs von Drittanbietern ausgehandelt habe. Was die Verwendung von HTTP verkompliziert, ist, dass man es normalerweise innerhalb einer Programmiersprache verwendet, was bedeutet, dass man sowohl mit der Implementierung von HTTP in dieser Sprache als auch mit HTTP selbst vertraut sein muss.

Sobald du die Anfrage gestellt hast, musst du die Antwort lesen und wissen, welche Informationen du aus ihr entnehmen kannst, vielleicht sogar die Antwort durch einige Funktionen laufen lassen, um sie in das benötigte Format zu konvertieren. Sobald du diese Informationen hast, kannst du sie anzeigen, in einer Datenbank speichern oder anderweitig manipulieren.

HTTP selbst ist nicht schwierig, aber die Aufgaben, die du neben dem Senden und Empfangen einer Anfrage durchführen musst, können sich schnell summieren und die Einfachheit von HTTP in einem Schleier der Komplexität verbergen. Zusätzlich erfordern viele APIs eine Authentifizierung, was dem Ganzen eine weitere Ebene hinzufügt.

cURL

cURL ist eine Möglichkeit, mit HTTP zu interagieren, ist aber ziemlich komplex. Es kann vom Terminal aus benutzt werden, aber auch PHP hat cURL Support. Um den Inhalt einer URL abzufragen, kannst du das Folgende im Terminal verwenden.

curl http://kinsta.com

Das Problem ist, dass die Verwendung von cURL im Terminal etwas kompliziert werden kann. Um nur die Header-Informationen anzuzeigen, müsstest du die folgende Form verwenden:

curl -s -D - http://danielpataki.com -o /dev/null

Du kannst dir eine Liste aller Parameter ansehen, aber wahrscheinlich wirst du cURL in deiner Webanwendung verwenden, also lass uns cURL in PHP anschauen, hier ist, wie man den Inhalt der gleichen Seite bekommt:

$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$data = curl_exec($ch);
curl_close($ch);
echo $data;

Das ist immer noch ein bisschen klobig, aber mit Hilfe des PHP Guides kannst du herausfinden, was was ist.

WordPress benutzen

cURL ist großartig, aber das Hinzufügen von Headern und der Umgang mit zurückgegebenen Informationen ist nicht so einfach, wie du es vielleicht gewohnt bist, wenn du mit schön kodierten PHP-Klassen und Funktionen gearbeitet hast. Glücklicherweise hat WordPress uns mit seiner HTTP API abgedeckt. Wir werden es uns im nächsten Artikel im Detail anschauen, hier ist ein Beispiel mit WordPress‘ nativer Funktion, inklusive dem Hinzufügen von Headern:

$request = wp_remote_get('https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=kinsta, array(
    'headers' => array(
        'Authorization' => 'Bearer ' . $token,
    ),
));

Zusammenfassung

HTTP ist die Basis für alles, was wir im Web tun. Zu wissen, was in einer Anfrage und einer Antwort vor sich geht, gibt uns großartige Möglichkeiten zur Fehlerbehebung und erlaubt uns, unsere Anwendungen besser zu kontrollieren.

Indem du dich mit den HTTP-Grundlagen auseinandersetzt, wirst du in der Lage sein, externe APIs schneller und besser zu nutzen und genau zu wissen, was du mit den Informationen, die dir in API-Guides gegeben werden, tun musst.

Im nächsten Beitrag der Serie werde ich darauf eingehen, wie du HTTP-Daten mit WordPress handhaben kannst und wie du WordPress ganz einfach mit einem Drittanbieterdienst verbinden kannst.

Daniel Pataki

Hi, my name is Daniel, I'm the CTO here at Kinsta. You may know me from Smashing Magazine, WPMU Dev, Tuts+ and other WordPress/Development magazines. Aside from WordPress and PHP I spend most of my time around Node, React, GraphQL and other technologies in the Javascript space.

When not working on making the best hosting solution in the Universe I collect board games, play table football in the office, travel or play guitar and sing in a pretty bad band.