Construirea unui API REST personalizat
Am un site WordPress.org care preia input de la utilizatori, caută într-o bază de date personalizată și afișează rezultatele interogării. Acest lucru funcționează folosind clasa wpdb. Acum încerc să fac același lucru pentru o aplicație Android.
După cum am înțeles, construirea unui server RESTful este cea mai bună practică actuală pentru acest tip de scenariu. Am căutat câteva plugin-uri care m-ar putea ajuta și am găsit:
json-rest-api - Se pare că acesta expune doar funcționalitățile de bază ale WordPress (adică postări, pagini, utilizatori etc.) și nu văd cum aș putea executa interogări personalizate pe tabele non-standard.
Acest articol de blog menționează că wp mvc face exact ceea ce vreau, dar nu a fost actualizat de peste 2 ani, ceea ce îl face mai puțin atractiv.
Există și Jetpack, dar din câte am văzut, json-rest-api este versiunea actualizată și pare să ofere doar funcționalități de bază.
Există vreo modalitate de a face aceste plugin-uri să funcționeze cu endpoint-uri custom? Sau există alte plugin-uri pe care nu le-am descoperit încă?
Dacă nu folosesc un plugin, presupun că ar trebui să dezvolt propria soluție. Pot face acest lucru de la zero (folosind wpdb
, msqli
sau alte metode), sau cu ajutorul unui API precum Restler.
Dacă dezvolt propria soluție, ar fi mai bine să creez un template în tema mea, să implementez funcționalitatea REST acolo și să atribui acel template unei pagini în dashboard? Sau ar fi mai bine să rulez un server separat pentru această funcționalitate?
Din câte văd, acestea sunt singurele mele opțiuni. Aș dori să știu care sunt cele mai bune practici recomandate pentru acest tip de situație. Mi-e greu să cred că nimeni altcineva nu a făcut acest lucru. Există alte opțiuni pe care le-am omis?
TL;DR
Da, WordPress poate funcționa cu siguranță ca backend pentru o aplicație mobilă. Da, o pagină poate acționa ca un endpoint/interfață REST. Nu, un șablon de temă nu este locul potrivit pentru logica. Scrie-ți propriul plugin.
Indicații
Mi-e greu să cred că nimeni altcineva nu a făcut asta.
Eu, personal, am făcut-o. De mai multe ori. Și sunt aproape sigur că nu sunt singur. "Nimeni nu a scris extensiv despre asta pe bloguri" este probabil noțiunea mai corectă.
Dacă nu folosesc un plugin, presupun că ar trebui să o fac singur. Pot face asta de la zero (folosind wpdb, msqli sau ceva similar), sau cu ajutorul unei API precum Restler.
Nu cunosc "Restler" și asta este în afara domeniului acestui stack.
În ceea ce privește "folosirea wpdb, msqli sau altceva": Cu siguranță ai folosi wpdb
pentru a salva datele (primite) în baza de date, dar nu este relevant pentru logica endpoint-ului.
Un șablon de temă nu este ceea ce ar trebui să analizezi. Temele sunt concepute pentru prezentarea vizuală. Un endpoint REST nu are nevoie deloc de o prezentare vizuală.
Inserează endpoint-ul în pagina pe care vrei să o folosești pentru acest scop prin intermediul unui shortcode.
Fă ca handler-ul/callback-ul shortcode-ului să asculte fie după HTTP POST fie după GET și să invoce salvarea datelor sau alte metode secundare în consecință.
Are sens să folosești WordPress ca endpoint/backend?
Depinde.
Dacă tot ce ai nevoie este un endpoint pentru a salva date: Nu. Încărcarea întregului core doar pentru a salva câteva linii de cod folosind wpdb
nu merită.
Dacă ai nevoie de un backend în care să te poți autentifica prin browser, care să poată afișa date tabelare, să ofere modalități de a modifica aceste date, poate chiar cu multiple niveluri de acces/roluri și drepturi ale utilizatorilor, atunci da, are sens.

Mulțumesc pentru răspunsul extrem de util!
Deci, din cele spuse, am două opțiuni: 1. să scriu propriul meu plugin; 2. să scriu un serviciu separat.
Deoarece tot ce trebuie să facă endpoint-ul este să primească câțiva parametri GET și să returneze un corp JSON, cred că ar fi mai bine să scriu un serviciu separat pentru că "Încărcarea întregului nucleu doar pentru a economisi câteva linii de cod folosind wpdb
nu merită efortul".

Plugin-ul API Endpoints ar trebui să acopere toate nevoile dumneavoastră, în special dacă sunteți familiarizat cu MySQL. Pașii pe care trebuie să-i urmați sunt următorii:
Creați un nou șablon Twig, introduceți interogarea MySQL pentru a prelua datele de pe site-ul dumneavoastră WordPress și folosiți sintaxa Twig pentru a afișa datele în orice format dorit, de exemplu JSON.
Creați un nou punct final API, dați-i un nume și configurați-l să utilizeze șablonul Twig creat la pasul 1.
Odată finalizat, repetați pașii 1 și 2 pentru fiecare punct final API pe care doriți să-l creați. API Endpoints utilizează sistemul standard de autentificare WordPress, așadar este recomandat să creați un utilizator separat în WordPress și să utilizați numele de utilizator/parola acestuia pentru a accesa punctele finale API.

API Endpoints pare interesante pentru un proiect al meu, dar necesită Twig Anything, care este aproape imposibil de obținut, deoarece necesită autentificare pe blogul tău, care nu permite înscrieri publice.

Noua versiune a WP REST API este în Beta, dar are o documentație destul de bună despre cum să înregistrezi endpoint-uri REST personalizate. Există, de asemenea, o scurtă mențiune despre cum se putea face în versiunea 1, pe care o voi încerca, deoarece versiunea beta nu este garantată să fie sau să rămână stabilă. Presupun că ai putea folosi wpdb din interiorul metodelor pe care le înregistrezi. De fapt, eu folosesc doar funcționalități ACF și le preprocesez în obiecte în PHP pentru a crea o pagină de index cu mai multe proprietăți, căutabilă/sortabilă, folosind AngularJS.
