Erstellen eines WordPress-freundlichen API-Wrappers Grundlagen

Wenn Sie eine Website oder Webanwendung erstellen, ist es eine ziemlich allgemeine Anforderung, dass Sie möglicherweise Daten von Websites oder Anwendungen von Drittanbietern abrufen müssen. Wenn diese Site oder Anwendung über eine API verfügt, ist dies eine hervorragende Möglichkeit, die erforderlichen Daten zu erhalten. Schauen wir uns also an, wie man das mit WordPress macht.


Was ist eine API??

Bevor wir uns auf das Wesentliche konzentrieren, stellen wir sicher, dass wir mit ein paar Dingen auf dem neuesten Stand sind, angefangen mit dem, was eine API ist.

Im Sinne dieses Tutorials meinen wir, wenn wir "API" (Application Programming Interface) sagen, welche Wikipedia-Klassen als "Web-API" bezeichnet werden:

Eine serverseitige Web-API ist eine programmatische Schnittstelle zu einem definierten Anforderungsantwortsystem, die normalerweise in JSON oder XML ausgedrückt wird und über das Web verfügbar gemacht wird - meistens über einen HTTP-basierten Webserver.

Einfacher ausgedrückt: Mit einer API kann eine Anwendung vordefinierte Informationen (meistens im JSON- oder XML-Format) über eine Standard-Web-URL von einer Anwendung abfragen.

Ich habs? Ok, weiter…


Was ist ein "Wrapper"?

Das Anfordern einer API an eine API kann mehrere Schritte umfassen, und Sie möchten möglicherweise zusätzliche Schritte hinzufügen, z. B. Fehlerprüfung, Zwischenspeicherung, Validierung usw.

Wikipedia definiert eine Wrapper-Funktion wie folgt:

Eine Wrapper-Funktion ist eine Funktion in einem Computerprogramm, deren Hauptzweck darin besteht, eine zweite Funktion mit wenig oder gar keiner zusätzlichen Berechnung aufzurufen. Dies wird auch als Methodendelegierung bezeichnet. Wrapper-Funktionen können für verschiedene Zwecke verwendet werden.

Diese Definition lässt den Eindruck erwecken, als seien Wrapper einfach redundanter Code, der aber weit davon entfernt ist.


Wichtige Überlegungen

Durch das Erstellen eines Wrappers für eine API können wir uns mit allen anfreunden. Lassen Sie mich erklären:

  • APIs haben häufig ein "Ratenlimit", dh die Häufigkeit und Häufigkeit, mit der Sie mit ihnen in Kontakt treten können. Wenn Sie eine API mit mehr als dem angegebenen Grenzwert kontaktieren, können Sie blockiert werden. Wenn sich Informationen ändern, die sich nicht regelmäßig ändern, führt dies zu einer unnötigen Belastung der API. Durch das Erstellen eines Wrappers können wir unser eigenes Caching implementieren, sodass wir weniger häufig mit der API in Kontakt treten.
  • Wenn wir eine Anforderung an eine API mit falsch formatierten oder unvollständigen Informationen senden, handelt es sich um eine verschwendete Anforderung. Wir sollten sicherstellen, dass die von uns gesendete Anfrage vollständig und korrekt formatiert ist, so gut wir können, bevor wir sie senden.
  • Manchmal sendet eine API möglicherweise Informationen zurück, die auf die einfachste Art und Weise, die wir verwenden können, nicht ganz formatiert sind. Wenn sich eine Schicht zwischen dem Entwickler und der API befindet, können Sie die Daten nach Bedarf massieren, bevor der Entwickler sie erhält.
  • Entwickler sollten sich auch nicht mehr als nötig wiederholen müssen. Wenn wir alle Schritte eines API-Aufrufs in einem Wrapper bündeln, vereinfacht dies die Entwicklung mithilfe der fraglichen API.

Wrapper machen den Umgang mit APIs entwicklerfreundlich und API-freundlich.

Die speziellen Dinge, die wir mit unserer API in Angriff nehmen werden, sind:

  • Aufruf der API, wenn der Entwickler Informationen anfordert
  • Überprüfen, ob gültige Daten an die API gesendet werden
  • Überprüfen, ob die API einen Fehler und keine nützlichen Daten zurückgegeben hat, und entsprechend umgehen
  • Caching von Antworten aus der API, damit wir, wenn dieselbe Anfrage in kurzer Zeit gestellt wird, nicht mit der API in Kontakt treten müssen
  • Anpassen der zurückgegebenen Daten für eine vereinfachte Verwendung

