Erstellen einer benutzerdefinierten REST-API


10

Ich habe eine WordPress.org-Site, die Benutzereingaben entgegennimmt, eine benutzerdefinierte Datenbank durchsucht und die Ergebnisse der Abfrage anzeigt. Ich habe dies mit der wpdb-Klasse arbeiten . Jetzt versuche ich, dies für eine Android-App zum Laufen zu bringen.

Soweit ich weiß, ist das Erstellen eines RESTful-Servers die derzeitige "Best Practice" für diese Art von Dingen. Ich habe mir einige Plugins angesehen, die mir dabei helfen könnten, und bin auf Folgendes gestoßen:

  1. json-rest-api - Es scheint mir, dass dies nur die Kernfunktionalität von WordPress (dh Beiträge, Seiten, Benutzer usw.) verfügbar macht, und ich kann nicht sehen, wie dies dazu führt, dass benutzerdefinierte Abfragen für nicht standardmäßige Tabellen ausgeführt werden.

  2. Dieser Blog-Beitrag sagt, dass wp mvc genau das tut, was ich will, außer dass es seit über 2 Jahren nicht mehr aktualisiert wurde, so dass dies irgendwie ausgeschlossen ist.

  3. Es gibt auch Jetpack, aber nach dem, was ich gesehen habe, ist die json-rest-api die aktualisierte Version davon und scheint nur Kernfunktionen zu bieten.

Gibt es eine Möglichkeit, eines dieser Plugins für benutzerdefinierte Endpunkte zu verwenden? Oder gibt es andere Plugins, die ich noch nicht gefunden habe?

Wenn ich kein Plugin benutze, müsste ich wohl mein eigenes rollen. Ich kann dies entweder von Grund auf (unter Verwendung von wpdb, msqlioder etwas), oder mit Hilfe einer API wie Restler .

Wenn ich meine eigene Rolle mache, sollte ich eine Vorlage in meinem Thema erstellen, die REST-Aufgaben dort ausführen und dieses Thema einer Seite im Dashboard zuweisen? Oder wäre es besser, wenn ein anderer Server separat von WordPress ausgeführt würde?

Soweit ich sehen kann, sind dies meine einzigen Optionen. Ich würde gerne wissen, welche Best Practices für diese Art von Dingen empfohlen werden. Es fällt mir schwer zu glauben, dass dies niemand anderes getan hat. Gibt es Optionen, die ich übersehen habe?


Was hast du am Ende gemacht? Ich versuche, benutzerdefinierte Routen / Endpunkte für die wp rest-API zu erstellen und 1) die Dokumentation ist schrecklich 2) es gibt keine Beispiele im Web. Lassen Sie mich wissen, welchen Weg Sie bitte genommen haben!
Jacksonkr

1
Ich habe beschlossen, meine eigene API außerhalb von Wordpress zu erstellen, aber das hat Zugriff auf dieselbe Datenbank. Ich bin aber nie dazu gekommen, da dies nur ein Nebenprojekt war und ich zu beschäftigt mit anderen Dingen war: P. Wenn ich Sie wäre, würde ich einen Blick in die Symfony2- oder Laravel- Frameworks werfen . Sie sind sehr schnell und einfach, um etwas zum Laufen zu bringen.
Yep_It's_Me

Antworten:


15

TL; DR

Ja, WordPress kann sicherlich als Backend für eine mobile App fungieren. Ja, eine Seite kann als Ruheendpunkt / Schnittstelle dienen. Nein, eine Themenvorlage ist nicht das richtige Gebiet für die Logik. Schreiben Sie Ihr eigenes Plugin.


Zeiger

Es fällt mir schwer zu glauben, dass dies niemand anderes getan hat.

Ich jedenfalls habe. Mehr als einmal. Und ich bin mir fast sicher, dass ich nicht allein bin. "Niemand hat ausführlich darüber gebloggt" ist wahrscheinlich die korrektere Vorstellung.

Wenn ich kein Plugin benutze, müsste ich wohl mein eigenes rollen. Ich kann dies entweder von Grund auf (mit wpdb, msqli oder so) oder mit Hilfe einer API wie Restler tun .

