Come rimuovere i percorsi e gli endpoint API REST predefiniti di WordPress
Pubblicato: 2018-07-31L'API REST di WordPress è stata introdotta nel core nella versione 4.7 (Vaughan) nel dicembre 2016. Come ogni altra modifica significativa apportata al core del WP, è stata ferocemente dibattuta (al momento, luglio 2018, Gutenberg è oggetto di tale dibattito/ controversia). Alla fine non è successo niente. Coloro a cui non importava dell'API REST non si preoccupano ancora. Coloro che si preoccupano hanno realizzato alcune app, integrazioni, plug-in e altri progetti interessanti.
Quando l'API REST di #wordpress è stata incorporata nel core v4.7, le persone stavano impazzendo! Lo stesso che impazziscono quando accade qualsiasi cambiamento. Alla fine, funziona tutto bene.
CLICCA PER TWEETE mentre siamo in tema di progetti interessanti. Sai che quelli di maggior successo iniziano con una pagina in arrivo? E in molti casi, è una pagina in arrivo che è stata creata utilizzando il plug-in Coming Soon & Maintenance Mode.
Questo plug-in viene fornito con un builder drag-and-drop, oltre 170 temi, configurazione SEO best-in-class, servizi di risposta automatica e e-mail e molte altre funzionalità che ti permetteranno di creare la perfetta pagina in arrivo in pochi minuti. E per di più, il plugin è integrato con Depositphotos, il che significa che puoi trovare le migliori immagini direttamente dal plugin. Ma nel caso in cui non sei un fan della raccolta offerta da Depositphotos, Yay Images è anche un'ottima fonte di contenuti stock.
Ma ora basta, torniamo al nostro argomento principale, l'API REST.
Ci preoccupiamo dell'API REST e la utilizziamo durante la creazione di SaaSe basati su WP. È stabile, veloce, facile da usare, si adatta perfettamente a WP e nella maggior parte dei casi è ben documentato. Se non sai cos'è l'API REST, questo probabilmente non è il post che fa per te, ma dai un'occhiata a cos'è l'API REST (video e testo) e forse la utilizzerai nel tuo prossimo progetto.
Rotta? Punto finale? Non è tutto uguale?
No, non è la stessa cosa. La differenza è sottile per la maggior parte delle persone e usano i termini route ed endpoint in modo intercambiabile, ma non è così complicato. Il percorso è più o meno l'URL. È il "nome" utilizzato per accedere a un endpoint. Su una singola route, puoi avere più endpoint perché l'endpoint che usi dipende dal tipo di richiesta HTTP che utilizzi. GET
, POST
, PUT
o DELETE
possono e di solito servono a scopi diversi. Accedendo a yoursite.com/wp-json/v2/posts/1 tramite GET
otterrai i dettagli per il post con ID #1. L'uso di DELETE
sulla stessa route chiamerà un endpoint diverso (o una funzione se lo desideri) che elimina quel post. Il manuale ufficiale dell'API REST contiene maggiori informazioni su questo argomento, quindi immergiti per i dettagli.
#wordpress Le route e gli endpoint dell'API REST non sono la stessa cosa! Una route è il "nome" utilizzato per accedere a un endpoint. Un singolo percorso è solitamente associato a più endpoint.
CLICCA PER TWEETPerché dovrei rimuovere gli endpoint o le route dell'API REST WP predefiniti?
Come abbiamo discusso nell'articolo sulla rimozione delle regole di riscrittura predefinite, ci sono cento motivi per cui uno sviluppatore di WordPress lo farebbe.
"Renderà WordPress più veloce perché non deve analizzare tutti quegli endpoint". è ancora qualcosa con cui non sono d'accordo e credo che il guadagno sarà inferiore a un millisecondo ma non può far male.
Ti piace mantenere le cose pulite e poiché non stai utilizzando l'API REST, perché avere percorsi API? Certo, ha senso. Ma in tal caso, utilizza un plug-in per disabilitare completamente l'API REST.
E poi c'è il motivo per cui disabilitiamo le rotte (e gli endpoint) predefiniti. Utilizziamo pesantemente endpoint API REST personalizzati ma non abbiamo bisogno di quelli predefiniti. Quindi, è bello mantenere le cose snelle e pulite. Inoltre, non può danneggiare la sicurezza poiché stiamo esponendo un minor numero di dati al duro mondo esterno.
Mostrami gli endpoint API predefiniti
Il riferimento all'endpoint è disponibile nel manuale dell'API REST. Più o meno tutti i dati disponibili pubblicamente saranno disponibili anche tramite l'API REST. Una richiesta di esempio a demo.wp-api.org/wp-json/wp/v2/posts mostrerà dieci post in formato JSON. Se desideri una versione leggibile di quella risposta, dovrai decodificare la risposta JSON. Lo stesso vale per pagine, categorie e altre strutture di dati. La struttura dei dati e gli endpoint sono molto simili, come puoi vedere sfogliando il riferimento.
L'altro modo per vedere i percorsi predefiniti è aggiungere questo codice al file functions.php
del tuo tema e quindi aprire yoursite.com/wp-json/. Abilita i collegamenti graziosi se non l'hai già fatto.
add_filter( 'rest_endpoints', 'show_default_endpoints' ); function show_default_endpoints( $endpoints ) { var_export( array_keys( $endpoints ) ); die; }
Mostra i 31 endpoint REST predefiniti. Il numero è, ovviamente, suscettibile di modifiche man mano che vengono aggiunte nuove funzionalità di base. E sarà diverso se hai plug-in che aggiungono endpoint personalizzati.
Rimozione degli endpoint predefiniti
Il codice sopra richiede modifiche minime. Restituisce un array vuoto e tutti gli endpoint sono spariti.
add_filter( 'rest_endpoints', 'remove_default_endpoints' ); function remove_default_endpoints( $endpoints ) { return array( ); }
"Tutti gli endpoint" include anche i tuoi endpoint personalizzati, quindi è consigliabile non eliminarli. Ecco un modo semplice per mantenerli attivi:
add_filter( 'rest_endpoints', 'remove_default_endpoints_smarter' ); function remove_default_endpoints_smarter( $endpoints ) { $prefix = 'your_custom_endpoint_prefix'; foreach ( $endpoints as $endpoint => $details ) { if ( !fnmatch( '/' . $prefix . '/*', $endpoint, FNM_CASEFOLD ) ) { unset( $endpoints[$endpoint] ); } } return $endpoints; }
Salta semplicemente gli endpoint con il tuo prefisso personalizzato e mantienili nell'array. Non dimenticare di restituire l'array.
Personalizzazione del prefisso URL REST
Gli endpoint personalizzati, nonostante siano personalizzati, utilizzano lo stesso prefisso degli endpoint predefiniti. Sembrano mysite.com/wp-json/custom-endpoint/. Forse lo trovi brutto o non ti piacciono le cose predefinite. Cambiarlo è una questione di una riga di codice. A scopo di test, inserisci il codice qui sotto nel functions.php
del tema e dopo aver salvato Dashboard aperto – Impostazioni – Permalink per svuotare le regole di riscrittura.
add_filter( 'rest_url_prefix', 'rest_url_prefix' ); function rest_url_prefix( ) { return 'api'; }
Con il filtro sopra i tuoi endpoint saranno mysite.com/api/custom-endpoint/ e l'apertura del vecchio URL mysite.com/wp-json/custom-endpoint/ genererà un errore 404.
Assicurati di includere un numero di versione negli endpoint personalizzati poiché un prefisso non viene aggiunto automaticamente da WP. Un prefisso del numero di versione garantisce che le modifiche successive non interrompano i client che utilizzano i vecchi endpoint. Includi semplicemente il prefisso della versione quando chiami register_rest_route()
per ottenere qualcosa come mysite.com/api/v1/custom-endpoint/ e mantieni tutti i tuoi endpoint dietro quel "v1" in modo da poter avere "v2" ecc. in seguito.
Metti alla prova le tue modifiche
La rimozione o la modifica delle route e degli endpoint dell'API REST non farà alcuna differenza sul 98% dei siti WP. "Perché?" – Perché non usano affatto l'API REST. Ma se il tuo lo fa, assicurati di testare le app collegate perché, come con tutto, le modifiche possono rompere le cose. Ed è meglio individuare un bug oggi che domani.