Creare un'API REST personalizzata
Ho un sito WordPress.org che riceve input dagli utenti, cerca in un database personalizzato e mostra i risultati della query. Ho già implementato questa funzionalità usando la classe wpdb. Ora sto cercando di farla funzionare per un'app Android.
Da quello che ho capito, creare un server RESTful è la "best practice" attuale per questo tipo di scenario. Ho esaminato alcuni plugin che potrebbero aiutarmi e ho trovato:
json-rest-api - A quanto pare questo espone solo le funzionalità core di WordPress (post, pagine, utenti, ecc.) e non vedo come potrei usarlo per eseguire query personalizzate su tabelle non standard.
Questo articolo dice che wp mvc fa esattamente quello che voglio, ma non viene aggiornato da oltre 2 anni, quindi è da escludere.
C'è anche Jetpack ma da quello che ho visto, json-rest-api è la versione aggiornata e sembra offrire solo funzionalità core.
Esiste un modo per far funzionare questi plugin con endpoint personalizzati? O ci sono altri plugin che non ho ancora trovato?
Se non uso un plugin, penso che dovrei sviluppare una soluzione personalizzata. Potrei farlo da zero (usando wpdb
, msqli
o simili), oppure con l'aiuto di un'API come Restler.
Se sviluppo una soluzione custom, sarebbe meglio creare un template nel mio tema, implementare la parte REST lì e assegnare quel template a una pagina nel pannello di controllo? O sarebbe preferibile avere un server separato da WordPress per questo scopo?
Da quello che vedo, queste sono le mie uniche opzioni. Vorrei sapere quali sono le best practice raccomandate per questo scenario. Trovo difficile credere che nessun altro abbia affrontato questo problema. Ci sono opzioni che ho trascurato?
TL;DR
Sì, WordPress può sicuramente fungere da backend per un'app mobile. Sì, una pagina può fungere da endpoint REST / interfaccia. No, un template del tema non è il luogo adatto per la logica. Scrivi il tuo plugin personalizzato.
Indicazioni
Trovo difficile credere che nessun altro l'abbia fatto.
Io, per esempio, l'ho fatto. Più di una volta. E sono quasi certo di non essere il solo. "Nessuno ne ha parlato approfonditamente su un blog" è probabilmente la nozione più corretta.
Se non uso un plugin, immagino che dovrei realizzarlo da solo. Posso farlo da zero (usando wpdb, msqli o simili), oppure con l'aiuto di un'API come Restler.
Non conosco "Restler" e comunque è fuori dallo scopo di questo stack.
Per quanto riguarda "usare wpdb, msqli o simili": certamente useresti wpdb
per salvare (i dati ricevuti) nel database, ma non è pertinente per la logica dell'endpoint.
Un template del tema non è ciò che dovresti considerare. I temi sono pensati per la presentazione visiva. Un endpoint REST non ha bisogno di un aspetto visivo.
Inserisci l'endpoint nella pagina che vuoi utilizzare per questo scopo tramite uno shortcode.
Fai in modo che il gestore/callback dello shortcode ascolti le richieste HTTP POST o GET e richiami di conseguenza il salvataggio dei dati o altri metodi secondari.
Ha senso usare WordPress come endpoint/backend?
Dipende.
Se tutto ciò di cui hai bisogno è un endpoint per salvare dati: No. Caricare l'intero core solo per salvare poche righe di codice usando wpdb
non ne vale la pena.
Se hai bisogno di un backend accessibile via browser web, che possa visualizzare dati tabellari, offrire modi per modificarli, magari con diversi livelli di accesso / ruoli e permessi utente, allora sì, ha senso.

Grazie per la risposta davvero ottima!
Quindi da ciò, le due opzioni che ho sono: 1. scrivere il mio plugin; 2. scrivere un servizio separato.
Dato che tutto ciò di cui ho bisogno è che l'endpoint prenda alcuni parametri GET e restituisca un corpo JSON, penso che dovrei scrivere un mio servizio perché "Caricare l'intero core solo per risparmiare poche righe di codice usando wpdb
non ne vale la pena".

Il plugin API Endpoints dovrebbe coprire tutte le tue esigenze, specialmente se hai familiarità con MySQL. Dovrai seguire questi passaggi:
Crea un nuovo Template Twig, inserisci la tua query MySQL per recuperare i dati dal tuo sito WordPress e utilizza la sintassi Twig per visualizzare i dati in qualsiasi formato. Ad esempio, JSON.
Crea un nuovo endpoint API, dagli un nome e configuralo per utilizzare il Template Twig che hai creato nel passo 1.
Una volta completato, ripeti i passaggi 1 e 2 per ogni endpoint che desideri creare. API Endpoints utilizza il sistema di autenticazione standard di WordPress, quindi sarebbe meglio creare un utente separato nel tuo WordPress e utilizzare il suo nome utente/password per accedere ai tuoi endpoint API.

La nuova versione della WP REST API è in Beta, ma ha una documentazione piuttosto buona su come registrare endpoint REST personalizzati. C'è anche una breve nota su come potrebbe essere fatto nella versione 1, che proverò dato che la beta non è garantita essere o rimanere stabile. Assumo che si possa poi utilizzare wpdb all'interno dei metodi che si registrano. Sto effettivamente utilizzando ACF e preprocessandolo in oggetti nel mio PHP per creare una bella pagina indice con proprietà multiple, ricercabile e ordinabile, con angularJS.
