Über die JSON-API von WordPress schreiben wir hier sehr oft:
- https://www.wp-entwickler.at/speichere-post-metacustom-field-daten-mit-der-wp-api-json-api-und-ajax-register_meta-heisst-das-zauberwort/
- https://www.wp-entwickler.at/json-api-auf-version-0-5-aktualisiert-jetzt-mit-mediensupport/
- https://www.wp-entwickler.at/uebersetzung-ryan-mccue-zum-thema-erstellung-json-rest-api-fuer-wordpress/
Wir befassen uns daher beruflich und aus privatem Interesse sehr mit dieser API. Die diversen Vorzüge haben wir ja vorgestellt.
Hin und wieder kitzeln uns dann aber gewisse Fragen und suchen nach Meinungen und Antworten.
Einer der Fragen ist:
Soll ich vorhandene Endpoints verwenden, oder explizit eigene Endpoints für gewisse Aktionen und Funktionen erstellen?
Versuchen wir’s mit einer kleinen Auflistung der jeweiligen Vorteile und lassen euch die Entscheidung selbst treffen, was besser ist:
WordPress-Endpoints verwenden
Die WP-API bietet die Möglichkeit, fast jeden Teil eines Posts zu bearbeiten. Angefangen vom Titel über Terms, Tags, Kategorien und Custom Fields/Metafelder.
Man muss also selbst nicht viel coden, wenn man Posts bearbeiten will.
Als Beispiel:
Wenn ich eine Likefunktion einbauen will, kann ich mit der WP API einfach zb Terms oder Custom Fields befüllen, um den Like zu speichern. Dafür braucht man selbst keine Endpoints schreiben.
Durch die Verwendung von vorhandenen Endpoints erspare ich mir zusätzliche Implementierung und vor allem die Wartung.
Verwendung von eigenen Endpoints
Wenn ich die Likefunktion anders implementieren will, muss ich selbst WordPress-Code entwickeln. Ich muss also selbst Hand anlegen, habe aber mehr Möglichkeiten:
- Ich kann ohne Änderung an der API oder an vorhandenen Endpoints steuern, wie Daten tatsächlich gespeichert werden (zB ob die Like-Zuordnung als Tags oder als serialisiertes Meta-Feld gespeichert werden)
- Ich kann eigene Businesslogik einbauen, die zusätzliche Aktionen durchführt (zB Gewisse Posts dürfen nur von registrieren Nutzern geliket werden; liket ein User mehr als 10 Beiträge wird eine Mail an den Admin verschickt)
- Ich kann Aktionen erlauben, die der Benutzer sonst nicht durchführen dürfte (zB dem Post einen Tag hinzufügen obwohl er ihn gar nicht bearbeiten darf)
- Ich kann häufig gemeinsam verwendete Abfragen gleich vorweg kombinieren (Ich will alle Likes eines Beitrages erfragen aber auch alle Beiträge bekommen, welche die selbe Anzahl an Likes hat. Dafür brauche ich dann nicht zwei API-Requests, sondern kanns in einem Aufruf abfragen)
- Außerdem ist eine API auch ein User Interface. Je sprechender ein Endpunkt-Name ist, desto besser.
Natürlich hat man die Vorteile nur, wenn man für diese Aktionen ausschließlich die eigenen Endpunkte verwendet. Sobald man vom Frontend oder Client einmal direkt etwas ausliest oder veränderst, verlierst man sie.
Viele der aufgezählten Punkte lassen sich aber auch über Hooks lösen, wenn man es drauf anlegt.
Wenn man aber in der obigen Liste etwas findet das zutrifft, ist ein eigener Endpunkt ein heißer Kandidat.