Kategorien
Content Management Systeme Shared Hosting

WordPress 4.7 – Was ist eigentlich diese REST-API?

Seit Monaten, wenn nicht Jahren, wird bei jeder neuen Version von WordPress auch über die REST-API gesprochen. Letzte Woche war es mal wieder soweit als WordPress 4.7. veröffentlicht wurde. Außer einem neuem Theme und vielen kleinen Detailverbesserungen war wieder die REST-API ein Thema.

Sie hat neue Endpunkte erhalten!

Aha, denkt sich der gemeine WordPress User!

Dieser Beitrag wendet sich an alle nicht REST-API Spezialisten und soll für Aufklärung sorgen, worum es eigentlich geht.

Das sagt Wikipedia zu Thema REST:

REST ist eine Abkürzung für „Representational State Transfer“. Die Bezeichnung „Representational State Transfer“ soll den Übergang vom aktuellen Zustand zum nächsten Zustand (state) einer Applikation verbildlichen. Dieser Zustandsübergang erfolgt durch den Transfer der Daten, die den nächsten Zustand repräsentieren. Der Zweck von REST liegt schwerpunktmäßig auf der Maschine-zu-Maschine-Kommunikation …

Das sagt Wikipedia zu Thema API:

Eine Programmierschnittstelle, genauer Schnittstelle zur Anwendungsprogrammierung, häufig nur kurz API genannt (englisch application programming interface, wörtlich ‚Anwendungs­programmier­schnittstelle‘), ist ein Programmteil, der von einem Softwaresystem anderen Programmen zur Anbindung an das System zur Verfügung gestellt wird.

Wenn dir immer noch nicht ganz klar ist worum es geht, keine Sorge, du bist nicht allein.

Wozu benötigt der Mensch eine REST-API in WordPress?

Hier ein paar Beispiele um sich dem Thema zu nähern. Außer der freien WordPress.org Software gibt es noch die Firma Automattic, die das kommerzielle WordPress.com betreibt und bereits seit längerem eine eigene REST-API in Ihren Services nutzt. Selbst gehostete WordPress.org Sites können dort integriert werden, wenn sie auf WordPress.com registriert und über ein spezielles Plugin (JetPack) „verbunden“ sind.

Calypso (WordPress.com Desktop Apps)

Calypso ist eine Desktop App für MacOS, Windows und Linux. Es stellt eine einheitliche Oberfläche dar um viele WordPress Sites zu verwalten. Die Kommunikation zwischen den WordPress Sites und Calypso findet über die WordPress.com REST-API statt. Calypso ist in JavaScript geschrieben, ist Open Source Software und stellt einen Client für WordPress Sites dar.

Calypso
Calypso

WordPress.com

Etwas später als Calypso wurde die neue Verwaltung auf WordPress.com vorgestellt, die auf der gleichen Technik wie Calypso basiert aber komplett im Browser läuft. Es muss also nichts extra installiert werden. WordPress.com ersetzt das komplette WordPress.org Website Dashboard.

WordPress.com Mobile Apps

Für Mobiltelefone gibt es die iOS und Android Apps, die es ebenfalls ermöglichen, selbst gehostete WordPress Sites zu bedienen. Hier findet ein Mix aus der, bereits seit WordPress 1.5 existierenden, XML-RPC Schnittstelle und der neuen WordPress REST-API statt.

WordPress.com iOS App
WordPress.com iOS App

Alle Projekte nutzen die WordPress.com REST-API, ersetzen den klassischen WordPress.org Administrationsbereich (Dashboard) und zeigen was prinzipiell mit dieser Technik möglich ist.

Nach und nach wurde nun neben der WordPress.com REST-API auch eine WordPress.org REST-API entwickelt. Damit kann jeder Anwendungen erstellen, die nicht mit einem speziellen Plugin mit WordPress.com verbunden werden müssen sondern unabhängig davon funktionieren. Auch die Wahl der Programmiersprache ist völlig frei.

Das ist das „Ding“ mit der REST-API.
Sie eröffnet neue Möglichkeiten im Front- und Backend Bereich. Außerdem ermöglicht sie das Verschmelzen von vielen WordPress Sites zu einer (neuen) Anwendung.

Ein einfaches Anwendungsbeispiel

