So entfernen Sie standardmäßige WordPress-REST-API-Routen und -Endpunkte
Veröffentlicht: 2018-07-31WordPress REST API wurde im Dezember 2016 in Version 4.7 (Vaughan) in den Kern eingeführt. Wie jede andere bedeutende Änderung am WP-Kern wurde sie heftig diskutiert (im Moment, Juli 2018, ist Gutenberg Gegenstand einer solchen Debatte/ Kontroverse). Am Ende ist nichts passiert. Wem die REST-API egal war, dem ist es immer noch egal. Diejenigen, die sich darum kümmern, haben einige Apps, Integrationen, Plugins und andere coole Projekte erstellt.
Als die #wordpress REST API in v4.7 Core integriert wurde, flippten die Leute aus! Genauso wie sie ausflippen, wenn sich etwas ändert. Am Ende klappt alles wunderbar.
KLICKEN, UM ZU TWEETENUnd wo wir gerade bei coolen Projekten sind. Wussten Sie, dass die erfolgreichsten mit einer bald erscheinenden Seite beginnen? Und in vielen Fällen handelt es sich um eine Coming Soon-Seite, die mit dem Coming Soon & Maintenance Mode-Plugin erstellt wurde.
Dieses Plugin enthält einen Drag-and-Drop-Builder, über 170 Themen, erstklassiges SEO-Setup, Autoresponder- und E-Mail-Dienste und viele andere Funktionen, mit denen Sie in wenigen Minuten die perfekte Coming Soon-Seite erstellen können. Und darüber hinaus ist das Plugin in Depositphotos integriert, was bedeutet, dass Sie die besten Grafiken direkt aus dem Plugin finden können. Aber falls Sie kein Fan der Sammlung von Depositphotos sind, ist Yay Images auch eine großartige Quelle für Stock-Inhalte.
Aber genug davon, kommen wir zurück zu unserem Hauptthema, der REST-API.
Wir kümmern uns um die REST-API und verwenden sie beim Erstellen von WP-gestützten SaaSs. Es ist stabil, schnell, einfach zu handhaben, passt genau in WP und ist in den meisten Fällen gut dokumentiert. Wenn Sie nicht wissen, was REST API ist, ist dies wahrscheinlich nicht der richtige Beitrag für Sie, aber sehen Sie sich an, was REST API ist (Video und Text), und vielleicht verwenden Sie es in Ihrem nächsten Projekt.
Route? Endpunkt? Ist das nicht alles dasselbe?
Nein, es ist nicht dasselbe. Der Unterschied ist für die meisten Menschen subtil und sie verwenden die Begriffe Route und Endpunkt synonym, aber es ist nicht so kompliziert. Die Route ist mehr oder weniger die URL. Es ist der „Name“, der für den Zugriff auf einen Endpunkt verwendet wird. Auf einer einzelnen Route können Sie mehrere Endpunkte haben, da der verwendete Endpunkt vom verwendeten HTTP-Anforderungstyp abhängt. GET
, POST
, PUT
oder DELETE
können verschiedenen Zwecken dienen und tun dies normalerweise auch. Wenn Sie über GET
auf yoursite.com/wp-json/v2/posts/1 zugreifen, erhalten Sie Details für den Beitrag mit der ID #1. Die Verwendung von DELETE
auf derselben Route ruft einen anderen Endpunkt (oder eine andere Funktion, wenn Sie möchten) auf, der diesen Beitrag löscht. Das offizielle REST-API-Handbuch enthält weitere Informationen zu diesem Thema, also tauchen Sie ein, um mehr zu erfahren.
#wordpress REST API-Routen und Endpunkte sind nicht dasselbe! Eine Route ist der „Name“, der für den Zugriff auf einen Endpunkt verwendet wird. Eine einzelne Route ist normalerweise mehreren Endpunkten zugeordnet.
KLICKEN, UM ZU TWEETENWarum sollte ich standardmäßige WP-REST-API-Endpunkte oder -Routen entfernen?
Wie wir im Artikel über das Entfernen von Standard-Umschreibungsregeln besprochen haben, gibt es hundert Gründe, warum ein WordPress-Entwickler dies tun würde.
„Es wird WordPress schneller machen, weil es nicht all diese Endpunkte parsen muss.“ ist immer noch etwas, dem ich nicht zustimme und glaube, dass der Gewinn weniger als eine Millisekunde betragen wird, aber es kann nicht schaden.
Sie halten die Dinge gerne sauber und da Sie die REST-API nicht verwenden – warum haben Sie API-Routen? Klar, macht Sinn. Verwenden Sie in diesem Fall jedoch ein Plugin, um die REST-API vollständig zu deaktivieren.
Und dann ist da noch der Grund, warum wir Standardrouten (und Endpunkte) deaktivieren. Wir verwenden häufig benutzerdefinierte REST-API-Endpunkte, benötigen jedoch nicht die Standardendpunkte. Daher ist es schön, die Dinge schlank und sauber zu halten. Es kann auch der Sicherheit nicht schaden, da wir weniger Daten an die raue Außenwelt weitergeben.

