Die WP REST API zur Fernsteuerung von WordPress

Avatar of Scott Fennell
Scott Fennell am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Bei meinem Tagesgeschäft haben wir etwa 1.000 Websites, die auf 30 WordPress Multisite-Installationen verteilt sind. Die Installationen laufen alle mit vielen der gleichen Plugins und Einstellungen, insbesondere auf Netzwerkebene. Dies verursacht eine Menge Zeitverschwendung für unsere Mitarbeiter: Sie müssen manuell die gleichen Einstellungen über 30 Installationen hinweg wiederholen. Aus diesem Grund steigen wir auf etwas um, das ich gerne „Remote Control WordPress“ nenne.

Artikelserie

Teil 1: Die WP REST API zur Fernsteuerung von WordPress (Hier sind Sie!)
Teil 2: OAuth-Spaß mit OAuth1
Teil 3: WordPress fernsteuern im großen Maßstab

Wir bezeichnen eine Installation als „Steuerung“, wo wir Netzwerkeinstellungen konfigurieren, und die anderen 30 „Client“-Installationen beziehen ihre Netzwerkeinstellungen von der Steuerung.

Es wird mehrere Artikel dauern, bis ich das alles dargelegt habe. Ich hoffe, Sie werden jedes mühsame und obskure Detail durchgehen. Diese Methode hat das Potenzial, uns Dutzende von Mannstunden pro Jahr zu ersparen und verringert auch erheblich die Fehleranfälligkeit durch menschliches Versagen. Weniger Klicks bedeuten weniger Fehler! Es ist ein kniffliger und neuer Ansatz, aber ich bin begeistert davon.

Hier ist ein Überblick, bevor wir tiefer einsteigen

  • Die Steuerungsinstallation stellt Daten über das WP REST API V2 Plugin bereit.
  • Die Steuerungsinstallation führt ein benutzerdefiniertes Plugin aus, um Netzwerkeinstellungen zur WP API hinzuzufügen (standardmäßig sind sie nicht enthalten). Dieses benutzerdefinierte Plugin registriert auch eine globale Variable, die uns eine programmatische Möglichkeit gibt, zwischen der Steuerungsinstallation und den anderen 30 Client-Installationen zu unterscheiden.
  • Die Steuerungsinstallation führt das Oauth1-Plugin aus, um die Einstellungen vor öffentlicher Einsicht zu schützen, sie aber unseren skriptgesteuerten Anfragen von den Client-Installationen zugänglich zu machen.
  • Sowohl die Steuerungsinstallation als auch unsere 30 Client-Installationen führen viele „Feature“-Plugins aus: benutzerdefinierte Netzwerk-Plugins, die gängige WordPress-Hacks bereitstellen, wie z. B. ein benutzerdefiniertes Logo auf dem wp-login-Bildschirm.
  • Sowohl die Steuerungsinstallation als auch unsere 30 Client-Installationen führen ein benutzerdefiniertes Plugin zur Verwaltung von Netzwerkeinstellungen aus. Es bietet eine Abstraktionsschicht, damit unsere Feature-Plugins ihre Einstellungen von der Steuerungsinstallation abrufen können.

Was Sie brauchen, um mitzukommen

  • Zwei WordPress Multisite-Installationen: Eine wird die Steuerungsinstallation sein, und die andere wird als Client-Installation dienen. In meinen Beispielen wird die Steuerungsinstallation meine persönliche Website sein, und die Client-Installation wird mein lokales MAMP sein. Zum Zeitpunkt des Schreibens befinden sich beide Installationen auf WordPress 4.5.3. In diesem ersten Artikel benötigen wir nur die Steuerungsinstallation. Nachfolgende Artikel werden die Client-Installation beinhalten.
  • Insgesamt fünf Plugins, wie ich oben angedeutet habe. Einige davon sind auf GitHub und einige im .org-Repository. Einige davon sind von mir geschrieben, und einige davon sind von Leuten geschrieben, die viel klüger sind als ich. Einige davon werden wahrscheinlich eines Tages Teil des Kerns sein, und einige davon dienen nur der Demonstration. Ich werde sie behandeln, wenn sie benötigt werden. Dieser erste Artikel erfordert zwei der fünf Plugins.
  • Das Theme ist eigentlich egal, aber meine Beispiele werden twentysixteen darstellen. Wenn Sie Probleme haben, mitzukommen, wäre das Nachahmen eine gute Übung.