Ich betreibe ein Blogging Projekt, bei dem jeder Teilnehmer einmal die Woche auf seinem eigenen Blog einen Artikel schreiben muss. Am Ende der Woche werden die Artikel gesammelt und auf einer Übersichtsseite ausgegeben (Weekly blog posts). Das Sammeln und Eintragen der Daten erfolgt automatisch mit einem Python Script. Das Script nutzt die „alte“ XML-RPC Schnittstelle von WordPress und erzeugt einen neuen Artikel pro Woche. Dazu wird kein zusätzliches Plugin benötigt.

Mit der neuen REST-API liesse sich eine Anwendung schreiben (Iron Blogger App), die on the fly die Daten zusammenstellt, schick darstellt und Interaktionsmöglichkeiten bietet. Da das ohne Zusatz Plugins funktioniert, hat jede installierte WordPress Site die Funktionalität bereits eingebaut und kann genutzt werden.

Praxis

Nachdem die Dimensionen abgesteckt sind, will ich ein kleines Beispiel anhand des NOVATRENS Blogs zeigen. Ruft einfach im Browser mal http://blog.novatrend.ch/wp-json auf. Das Ergebnis sieht interessant aus:

http://blog.novatrend.ch/wp-json
http://blog.novatrend.ch/wp-json

Die Site bietet die folgenden Namespaces (API’s) an:

  • oembed/1.0
    OEmbed ist ein Format, das eine eingebettete Darstellung einer URL auf Websites von Drittanbietern ermöglicht. Wenn du einen Link von Sites wie YouTube oder Flickr in den Editor ziehst, sorgt dieses Format dafür, das ein Vorschaubild mit Text und Link angezeigt wird.
  • jetpack/v4
    JetPack ist das WordPress Plugin, dass die WordPress.com REST-API zur Verfügung stellt. Wir nutzen es, da wir die WordPress.com Apps ebenfalls nutzen.
  • wp/v2
    Da ist sie nun!
    Die standardmässige WordPress.org REST-API
    Hier sind all die neuen Sachen zu finden!

Alle Blog Posts sehen

Wenn du nun http://blog.novatrend.ch/wp-json/wp/v2/posts im Browser aufrufst, siehst du die Startseite unseres Blog in maschinenlesbarer Form.

NOVATREND Blog Posts
NOVATREND Blog Posts

Du kannst natürlich auch einen einzelnen Post aufrufen

http://blog.novatrend.ch/wp-json/wp/v2/posts/1423

Dieser Aufruf im Browser entspricht einen GET Kommando.

GET /wp/v2/posts/<id>

Mit der entsprechenden Berechtigung könntest du ihn auch löschen

DELETE /wp/v2/posts/<id>

oder einen neuen Eintrag erstellen

POST http://demo.wp-api.org/wp-json -d '{"title":"My New Title"}'

Auf diese Art kannst du alle Informationen, die unser Blog bietet maschinell auslesen und, so wie du willst, wieder zusammenbauen. Ich lasse die urheberrechtlichen Zusammenhänge mal außen vor :).
Du kannst dich auch gegenüber dem Blog als berechtigte Person authentifizieren und Änderungen vornehmen.

Und was ist jetzt neu in WordPress.org REST-API?

Genau das! Es gibt jetzt mehr Endpunkte und mehr Möglichkeiten. Konkret sind Zugriffe auf Posts, Nutzer, Tags und Einstellungen möglich. Für die Aufrufe selbst verwendet man die Hypertext Application Language (HAL). Der Datenaustausch erfolgt über JSON.
Öffentliche Aufrufe als auch private Anfragen, die eine vorherige Authentifizierung erfordern sind nun ebenfalls möglich.

Hinweis: Du kannst die REST-API auch für nicht eingeloggte Besucher abschalten 🙂 https://www.kuketz-blog.de/wordpress-rest-api-unter-wordpress-4-7-deaktivieren/


Links


tl;dr: WordPress hat eine REST-API und damit kannst du tolle Dinge machen!

#ffffff; background: #bd081c no-repeat scroll 3px 50% / 14px 14px; position: absolute; opacity: 1; z-index: 8675309; display: none; cursor: pointer;">Save

Kategorien
Content Management Systeme Webdesign

WordPress 4.6. – Was ist neu?