Zeigen Sie mir die standardmäßigen API-Endpunkte
Die Endpunktreferenz ist im REST-API-Handbuch verfügbar. Mehr oder weniger alle öffentlich verfügbaren Daten werden auch über die REST-API verfügbar sein. Eine Beispielanfrage an demo.wp-api.org/wp-json/wp/v2/posts zeigt zehn Posts im JSON-Format. Wenn Sie eine für Menschen lesbare Version dieser Antwort wünschen, müssen Sie die JSON-Antwort entschlüsseln. Gleiches gilt für Seiten, Kategorien und andere Datenstrukturen. Die Datenstruktur und die Endpunkte sind sehr ähnlich, wie Sie sehen können, wenn Sie die Referenz durchsuchen.
Die andere Möglichkeit, Standardrouten anzuzeigen, besteht darin, diesen Code zur Datei functions.php
deines Themes hinzuzufügen und dann yoursite.com/wp-json/ zu öffnen. Aktivieren Sie hübsche Links, falls Sie dies noch nicht getan haben.
add_filter( 'rest_endpoints', 'show_default_endpoints' ); function show_default_endpoints( $endpoints ) { var_export( array_keys( $endpoints ) ); die; }
Es zeigt die standardmäßigen 31 REST-Endpunkte. Die Anzahl kann sich natürlich ändern, wenn neue Kernfunktionalitäten hinzugefügt werden. Und es wird anders sein, wenn Sie Plugins haben, die benutzerdefinierte Endpunkte hinzufügen.
Entfernen der Standardendpunkte
Der obige Code erfordert nur minimale Änderungen. Geben Sie ein leeres Array zurück, und alle Endpunkte sind weg.
add_filter( 'rest_endpoints', 'remove_default_endpoints' ); function remove_default_endpoints( $endpoints ) { return array( ); }
„Alle Endpunkte“ umfasst auch Ihre benutzerdefinierten Endpunkte, daher ist es ratsam, sie nicht zu löschen. Hier ist eine einfache Möglichkeit, sie aktiv zu halten:
add_filter( 'rest_endpoints', 'remove_default_endpoints_smarter' ); function remove_default_endpoints_smarter( $endpoints ) { $prefix = 'your_custom_endpoint_prefix'; foreach ( $endpoints as $endpoint => $details ) { if ( !fnmatch( '/' . $prefix . '/*', $endpoint, FNM_CASEFOLD ) ) { unset( $endpoints[$endpoint] ); } } return $endpoints; }
Überspringen Sie einfach Endpunkte mit Ihrem benutzerdefinierten Präfix und behalten Sie sie im Array bei. Vergessen Sie nicht, das Array zurückzugeben.
Anpassen des REST-URL-Präfixes
Benutzerdefinierte Endpunkte verwenden, obwohl sie benutzerdefiniert sind, dasselbe Präfix wie die Standardendpunkte. Sie sehen aus wie mysite.com/wp-json/custom-endpoint/. Vielleicht finden Sie das hässlich oder mögen Standard-Sachen nicht. Das Ändern ist eine Frage einer Codezeile. Platzieren Sie zu Testzwecken den folgenden Code in der functions.php
des Themes und öffnen Sie nach dem Speichern das Dashboard – Einstellungen – Permalinks, um die Rewrite-Regeln zu löschen.
add_filter( 'rest_url_prefix', 'rest_url_prefix' ); function rest_url_prefix( ) { return 'api'; }
Mit dem Filter oben sind Ihre Endpunkte mysite.com/api/custom-endpoint/ und das Öffnen der alten URL mysite.com/wp-json/custom-endpoint/ führt zu einem 404-Fehler.
Stellen Sie sicher, dass Sie eine Versionsnummer in Ihren benutzerdefinierten Endpunkten angeben, da ein Präfix nicht automatisch von WP hinzugefügt wird. Ein Versionsnummernpräfix stellt sicher, dass spätere Änderungen Clients, die die alten Endpunkte verwenden, nicht beschädigen. Fügen Sie einfach das Versionspräfix hinzu, wenn Sie register_rest_route()
aufrufen, um etwas wie mysite.com/api/v1/custom-endpoint/ zu erhalten, und behalten Sie alle Ihre Endpunkte hinter diesem „v1“, damit Sie später „v2“ usw. haben können.
Testen Sie Ihre Änderungen
Das Entfernen oder Ändern von REST-API-Routen und -Endpunkten macht auf 98 % der WP-Sites keinen Unterschied. "Wieso den?" – Weil sie die REST-API überhaupt nicht verwenden. Aber wenn dies bei Ihnen der Fall ist, stellen Sie bitte sicher, dass Sie die verbundenen Apps testen, da Änderungen wie bei allem Dinge beschädigen können. Und es ist besser, einen Fehler heute als morgen zu entdecken.