Scopo dell'API REST?


17

Prima di tutto, capisco che questo è un plug-in al momento, ma sicuramente è quasi parte di WordPress comunque. Quindi spero che questo non venga segnalato come fuori tema.

Ho letto i loro documenti ufficiali, molti altri articoli e guardato video tutorial, ma non riesco ancora ad ottenere alcuni punti .. Questo è sicuramente il futuro di WordPress, è molto utile per lo sviluppo di app mobili e l'utilizzo / condivisione di dati tra siti diversi ma: cosa fa solo per il mio sito?


Considera questo:

Al momento sto lavorando ai commenti. Voglio che la sezione commenti venga caricata solo quando l'utente scorre la sezione commenti (con offset di -200px, in modo che non ci siano ritardi) .

  • Sto per attivare una chiamata Ajax quando l'utente scorre fino a quel punto
  • La chiamata Ajax invia alcuni dati con esso, come post_id ecc
  • Esegui WP_Comment_Query()nel server
  • Invia JSONdati al cliente con relazioni di commento, nomi, contenuti ecc
  • Usa JavaScript document.createElement(), innerHTML ecc. Per creare e generare commenti

Ora .. Perché dovrei usare invece l'API REST? A che serve per me? Solo a prova di futuro?

Vorrei ancora bisogno di usare JavaScript per produrre tutti i dati che ricevo .. non ho trovato nessun articoli di buona perché o per quello che dovrei usare REST API (ad eccezione di trasferimento dei dati tra siti e app mobile sviluppo) ..


L'uso dell'API REST a favore del modo in cui hai descritto ti darebbe il vantaggio di un modo strutturato e unificato . Non è necessario occuparsi dei raccoglitori di contenuti (query di commento) o del formato di risposta (json). Potrebbero esserci anche alcuni miglioramenti con la memorizzazione nella cache. Il rovescio della medaglia che vedo in generale è che il templating si sposta completamente sul browser che, secondo la mia opinione di "backend-developer", solleva problemi di prestazioni.
David

Come prevedi di inviare nuovamente i dati JSON al client? Come stai costruendo il codice lato server?
czerspalace,


@David Fondamentalmente l'API REST esegue tutte le query stesse e devo solo alimentare le stringhe di query come parametri? A proposito di modelli .. Vedo quello che stai dicendo, fortunatamente l'hardware diventa più potente ogni anno. Sfortunatamente ci saranno sempre persone che si rifiutano di impegnarsi in quella materia (vecchi utenti di IE, ti guardo) .
N00b

@czerspalace 1. WP_Comment_Query() 2. Costruisci un array di commenti ciascuno con un array di parametri nel whileloop 3. json_encode() 4. echo indietro dati codificati. Tutto questo in wp_ajaxe / o wp_ajax_noprivfunzione.
N00b

Risposte:


8

Allo stato attuale, è una funzionalità mal progettata che non ha alcun vantaggio reale per uno sviluppatore competente.

L'idea di base, così com'è al momento in cui viene scritta questa risposta, è quella di esporre le funzionalità principali di WordPress come API REST JSON. Ciò consentirà il disaccoppiamento della logica "business" di WordPress dall'interfaccia utente e consentirà di creare diverse UI complete o parziali per gestire ed estrarre informazioni da wordpress. Questo di per sé non è una rivoluzione, ma un'evoluzione. solo una sostituzione dell'API XML-RPC che da sola semplifica l'HTTP basato sull'API di invio.

Come in ogni evoluzione, ad ogni passo ti potresti chiedere, quale vantaggio ottieni dal precedente stato, e la risposta è probabilmente "non molto", ma speriamo che i passi si accumulino in una grande differenza.

Allora perché la prefazione negativa a questa risposta? Perché la mia esperienza come sviluppatore di software è che raramente è possibile progettare un'API generica che sia effettivamente utile senza avere casi d'uso concreti a cui rispondere. Un caso d'uso concreto qui può essere la sostituzione dell'API XML-RPC per la gestione automatizzata di wordpress, ma qualsiasi front end correlato deve essere specifico del sito e poiché vi è un'enorme penalità di prestazione per ogni richiesta inviata dal client al server non si può semplicemente utilizzo aggregato di diverse API per ottenere il risultato desiderato in modo che gli utenti rimangano felici. Ciò significa che per il front-end, per un utilizzo non banale, ci sarà ancora poca differenza nello sforzo di sviluppo tra l'utilizzo della route AJAX e la route REST-API.


Grazie, questo peggiora le cose! Sinceramente non riesco a decidere quale strada prendere. Quello che so è che probabilmente avrò bisogno di creare un'app mobile in futuro. Il tuo consiglio è che l'API REST allo stato attuale è una schifezza ?
N00b