Letzte Woche erschien WordPress 4.6 Pepper. Alle WordPress Releases werden nach Jazz Musikern benannt, Pepper steht für den Jazz Musiker Pepper Adams.
Das Update soll die Arbeit mit WordPress erleichtern, bietet aber auch Neuigkeiten für Entwickler.
(Ebenfalls letzte Woche habe ich die App LICEcap (simple animated screen captures) entdeckt und werde in diesem Artikel mal mit animierten Screenshots durch die Neuerungen führen :))

Editor – Inline Link Checker

Wenn du einen fehlerhaften Link eingibst, färbt sich der Link nun rot und um den Text herum erscheint ein roter Rahmen. Wenn der Link o.k. ist, wird er in blauer Farbe dargestellt.
Hier ein Beispiel!

WordPress 4.6 -Inline Link Checker
WordPress 4.6 -Inline Link Checker

Backend mit systemeigenen Schriftarten

Nach dem Update sah mein WordPress Backend anders aus. WordPress 4.6 nutzt im Backend nun systemeigene Schriftarten und nicht mehr die Schriftart OpenSans von Google. Das wirkt sich positiv auf die Geschwindigkeit der Darstellung aus und sieht auch besser aus. Auf meinem System (macOS) sind die Unterschiede nicht groß, aber doch erkennbar.

Vergleich Schriftarten WordPress 4.6 und WordPress 4.5
Vergleich Schriftarten WordPress 4.6 und WordPress 4.5

Installieren, Aktualisieren sowie Löschen von Plugins und Themes

Der Workflow für das Installieren, Aktualisieren sowie Löschen von Plugins und Themes wurde überarbeitet. Die Aktionen werden durch einen Klick gestartet und im Hintergrund ausgeführt. Man wird nicht mehr auf eine andere Seite weitergeleitet. Zur Verdeutlichung hier ein Beispiel für die alte und die neue Installation.

Theme Installationsvorgang in alten WordPress Versionen:

Installationsvorgang ALT
Installationsvorgang ALT

Theme Installationsvorgang ab WordPress 4.6:

Theme Installation ab Version 4.6
Theme Installation ab Version 4.6

Das ist optisch eine kleine Änderung, aber gerade im Vergleich der beiden Varianten wird deutlich, um wieviel einfacher die neue Variante ist. In dieser Art und Weise wurden alle Installations-, Aktualisierung- und Löschvorgänge für Plugins und Themes in WordPress 4.6 überarbeitet.

Lokale Speicherung von Artikeln

Der GAU für jeden WordPress Benutzer: Du schreibst einen Beitrag und deine Netzwerkverbindung fällt aus. Du merkst es nicht und klickst auf aktualisieren oder veröffentlichen. Bisher waren deine Änderungen, die du nach der letzten automatische Aktualisierung vorgenommen hattest, weg.

Ab WordPress 4.6 wird zusätzlich zur automatischen Datenbanksicherung jede Änderung sofort lokal im Browser zwischengespeichert, so dass die Chance Daten zu verlieren erheblich abnimmt!

Lokale Kopie im Browser
Lokale Kopie im Browser

Entwickler News

Für WordPress Entwickler gibt es ebenfalls Neuigkeiten, die größtenteils zur Vorbereitung der REST-API 2.0 im Core dienen. Hier ein paar Beispiele.

WordPress unterstützt Resource Hints

So grundsätzlich sind Browser heute oft damit überfordert die Entscheidung zu treffen, welche Teile einer Website zuerst geladen werden sollten. Der Browser „spekuliert“ daher und hofft, dass er das Richtige tut. Daher gibt es eine W3C Spezifikation (Resource Hints) um dem Browser sagen zu können, was er in welcher Reihenfolge laden soll. WordPress 4.6 unterstützt diese Spezifikation.

Allein die Tatsache, dass solche Anweisungen an einen Browser nötig sind, stimmt schon ein wenig bedenklich, aber es freut mich und sicher auch die Plugin Entwickler, dass WordPress das in der Version 4.6 kann. Der Seitenaufbau wird damit schneller.

Übersetzungen

Bei der Installation eines Plugins wird in der neuen Version zunächst versucht die passenden Übersetzungen von translate.wordpress.org zu laden. Bisher wurde zuerst der Ordner im entsprechenden Plugin angesteuert.

HTTP-API nutzt die Requests Library

