Creare un'API REST personalizzata

29 set 2014, 11:14:11
Visualizzazioni: 14.5K
Voti: 10

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:

  1. 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.

  2. Questo articolo dice che wp mvc fa esattamente quello che voglio, ma non viene aggiornato da oltre 2 anni, quindi è da escludere.

  3. 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?

2
Commenti

Alla fine cosa hai scelto? Sto cercando di creare route/endpoint personalizzati per l'API REST di WordPress e 1) la documentazione è pessima 2) non ci sono esempi in giro per il web. Fammi sapere che strada hai intrapreso, per favore!

Jacksonkr Jacksonkr
27 apr 2015 19:34:18

Ho deciso di optare per la creazione della mia API al di fuori di WordPress, ma con accesso allo stesso database. In realtà non ci sono mai arrivato, dato che era solo un progetto secondario e sono stato troppo occupato con altre cose :P. Se fossi in te darei un'occhiata ai framework symfony2 o laravel. Sono davvero veloci e semplici per far partire qualcosa in tempi brevi.

Yep_It's_Me Yep_It's_Me
28 apr 2015 01:27:04
Tutte le risposte alla domanda 3
3
15

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.

29 set 2014 11:35:23
Commenti

Risposta davvero buona +1.

gmazzap gmazzap
29 set 2014 12:23:37

Raddoppio. +1

kaiser kaiser
29 set 2014 12:47:37

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".

Yep_It's_Me Yep_It's_Me
30 set 2014 03:14:07
2

Il plugin API Endpoints dovrebbe coprire tutte le tue esigenze, specialmente se hai familiarità con MySQL. Dovrai seguire questi passaggi:

  1. 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.

  2. 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.

7 ago 2015 16:45:30
Commenti

Gli endpoint API sembrano interessanti per un mio progetto, ma richiedono Twig Anything che è quasi impossibile da ottenere poiché richiede l'accesso al tuo blog che non permette iscrizioni pubbliche.

mettjus mettjus
13 set 2015 12:58:27

Ora ho capito che non è gratuito...

mettjus mettjus
13 set 2015 13:00:36
0

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.

Confronto tra WWP REST API 1 e 2 dalla loro documentazione

2 mar 2016 19:43:59