Sind Sie bis hierhin mit mir? Ich erkenne, dass dies ein schneller Überblick war, aber genau wie am Ende von Mittelschul-Tänzen werden wir es jetzt langsamer angehen. Unser Ziel für den Rest dieses Artikels ist es, Netzwerkeinstellungen auf unserer Steuerungsinstallation über die WP API zugänglich zu machen. Den Rest der Komponenten werden wir in den folgenden Artikeln behandeln. Starten Sie Ihre Testinstallationen und machen Sie mit!

JSON-Rückgaben

Nun, rufen Sie auf Ihrer Steuerungsinstallation http://example.com/wp-json/wp/v2/posts auf. Dies sollte Ihnen einen 404-Fehler zurückgeben.

Screenshot des Posts-Endpunkts vor der Aktivierung des WP REST API V2 Plugins.

Installieren und aktivieren Sie nun das WP REST API V2 Plugin im Netzwerk und rufen Sie /wp-json/wp/v2/posts erneut auf. Sie sollten etwas Ähnliches wie das Folgende erhalten

Screenshot des Posts-Endpunkts nach der Aktivierung des WP REST API V2 Plugins.

Super! Sie haben jetzt JSON-Daten. Surfen Sie ein wenig herum, nutzen Sie die Endpunkte in der Dokumentation als Leitfaden – oder besser noch, die Link-URLs in der JSON-Antwort selbst. Für weitere Details siehe auch diesen ausgezeichneten Artikel von Andy Adams zum Abrufen von Beiträgen über die API.

Sie bemerken vielleicht in der Dokumentation, dass Netzwerkoptionen nicht zum Abrufen verfügbar sind, aber das werden wir bald beheben. Vorerst laden Sie einfach /wp-json/css_tricks_wp_api_control/v1/ auf Ihrem Steuerungs-Server und beachten Sie den 404. Installieren und aktivieren Sie dann mein CSS Tricks WP API Control Plugin im Netzwerk. Diese URL /wp-json/css_tricks_wp_api_control/v1/ sollte jetzt für Sie funktionieren und einige Daten über die von meinem Plugin registrierte Route network_settings zurückgeben.

Informationen über die von meinem Plugin registrierte Route.

Wenn Sie sich sehr anstrengen, werden Sie den interessantesten Teil der Antwort erkennen

"args":{"meta_key":{"required":true}}

Das sagt Ihnen, dass mein Endpunkt ein Argument namens meta_key akzeptiert und dass es erforderlich ist.

Also, /wp-json/css_tricks_wp_api_control/v1/network_settings – was hat es mit dieser URL auf sich? Der Teil /wp-json/ ist für die WP API immer vorhanden. Das bedeutet einfach, dass Sie JSON erhalten. Der Teil /css_tricks_wp_api_control/ ist der Namespace für mein Plugin. Beachten Sie, dass der Kern den Namespace /wp/ verwendet, wie im obigen Beispiel mit den Beiträgen. Die Angabe /v1/ bedeutet, dass dies Version 1 des Endpunkts ist, den mein Plugin verwendet. Ich könnte diese Versionsnummer ändern, wenn ich die Abwärtskompatibilität brechen möchte, aber ansonsten würde ich sie nicht jedes Mal aktualisieren, wenn ich die Versionsnummer meines Plugins selbst aktualisiere. Schließlich habe ich den Endpunkt /network_settings/ zur Abfrage von Netzwerkeinstellungen registriert.

Eintauchen in das Steuerungs-Plugin

Das Steuerungs-Plugin hat zwei Zwecke. Erstens sehen Sie, dass es eine globale Variable registriert, CSS_TRICKS_WP_API CONTROL, die andere Plugins abfragen können, um festzustellen, ob sie auf der Steuerungsinstallation oder einer Client-Installation laufen.

Zweitens sehen Sie, dass es Netzwerkeinstellungen für die Abfrage in der WP API registriert. Diese Datei ist gründlich kommentiert – bitte lesen Sie sie kurz durch. Vorerst werde ich zwei Funktionen hervorheben

callback() ist das, was die Netzwerkeinstellungen aus der Datenbank zurückgibt. Es benötigt eine GET-Variable für meta_key, was uns eine Möglichkeit gibt, eine bestimmte Netzwerkoption abzurufen. Sie können sehen, dass sie erforderlich ist, wenn Sie versuchen, /wp-json/css_tricks_wp_api_control/v1/network_settings zu laden, ohne ?meta_key=irgendwas anzuhängen: Sie erhalten eine 400er-Meldung, die Sie darauf hinweist, dass Sie keinen meta_key angegeben haben.