Wir werden diese Dinge auch auf WordPress-freundliche Weise durchführen, z. B. Transienten zum Zwischenspeichern verwenden wp_remote_request zum Senden der API-Anfragen.


Die Stiftung aufbauen

Die API, die wir für dieses Lernprogramm verwenden werden, ist die Envato Marketplace-API. Diese API enthält Informationen zu den Elementen und Benutzern auf den Envato-Marktplätzen, z. B. ThemeForest, CodeCanyon und anderen.

Wir werden unsere Entwicklung auf Public Sets aufbauen, wie in der Dokumentation der Envato Marketplace API zu sehen ist. Beachten Sie auch die Spalte TTL (time to live), die im Wesentlichen das "Ratenlimit" für diese API ist. Da sich die Daten nur mit dieser Frequenz ändern, gibt es keinen Punkt, der einen bestimmten Satz öfter als die angegebene TTL anfordert.

Beginnen wir also mit dem Aufbau der Basisklasse für die Kommunikation mit dieser API.

1. Dateistruktur

Da sich dies schließlich in einem Beispiel-Plugin befindet, auf das wir später noch näher eingehen werden, erstellen wir diese Dateistruktur und den API-Wrapper darin.

Unser Plugin zeigt die Ergebnisse des API-Sets "random-new-files" an, wir nennen es "Wptuts + Random New". Also in deinem wp-content / plugins / Verzeichnis, fahren Sie fort und erstellen Sie ein Verzeichnis namens wptuts-random-new.

Erstellen Sie nun in diesem Verzeichnis ein neues Verzeichnis mit dem Namen envato-api-wrapper, und eine Datei darin aufgerufen class-envato-api-wrapper.php. Dieses gesamte Verzeichnis kann dann in andere Projekte kopiert werden, die diese API auch in Zukunft benötigen.

2. Unterricht und Grundlagen

Öffne das * class-envato-api-wrapper.php Datei und los geht's.

Zuerst definieren wir unsere Klasse:

  

Wir werden auch eine einfache Methode benötigen, um diesen Wrapper beim Erstellen zu testen, ohne dass er WordPress vollständig laden muss. Also, was ich getan habe, ist einfach eine index.php Datei in der envato-api-wrapper Verzeichnis mit folgendem Inhalt:

  

Jetzt sollten Sie in der Lage sein zu browsen http: // localhost / wp-content / plugins / wptuts-random-new / envato-api-wrapper / (Ersetzen Sie "localhost" durch Ihre eigene Entwicklungsumgebung). Sie sollten jedoch noch nichts sehen, da der Wrapper noch nichts tut. Wenn Sie jedoch einen Fehler sehen, überprüfen Sie den Code.

Hinweis: Vergessen Sie nicht, diese Datei zu entfernen oder auszublenden, bevor Sie sie für die Produktion bereitstellen!

3. Wo Sie Anfragen senden

Das erste, was Sie benötigen, bevor Sie eine Anforderung an eine API stellen, ist die zu verwendende Basis-URL. Dieser URL werden dann verschiedene Informationen hinzugefügt, bevor die Anfrage gesendet wird.

Im Falle der Envato Marketplace-API verwenden wir die folgende URL:

 http://marketplace.envato.com/api/edge/set.json

In dieser URL befinden sich zwei Hauptinformationen für Informationen: Edgde und einstellen.

Die Position von Edgde repräsentiert die Version der API, die wir verwenden möchten, und hier insbesondere die aktuellste Version. Es wird in allen Anfragen dasselbe sein, aber wenn sich etwas ändert und wir eine ältere Version verwenden wollten, könnten wir es austauschen v3 stattdessen zum Beispiel.

Die Position von einstellen stellt den tatsächlichen Datensatz dar, den wir anfordern. Das Wort "Satz" ist ein Platzhalter, und wir werden ihn bei einer bestimmten Anforderung durch die relevanten Details ersetzen.

Fügen wir eine Eigenschaft von hinzu $ api_url zu unserer Klasse mit diesem Wert:

  

