Creazione di un'API REST personalizzata


10

Ho un sito WordPress.org che accetta l'input dell'utente, cerca un database personalizzato e visualizza i risultati della query. Ho questo lavoro usando la classe wpdb . Ora sto cercando di farlo funzionare per un'app Android.

Da quanto ho capito, la costruzione di un server RESTful è l'attuale "best practice" per questo tipo di cose. Ho esaminato alcuni plugin che potrebbero aiutarmi a farlo, e mi sono imbattuto in:

  1. json-rest-api - Mi sembra che questo esponga solo le funzionalità principali di WordPress (ad es. post, pagine, utenti, ecc.) e non riesco a vedere come ottenerlo per eseguire query personalizzate su tabelle non predefinite.

  2. Questo post sul blog dice che wp mvc fa esattamente quello che voglio, tranne che non è stato aggiornato da oltre 2 anni, quindi questo lo esclude.

  3. C'è anche Jetpack ma da quello che ho visto, il json-rest-api è la versione aggiornata di questo e sembra dare solo funzionalità di base.

C'è un modo per far funzionare uno di questi plugin per endpoint personalizzati? O ci sono altri plugin che non ho ancora trovato?

Se non utilizzo un plug-in, immagino che dovrei farlo da solo. Posso fare questo da zero (utilizzando wpdb, msqlio qualcosa del genere), o con l'aiuto di un'API, come Restler .

Se faccio il mio, dovrei creare un modello nel mio tema, fare le cose REST lì dentro e assegnare quel tema a una pagina nella dashboard? O sarebbe meglio avere un altro server in esecuzione separato da WordPress per questo?

Per quanto posso vedere, queste sono le mie uniche opzioni. Vorrei sapere quali sono le migliori pratiche consigliate per questo tipo di cose. Trovo difficile credere che nessun altro abbia fatto questo. Ci sono opzioni che ho trascurato?


Con cosa sei finito? Sto cercando di creare percorsi / endpoint personalizzati per l'API WP rest e 1) la documentazione è terribile 2) ci sono zero esempi in tutto il web. Fammi sapere quale percorso hai preso per favore!
Jacksonkr,

1
Ho deciso di iniziare a costruire la mia API al di fuori di Wordpress, ma che ha accesso allo stesso database. In realtà non ci sono mai riuscito, dato che questo era solo un progetto secondario e sono stato troppo impegnato con altre cose: P. Se fossi in te darei un'occhiata ai framework symfony2 o laravel . Sono davvero veloci e facili da mettere in funzione.
Yep_It's_Me

Risposte:


15

TL; DR

Sì, WordPress può certamente fungere da backend per un'app mobile. Sì, una pagina può fungere da endpoint / interfaccia di riposo. No, un modello di tema non è il territorio giusto per la logica. Scrivi il tuo plugin.


puntatori

Trovo difficile credere che nessun altro abbia fatto questo.

Io, per esempio, ho. Più di una volta. E sono quasi certo di non essere solo. "Nessuno ne ha ampiamente parlato sul blog" è probabilmente la nozione più corretta.

Se non utilizzo un plug-in, immagino che dovrei farlo da solo. Posso farlo da zero (usando wpdb, msqli o qualcosa del genere) o con l'aiuto di un'API come Restler .

Non conosco "Restler" e comunque non rientra in questo stack.
Per quanto riguarda "l'utilizzo di wpdb, msqli o qualcosa del genere": si userebbe sicuramente wpdbper salvare i dati (ricevuti) nel database, ma non è pertinente alla logica dell'endpoint.

Un modello di tema non è quello che dovresti esaminare. I temi sono pensati per la presentazione visiva. Un endpoint REST non ha affatto bisogno di un aspetto visivo.

Inserire l'endpoint nella pagina che si desidera utilizzare tramite un codice funzione .

Chiedi al gestore / callback di shortcode di ascoltare HTTP POST o GET e invocare di conseguenza il salvataggio dei dati o altri metodi secondari.


Ha senso usare WordPress come endpoint / backend?

Dipende.
Se tutto ciò che serve è un endpoint per salvare i dati: No. Caricare l'intero core solo per salvare alcune righe di codice usando wpdbnon ne vale la pena.
Se hai bisogno di un back-end a cui è possibile accedere tramite un browser Web, in grado di visualizzare dati tabulari, offrire modi per modificare tali dati, magari anche con più livelli di accesso / ruoli e diritti utente, quindi sì, ha senso.


3
Risposta davvero buona +1.
gmazzap

2
Raddoppia quello. +1
kaiser,

Grazie per l'ottima risposta! Quindi, le due opzioni che ho sono: 1. scrivere il mio plugin; 2. scrivere un servizio separato. Dal momento che tutto ciò di cui ho bisogno per l'endpoint è prendere alcuni parametri GET e restituire un corpo JSON, penso che dovrei scrivere il mio servizio perché " wpdbNon vale la pena caricare l'intero core solo per salvare alcune righe di codice ".
Yep_It's_Me

0

Il plug-in API Endpoint dovrebbe coprire tutte le tue esigenze, specialmente se hai familiarità con MySQL. Faresti i seguenti passi:

  1. Crea un nuovo modello Twig, inserisci la tua query MysQL per recuperare i dati dal tuo sito WordPress e usa la sintassi Twig per produrre i dati in qualsiasi formato. Ad esempio, JSON.

  2. Crea un nuovo endpoint API, assegnagli un nome e configuralo per utilizzare il modello di ramoscello creato nel passaggio 1.

Al termine, ripetere i passaggi 1 e 2 per ogni endpoint che si desidera creare. Gli endpoint API utilizzano il sistema di autenticazione WordPress standard, quindi sarebbe meglio creare un utente separato in WordPress e utilizzare il suo nome utente / password per accedere agli endpoint API.


Gli endpoint API sembrano interessanti per un mio progetto, ma richiedono Twig Anything che è quasi impossibile da ottenere in quanto richiede l'accesso al tuo blog che non consente abbonamenti pubblici.
mettjus,

Ora ho capito che non è gratuito ...
mettjus

0

La nuova versione dell'API REST WP è in beta, ma ha una documentazione abbastanza buona su come registrare endpoint REST personalizzati. C'è anche un piccolo errore su come potrebbe essere fatto nella versione 1, che ho intenzione di provare poiché la beta non è garantita o stabile. Presumo che tu possa usare wpdb dai metodi che ti registri. In realtà sto solo usando roba ACF e la prepossessando in oggetti nel mio php per creare una pagina di indice multi-proprietà piacevole, ricercabile / ordinabile con angularJS.

Confronto tra API REST WWP 1 e 2 dai loro documenti

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.