Der Benutzer hat einen erforderlichen Parameter nicht angegeben.

permission_callback() gibt an, dass wir bei der Abfrage von Daten aus unserer benutzerdefinierten Route eine Authentifizierung bereitstellen müssen, um die Netzwerkeinstellungen in der WP API sehen zu können, sonst hätten wir wahrscheinlich ein Sicherheitsproblem. Dies werden wir im nächsten Artikel über das OAuth1-Plugin tun. Vorerst können Sie sehen, dass die Authentifizierung erforderlich ist, wenn Sie versuchen, /wp-json/css_tricks_wp_api_control/v1/network_settings?meta_key=irgendwas zu laden: In diesem Fall erhalten Sie eine 403er-Meldung, die Sie dafür tadelt, dass Sie sich nicht authentifiziert haben.

Der Benutzer hat eine gültige URL angefordert, aber ohne die richtige Authentifizierung.

Wenn Sie daran interessiert sind, den Endpunkt network_settings ohne Authentifizierung zu erkunden, können Sie den Aufruf von permissions_callback weglassen oder ihn immer TRUE zurückgeben lassen, aber seien Sie vorsichtig, es ist ein Sicherheitsloch.

Diese Datei hätte anders geschrieben werden können. Für einen komplexeren Endpunkt wäre es besser, den WP Rest Controller zu erweitern. Ich denke, das wäre für unseren Fall übertrieben und wäre sicherlich ein Tutorial für sich.

Nächste Schritte

Es gibt ein paar verschiedene Dinge, die Sie sich zu diesem Zeitpunkt fragen sollten.

Eine davon ist die Authentifizierung. Wie sollen die Client-Installationen permission_callback() bestehen? Dies werden wir im nächsten Artikel durch einen langen und brutalen Kampf mit dem OAuth1-Plugin erreichen.

Ein weiterer Punkt ist DRY/WET (Don't Repeat Yourself/Write Everything Twice). Wenn unsere 30 Client-Installationen viele Feature-Plugins ausführen, wäre es dann nicht mühsam, wenn all diese Feature-Plugins eine Abfrage an die Steuerungsinstallation hartkodieren würden? Deshalb werden wir eine Abstraktionsschicht schreiben, die alle unsere Feature-Plugins zum Abfragen des Steuerungsblogs verwenden können. Der Steuerungsblog wird ihn sogar selbst zum Abrufen von Einstellungen verwenden! Kopfzerbrechen; das hebe ich mir für den dritten und letzten Artikel dieser Reihe auf.

Dann gibt es die Leistung. Wir werden jedes Mal eine HTTP-Anfrage stellen, wenn wir eine lächerliche Einstellung benötigen? Nein. Wir werden die Ergebnisse cachen, was ich ebenfalls im dritten Artikel demonstrieren werde.

Allgemeiner könnten Sie auch den Einwand erheben, dass dies nach viel Arbeit klingt. Dem würde ich sagen, im Vergleich wozu? Ich schreibe diese Reihe, weil ich denke, dass es besser ist, als ein Team die gleichen Einstellungen über 30 Installationen hinweg verwalten zu lassen. Ich glaube, am Ende werden Sie vielleicht zustimmen!

Weitere Ressourcen

Wenn Sie bisher Schwierigkeiten haben, mitzukommen, sind hier die besten Anlaufstellen für die nächsten Schritte

  1. Der Kauf des WROX-Buches über Plugin-Entwicklung ist wie der Kauf einer Karriere.
  2. Das WP API Buch von Torque. Diese Jungs betreiben WP Engine – muss ich mehr sagen?
  3. Die WP API Dokumentation, wo der Abschnitt über die Erweiterung der API besonders relevant für das Terrain ist, das wir bisher behandelt haben.

Bereit für mehr?

Wenn Sie bisher folgen, machen Sie sich gefasst auf einen wilden Tanz mit OAuth im nächsten Artikel!

Artikelserie

Teil 1: Die WP REST API zur Fernsteuerung von WordPress (Hier sind Sie!)
Teil 2: OAuth-Spaß mit OAuth1
Teil 3: WordPress fernsteuern im großen Maßstab