Beachten Sie, dass wir angegeben haben, dass diese Eigenschaft 'geschützt'. Wir haben dies getan, weil wir nicht möchten, dass die URL direkt von anderem Code außerhalb unseres Wrappers geändert wird.

4. Eine Anfrage stellen

Bevor wir versuchen, eine bestimmte Anforderung zu erstellen, fügen wir unserer Klasse eine generische Methode hinzu, die die Bearbeitung von Anforderungen behandelt. Wir werden es nennen remote_request, und alles, was es braucht, ist eine URL, an die die Anfrage gesendet werden soll.

 geschützte Funktion remote_request ($ url) // Wenn die URL leer ist, senden Sie keine Anforderung, wenn (empty ($ url)) return false;  // Stellen Sie die Anfrage $ request = wp_remote_request ($ url); // Überprüfen Sie, ob WordPress die Anforderung senden konnte, andernfalls Fehler if (is_wp_error ($ request)) echo $ request-> get_error_message (); falsch zurückgeben;  // Decodiere die Antwort, damit wir sie verwenden können $ data = json_decode ($ request ['body']); if ($ request ['response'] ['code'] == 200) return $ data;  else return false; 

Beachten Sie, dass wir erneut darauf hingewiesen haben, dass diese Methode 'geschützt', um zu verhindern, dass er direkt von außerhalb unserer Klasse angerufen wird.

Um zu testen, ob die Anforderung funktioniert, fügen wir unsere erste API-Methode hinzu. In diesem Fall gehen wir mit der zufällig neue Dateien set, was wir später in unserem Beispiel-Plugin verwenden werden.

Fügen Sie unserer Klasse die folgende Methode hinzu:

 public function random_new_files ($ marketplace) // Erzeuge eine URL für diese Anforderung, indem der Platzhalter 'set' durch den Satz und die erforderlichen Parameter ersetzt wird. In diesem Fall ist der Slug eines Envato-Marktplatzes $ url = preg_replace ('/ set / i', 'random-new-files:'. $ Marketplace, $ this-> api_url); // Sende eine Anfrage an die API $ results = $ this-> remote_request ($ url); $ Ergebnisse zurückgeben; 

Um diese neue Methode zu testen und um die API-Anforderungsmethode zu erweitern, fügen Sie unserem Debugging die folgende Zeile hinzu index.php Datei:

 Echo '
'. print_r ($ envato_api-> random_new_files ('themeforest'), true). '
';

Jetzt sollten Sie eine ähnliche Ausgabe in Ihrem Browser erhalten:

 stdClass-Objekt ([random-new-files] => Array ([0] => stdClass-Objekt ([id] => 4860464 [item] => Empire - Business, Portfolio HTML 5-Vorlage [url] => https: // themeforest.net/item/empire-business-portfolio-html-5-template/4860464 [user] => designthemes [thumbnail] => http://1.s3.envato.com/files/57931279/thumb-html. png [sales] => 0 [rating] => 0.0 [cost] => 15.00)… [9] => stdClass-Objekt ([id] => 4852371 [item] => eplie | Mobile HTML / CSS-Vorlagenvorlage [URL] ] => https://themeforest.net/item/eplie-mobile-htmlcss-portfolio-template/4852371 [Benutzer] => cosmincotor [thumbnail] => http://1.s3.envato.com/files/57831617 /thumbnail.png [Umsatz] => 3 [Bewertung] => 0.0 [Kosten] => 8.00)))

Angenommen, Sie haben so etwas wie das oben Genannte gesehen, bedeutet es, dass es funktioniert und Sie Daten von der API erhalten haben. Erfolg!


Next: Caching, Fehlerbehandlung und ein Widget

Jetzt haben wir die Basis für den Wrapper erstellt, die Dinge sind im Gange. Im nächsten Teil beenden wir den Wrapper und erstellen ein Widget, das ihn verwendet.

Beachten Sie außerdem, dass, während dieser Wrapper für die Envato Marketplace-API erstellt wird, das gleiche Konzept (und ein großer Teil des gleichen Codes bisher) zum Erstellen eines Wrappers für jede RESTful-API verwendet werden kann.

Teilen Sie uns in den Kommentaren mit, welche Ideen Sie für die Arbeit mit APIs und WordPress haben.