Ich kenne "Restler" nicht und das ist auf diesem Stack sowieso nicht möglich.
Was "Verwenden von wpdb, msqli oder etwas" betrifft: Sie würden sicherlich verwenden wpdb, um (empfangene) Daten in der Datenbank zu speichern, aber dies ist für die Endpunktlogik nicht relevant.

Eine Themenvorlage ist nicht das, worauf Sie achten sollten. Themen sind für die visuelle Präsentation gedacht. Ein REST-Endpunkt benötigt überhaupt kein visuelles Erscheinungsbild.

Fügen Sie den Endpunkt über einen Shortcode in die Seite ein, die Sie dafür verwenden möchten .

Lassen Sie den Shortcode-Handler / Rückruf entweder HTTP POST oder GET abhören und rufen Sie die Datenspeicherung oder andere sekundäre Methoden entsprechend auf.


Ist es sinnvoll, WordPress als Endpunkt / Backend zu verwenden?

Es hängt davon ab, ob.
Wenn Sie lediglich einen Endpunkt zum Speichern von Daten benötigen: Nein. Das Laden des gesamten Kerns, um nur ein paar Codezeilen mithilfe von zu speichern, wpdblohnt sich nicht.
Wenn Sie ein Backend benötigen, das über einen Webbrowser angemeldet werden kann, das Tabellendaten anzeigt, Möglichkeiten zum Ändern dieser Daten bietet, möglicherweise sogar mit mehreren Zugriffsebenen / Benutzerrollen und -rechten, dann ist dies sinnvoll.


3
Wirklich gute Antwort +1.
gmazzap

2
Verdoppeln Sie das. +1
Kaiser

Danke für die wirklich tolle Antwort! Daher habe ich zwei Möglichkeiten: 1. Schreibe mein eigenes Plugin; 2. Schreiben Sie einen separaten Dienst. Da der Endpunkt nur ein paar GET-Parameter benötigt und einen JSON-Body zurückgibt, sollte ich meinen eigenen Service schreiben, da wpdbes sich nicht lohnt, den gesamten Kern zu laden, um nur ein paar Codezeilen zu speichern .
Yep_It's_Me

0

Das API-Endpunkt- Plugin sollte alle Ihre Anforderungen abdecken, insbesondere wenn Sie mit MySQL vertraut sind. Sie würden die folgenden Schritte ausführen:

  1. Erstellen Sie eine neue Twig-Vorlage, geben Sie Ihre MysQL-Abfrage ein, um Daten von Ihrer WordPress-Site abzurufen, und geben Sie die Daten mithilfe der Twig-Syntax in einem beliebigen Format aus. Zum Beispiel JSON.

  2. Erstellen Sie einen neuen API-Endpunkt, geben Sie ihm einen Namen und konfigurieren Sie ihn für die Verwendung der in Schritt 1 erstellten Zweigvorlage.

Wiederholen Sie anschließend die Schritte 1 und 2 für jeden Endpunkt, den Sie erstellen möchten. API-Endpunkte verwenden das Standard-WordPress-Authentifizierungssystem. Erstellen Sie daher am besten einen separaten Benutzer in WordPress und verwenden Sie dessen Benutzernamen / Kennwort, um auf Ihre API-Endpunkte zuzugreifen.


API-Endpunkte sehen für ein Projekt von mir interessant aus, erfordern jedoch Twig Anything, was fast unmöglich zu bekommen ist, da ein Login in Ihrem Blog erforderlich ist, das keine öffentlichen Abonnements zulässt.
Mettjus

Ich erkannte jetzt, dass es nicht kostenlos ist ...
Mettjus

0

Die neue Version der WP REST-API befindet sich in der Beta-Version, enthält jedoch eine recht gute Dokumentation zum Registrieren benutzerdefinierter REST-Endpunkte. Es gibt auch einen sehr kleinen Klappentext darüber, wie es in Version 1 gemacht werden könnte, den ich ausprobieren werde, da die Beta nicht garantiert stabil ist oder bleibt. Ich gehe davon aus, dass Sie dann wpdb innerhalb der von Ihnen registrierten Methoden verwenden können. Ich verwende eigentlich nur ACF-Material und besetze es in Objekte in meinem PHP, um eine schöne, durchsuchbare / sortierbare Indexseite mit mehreren Eigenschaften mit angleJS zu erstellen.

Vergleich zwischen WWP REST API 1 und 2 aus ihren Dokumenten

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.