No, solo che non mostra alcun vantaggio reale. Per quanto riguarda se usarlo o no, come sempre dovresti usare lo strumento che conosci meglio, soprattutto dovresti considerare che il resto api è ancora in beta. Prenderei comunque in considerazione la registrazione di rotte con la parte dell'API che è già nel core in quanto ti darà un URL più pulito, quelli che sarai in grado di memorizzare nella cache se necessario, qualcosa che non puoi fare con l'end point ajax.
Mark Kaplun,

3

I due vantaggi generali sono:

  1. Puoi (eventualmente) eseguire tutte le attività di amministrazione senza l'interfaccia di amministrazione.
  2. È possibile ottenere tutti i dati per la visualizzazione ed eliminare completamente il front-end (e scrivere PHP).

Per quanto riguarda il tuo esempio in particolare-

Sostituisci i passaggi 3 e 4 con l'API REST e sostituisci i passaggi 1, 2 e 5 con Backbone.js. BOOM, applicazione web dinamica. O forse ti senti più a tuo agio a fare il routing complesso necessario per il tuo sito con Python.


Sono molto irritato dal fatto che tutti online affermino che il significato dinamico dell'applicazione web è molto soggettivo (ed è per questo che non dicono esattamente di cosa si tratta), il che significa che non so al 100% cosa sia rispetto al sito Web non dinamico .. Qual è la tua versione di esso? È come una cosa che devo sapere se usare o meno l'API REST.
N00b

2
Applicazione che significa qualcosa che va oltre il rendering di pagine di blog statici che si collegano ad altre pagine di blog statici, un'esperienza "app" come più semplice. Scorri verso il basso fino agli esempi sul sito backbone .
Milo

3

Bene, alcune cose in realtà.

  1. Ti consente di eseguire funzioni specifiche in base alle esigenze, anziché richiedere tutto il calcolo di un intero caricamento della pagina. Quindi, potresti aggiornare periodicamente i commenti con un sovraccarico abbastanza basso senza bisogno di un aggiornamento della pagina semplicemente chiamando quell'endpoint API e aggiornando i dati sulla tua pagina. Questo concetto verrà infine estrapolato in SPA (applicazioni a pagina singola) che caricano rapidamente il sito "client" una volta ed emulano tutte le "modifiche" della pagina senza dover ripetere il richiamo dell'HTML della pagina ogni volta. Questo è già molto popolare con l'avvento di framework come Angular, Ember e React. I siti possono rispondere con una velocità incredibile, sia scaricando un po 'di potenza computazionale per l'utente finale (ciclo di rendering, logica non aziendale) sia riducendo significativamente il numero complessivo di chiamate al server (estrae solo i dati di cui hai bisogno,

  2. Separa la logica aziendale e il renderer. Sì, puoi usare l'API con un altro sito PHP distribuendo i risultati o gestendola con Javascript come hai menzionato, ma puoi anche consumarla con un'applicazione mobile nativa, un'applicazione desktop, ecc. Non solo, ma potresti avere uno di tutti parla della stessa API, che esegue costantemente la stessa logica aziendale, che a sua volta crea coerenza e affidabilità tra i vari client che consumano l'API.

Le API sono buone perché separano le preoccupazioni di logica e visualizzazione.


Informazioni sul primo punto. Perché è meglio del normale JavaScript Ajax che controlla gli aggiornamenti a intervalli e si aggiorna in modo dinamico?
N00b

2
Bene, le chiamate ajax "regolari" SONO solo chiamate a un'API! Non c'è davvero alcuna differenza. L'obiettivo dell'API REST è fornire tale API per la funzionalità principale di Wordpress. In questo modo puoi fare più operazioni usando AJAX, app native, app desktop, ecc. La parte "REST" è solo un sistema di regole / standard che definiscono come dovrebbe essere costruita l'API in modo che sia facile da sviluppare con e mantenere.
Colt McCormack

2

L'API REST di WordPress è la nuova novità. Con applicazioni basate su js a pagina singola e WordPress desiderano diventare una piattaforma di app questo ha molto senso. Il piano è di sostituire XML-RPC con l'API REST (che è una buona cosa per soli motivi di sicurezza!)

https://make.wordpress.org/core/2015/09/21/wp-rest-api-merge-proposal/

  • Il New York Times nuovo sito è costruito su di esso, a quanto pare .
  • Consente alle app mobili e altri servizi esterni di accedere al contenuto di wp (come wp-cli )
  • Consente agli sviluppatori di creare un front-end per app a pagina singola con il loro framework di consumo JSON preferito della settimana e avere tutte le interazioni interessanti a portata di mano.
  • Consente la separazione delle preoccupazioni (come menzionato sopra) e una maggiore indipendenza tra i team di back-end e front-end.

È un altro set di strumenti per portare avanti WordPress. E, anche se è stato un viaggio tortuoso per arrivare dove siamo, penso che valga la pena prendersi il tempo di esplorarlo e comprenderlo.