Das hört sich zunächst recht abstrakt an und man fragt sich: Hm … was heißt das? Ganz einfach: WordPress 4.6 nutzt nun nicht mehr die selbst entwickelte wp_http Library, sondern die von WordPress unabhängige Requests Library. WordPress profitiert dadurch von der Stabilität und den Eigenschaften der Requests Library und beschleunigt damit die Integration der REST-API. Für Entwickler ändert sich zur bisherigen Lage wenig, außer, dass manche Funktionsaufrufe nun mehr Möglichkeiten bieten, beispielsweise parallele HTTP Zugriffe und die  Unterstützung für internationale Domains.

Verbesserungen in der Customizer API

Wenn im Customizer (Anpassen) Dialog etwas verändert wird, so werden die Werte jetzt vor dem Speichern überprüft. Falls etwas nicht passt, wird der entsprechende Wert nicht gespeichert und die Fehler werden dem Nutzer als Nachricht angezeigt.

Neu: WP_Term_Query()

Diese neue Klasse ergänzt die bereits bestehenden WP_User_Query() and WP_Comment_Query(). Bei der neuen Klasse geht es um die Art und Weise, wie Entwickler auf Kategorien zugreifen. Ein Datenbankaufruf der Kategorie WordPress46 sieht dann beispielsweise so aus:

// WP_Term_Query arguments
$args = array (
 'taxonomy' => array( 'WordPress46' ),
);
// The Term Query
$term_query = new WP_Term_Query( $args );

Das klappt auch für Term-Ids, für die Suche und die Beschreibung von Kategorien. Einen Code Generator zu diesen Klassen bietet die Website generatewp.com.

Neu: WP_Post_Type()

Vor der Version 4.6 gab es die globale Variable $wp_post_types und nun gibt es ein Object Array mit dem Namen WP_Post_Type. WP_Post_Type bietet Methoden um mit dem Post Type zu interagieren. Das ist nützlich bei Custom Post Types, vermeidet Fehler und macht auch die Erstellung von REST-API Endpunkten einfacher.

Neu: register_meta()

Auch diese Funktion hat mit der REST-API zu tun. Sie erlaubt Meta Daten statt in der Datenbank im Code abzulegen. Das macht das Anlegen von Custom Post Types und Taxonomies einfacher.

Neue Versionen der JS Libraries

Die von WordPress genutzten JavaScript Libraries werden mit WordPress 4.6 auf einen aktuellen Stand gebracht.

  • Masonry 3.3.2,
  • imagesLoaded 3.2.0,
  • MediaElement.js 2.22.0,
  • TinyMCE 4.4.1
  • Backbone.js 1.3.3

Multisites werden schneller

Durch verbessertes Caching wird die Verwaltung von Multisites schneller.

Warum ist die REST-API so wichtig?

Die REST-API (Schnittstelle) ist strategisch wichtig, da sie es erlaubt WordPress als Unterbau für Apps wie Calypso und mobile Apps zu nutzen (Tutorial). Immer mehr Websites werden headless erstellt. Dabei übernimmt ein Frontend, das nichts mit WordPress zu tun hat die Darstellung und die in WordPress gespeicherten und zu speichernden Daten werden über die API gesendet und angefordert. Ein prominentes Beispiel dafür ist die guggenheim.org Website, die komplett über die WordPress REST-API realisiert wurde. Auch IKEA experimentiert mit der API.

Momentan ist die API ein Plugin (WordPress REST-API). Eine Integration in den Core würde die Entwicklung von Anwendungen, die die API nutzen, erheblich erleichtern.

Fazit

Das WordPress 4.6 Release bringt wenig sichtbare Änderungen, aber viele Vorbereitungen im Code um im nächsten Release (WordPress 4.7) die REST API in der Version 2.0 bereits im Core anbieten zu können.


tl;dr: WordPress 4.6 wird etwas schneller, etwas schöner, etwas einfacher und bringt viele Vorbereitungen im Code für die Zukunft mit.

#ffffff; background: #bd081c no-repeat scroll 3px 50% / 14px 14px; position: absolute; opacity: 0.85; z-index: 8675309; display: none; cursor: pointer; top: 2345px; left: 50px;">Save

#ffffff; background: #bd081c no-repeat scroll 3px 50% / 14px 14px; position: absolute; opacity: 0.85; z-index: 8675309; display: none; cursor: pointer; top: 514px; left: 50px;">Save