1

Prima di tutto, REST è leggero

In una riga: quando utilizziamo le API REST eseguiamo il rendering di tutti i dati sul lato client (loop, condizioni e chiamate sul lato server ecc.) Risparmiando larghezza di banda e allo stesso tempo la nostra applicazione diventa pronta per qualsiasi piattaforma mobile, integrazioni di terze parti e modularizzata ( separazione delle preoccupazioni tra frontend e lato server).

Non lo vuoi?


0

Oltre ai 2 grandi punti menzionati da @Milo, utilizzo specificamente l'API REST per esporre i miei dati ad applicazioni non WordPress. Abbiamo un'estensione di Chrome che estrae informazioni dal nostro database WordPress, e questo si ottiene colpendo gli endpoint API REST con richieste POST.


0

Infrastruttura coerente

L'API REST è coerente e leggibile dall'uomo. È auto-documentante.

GET wp-json/wp/v2/postsè abbastanza chiaro cosa fa. Sono GETalcuni post.

Hai uno spazio dei nomi:, wpuna versione: v2e una raccolta di oggettiposts

Riesci a indovinare cosa: GET wp-json/wp/v2/posts/5fa? Che ne dici di: GET wp-json/wp/v2/posts/5/comments Che ne dici di:GET wp-json/shop/v2/orders/345/lines/11/price

Uno sviluppatore può facilmente indovinarlo guardando questo, otterrà il prezzo della linea 11in ordine 345anche senza leggere la documentazione. Lo sviluppatore può anche facilmente dire che proviene dal shopplugin in quanto è spaziato dai nomi.

Che ne dici di che ne POST /wp-json/v2/posts title=New Blog Post pensiPUT /wp-json/v2/posts title=New Title

Anche questo è abbastanza chiaro. Crea un nuovo post. A proposito, restituisce l'ID del nuovo post. Non si tratta di AJAX o dell'API REST. AJAX è semplicemente una tecnologia che accede all'API REST. Considerando che, in precedenza, si dovrà venire con un po 'di nomi di funzione Ajax astratti come: get_price_for_lineitem( $order, $line ). Restituirà solo un numero o un oggetto JSON? Non sono sicuro, dov'è la documentazione. Oh ... era la chiamata Ajax get_order_line_priceo get_lineitem_price.

Lo sviluppatore non deve prendere queste decisioni, perché l' wp-jsonAPI esistente fornisce un buon modello di base da seguire quando si creano i propri endpoint. Certo, un plug-in o uno sviluppatore API possono infrangere queste regole, ma in generale è più facile seguire uno standard che è già stato impostato e la maggior parte degli sviluppatori preferirebbe piuttosto seguire uno schema già impostato (vedere come sono pervasivi i modelli jQuery ora).

ASTRAZIONE senza distrazione

Mi interessa come POST /wp-json/mysite/v1/widgets title=Foobarfunziona? No. Voglio solo crearne uno nuovo Widgete voglio l'ID in cambio. Voglio farlo da un modulo sul mio front-end senza aggiornare la pagina. Se faccio una richiesta a un URL, non mi interessa se si tratta di PHP, C #, ASP.NET o qualsiasi altra tecnologia. Voglio solo creare un nuovo widget.

L'API REST disaccoppia il backend dalla parte anteriore. Tecnicamente, se la tua API è abbastanza buona, puoi cambiare l'intero stack di back-end. Finché hai mantenuto la stessa struttura dell'API REST, tutto ciò che dipendeva dall'API non sarebbe interessato.

Se l'API REST è abbastanza semplice e coerente, usando un nome come Widgetsuna raccolta di oggetti e un nome / identificatore come Widget/2per indicare una singola entità, è davvero semplice scrivere quell'API in una tecnologia molto diversa in quanto è un impianto idraulico di database più o meno di base codice.

Utilizza verbi di richiesta HTTP standard.

Le API REST sfruttano il nucleo di come funziona il web e i VERB (leggi: azione) che usi per mappare le funzioni CRUD dei dati standard.

CREATE : POST
READ   : GET
UPDATE : PUT/PATCH
DELETE : DELETE

Esistono più verbi HTTP, ma questi sono i concetti di base. Ogni singola richiesta su Internet utilizza questi verbi. Un'API REST si trova proprio sopra il modello su cui il web è costruito su richiesta. Non c'è bisogno di alcun livello di comunicazione o modello di astrazione nel mezzo. È solo una richiesta http standard a un URL e restituisce una risposta. Non puoi essere molto più semplice di così.

In sostanza, rende uno sviluppatore più consapevole di come funziona realmente il web e quando ti avvicini alla comprensione di come funzionano i protocolli sottostanti, finisci per creare un prodotto migliore più efficiente.

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.