L'API REST di WordPress è installata e abilitata in una installazione vanilla di WordPress 4.7?

10 dic 2016, 19:07:58
Visualizzazioni: 50.7K
Voti: 46

Ho appena installato WordPress 4.7. Uno dei punti menzionati nell'annuncio è che include un'API REST.

La mia comprensione è:

  • Il plugin WordPress REST API non è più necessario, perché si presume sia stato già integrato nel core di WordPress 4.7.
  • L'API REST di WordPress è abilitata per impostazione predefinita

Tuttavia, noto che in un'installazione vanilla di WordPress 4.7, nessuno degli endpoint sembra funzionare (per esempio http://examples.com/wp-json/wp/v2/posts).

Come posso verificare se la nuova API REST è realmente attivata? L'API REST può essere abilitata o disabilitata attraverso l'interfaccia utente vanilla di WordPress, o devo installare un plugin di terze parti per farlo?

6
Commenti

C'è il tag di discovery nel sorgente della pagina? <link rel='https://api.w.org/' href='https://example.com/wp-json/' /> Sembra funzionare correttamente sui miei siti.

Rarst Rarst
10 dic 2016 19:32:46

@Rarst, se eseguo grep -r "<link rel='https://api.w.org/'" . nella directory html, restituisce un risultato nel file ./wp-includes/rest-api.php con questo testo: echo "<link rel='https://api.w.org/' href='" . esc_url( $api_root ) . "' />\n";

Pep Pep
10 dic 2016 20:13:08

Non nel tuo codice sorgente, ma nel sorgente HTML di una pagina del tuo sito visualizzato nel browser.

Rarst Rarst
10 dic 2016 20:16:23

@Rarst, sì vedo <link href="http://example.com/wp-json/" rel="https://api.w.org/">

Pep Pep
10 dic 2016 20:24:04

Cosa ottieni aprendo il link nel browser? Con WP_DEBUG attivato?

Rarst Rarst
10 dic 2016 20:32:40

Ricevo un errore 404 per http://example.com/wp-json/ sia con WP_DEBUG impostato a true che a false.

Pep Pep
10 dic 2016 20:42:31
Mostra i restanti 1 commenti
Tutte le risposte alla domanda 4
10
32

4.7 lo ha abilitato di default. Il modo più semplice per verificare se funziona è visitare l'URL example.com/wp-json, dove dovresti ottenere un elenco degli endpoint registrati.

Non esiste un'opzione ufficiale per disabilitarlo (almeno si è parlato di questo, non sono sicuro se sia stato incluso nella release), poiché alcune funzionalità del core dipendono da esso.

Le cose più ovvie da verificare se non funziona sono le regole del tuo file htaccess e se hai una directory wp-json.

Inoltre, se gli URL di tipo /wp-json/wp/v2/posts non funzionano per te, ma /?rest_route=/wp/v2/posts sì, significa che devi abilitare i permalink "pretty" nelle impostazioni (suggerito da Giles Butler nei commenti qui sotto).

10 dic 2016 19:37:11
Commenti

Non ho una directory wp-json sotto /var/www/html o nelle sue sottodirectory. Sembra che non abbia un file .htaccess (a parte /var/www/html/wp-content/plugins/akismet/.htaccess, dovrei averne uno?

Pep Pep
10 dic 2016 19:54:38

@Pep, quale webserver usi? hai i permalink estesi attivati?

Mark Kaplun Mark Kaplun
10 dic 2016 19:58:35

Apache. Ho seguito esattamente i passaggi di questi tutorial per installare Wordpress 4.7 su AWS: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/install-LAMP.html e http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hosting-wordpress.html

Pep Pep
10 dic 2016 20:04:51

Non ho familiarità con AWS, ma se hai installato un WordPress standard dovresti avere un file .htaccess nella root dell'installazione. Se non c'è, prova ad andare su Impostazioni > Permalink, assicurati di non avere l'impostazione "Normale", salva e poi controlla se è stato generato un file htaccess

Mark Kaplun Mark Kaplun
10 dic 2016 20:12:36

Avevo i permalink con l'impostazione "Normale". L'ho cambiata in "Nome articolo". WordPress non è riuscito a salvare il file .htaccess apparentemente a causa dei permessi, quindi mi ha mostrato il codice. Ho creato un file .htaccess usando ssh con quel contenuto. Tuttavia, l'API REST continua a restituire 404, anche per http:example.com/wp-json/

Pep Pep
10 dic 2016 20:29:57

Non dovresti ottenere 404. Controlla se funzionano altri URL puliti, come il post predefinito. Se non funziona, hai ancora un problema con l'htaccess

Mark Kaplun Mark Kaplun
10 dic 2016 20:40:56

Sembra che i Permalink non funzionino affatto, non solo gli endpoint API. Ho appena notato che posso accedere solo ai post del blog con l'opzione "Plain". Se cambio i Permalink a qualsiasi altro valore, ricevo l'avviso che dovrei modificare manualmente il file .htaccess, cosa che faccio, ma poi ottengo errori 404 anche per i post del blog. Quindi penso che il mio problema sia con i Permalink in generale, piuttosto che solo con l'API REST. Forse il messaggio "file .htaccess non scrivibile" è un sintomo di qualche altro problema.

Pep Pep
10 dic 2016 20:59:55

hai installato e attivato mod_rewrite?

Mark Kaplun Mark Kaplun
10 dic 2016 21:41:03

Alla fine ho trovato il problema. Poiché non sapevo che i Permalink fossero necessari per il corretto funzionamento dell'API REST, durante la configurazione iniziale ho saltato il passaggio di impostare AllowOverride All nella sezione <Directory "/var/www/html"> del file /etc/httpd/conf/httpd.conf. Ecco perché ignorava le mie modifiche a .htaccess. Ora, con un permalink diverso da Plain, gli endpoint dell'API REST funzionano.

Pep Pep
10 dic 2016 21:53:15

Se stai utilizzando permalink non ottimizzati, dovresti passare la route dell'API REST come parametro della stringa di query. La route http://oursite.com/wp-json/ nell'esempio sopra diventerebbe quindi http://oursite.com/?rest_route=/ "https://developer.wordpress.org/rest-api/#routes-endpoints"

devasia2112 devasia2112
3 gen 2019 18:47:52
Mostra i restanti 5 commenti
5
14

Avevo la versione 4.7 e pensavo che l'API REST fosse disabilitata, ma sono stato ingannato dall'URL. Per vedere l'URL corretto cerca una riga che assomiglia a questa:

link rel='https://api.w.org/' href='http://miosito?rest_route=/' />. Quindi, utilizzando http://miosito?rest_route=/ come prefisso ho risolto il mio problema. Ad esempio, per recuperare i post è sufficiente digitare: http://miosito?rest_route=/wp/json

Non sono riuscito a trovare nella documentazione che fosse necessario il parametro di query. Sono stato l'unico?

27 giu 2017 06:52:28
Commenti

Ha funzionato per me con WordPress 4.8.x Non sono sicuro del perché questo non sia documentato da nessuna parte.

Anirudha Anirudha
31 ago 2017 14:35:14

Non sono l'unico. Ho trovato questa risposta nel tuo commento solo dopo 10 minuti di ricerca. Ho dovuto fare: www.example.com?rest_route=/wp/v2/posts

Eugene K Eugene K
7 feb 2018 05:50:22

Penso che questo accada quando i permalink personalizzati non sono abilitati. Dalla documentazione...

"Sui siti senza permalink personalizzati, la route viene invece aggiunta all'URL come parametro rest_route. Per l'esempio sopra, l'URL completo sarebbe quindi http://example.com/?rest_route=/wp/v2/posts/123"

Giles Butler Giles Butler
20 lug 2018 00:36:44

eccolo qui -> https://developer.wordpress.org/rest-api/#routes-endpoints

devasia2112 devasia2112
3 gen 2019 18:48:28

Molto utile se stai testando l'uso del server integrato di PHP php -S localhost:1234.

Juan Javier Triff Cabanas Juan Javier Triff Cabanas
2 set 2020 05:22:30
0

Se l'API REST non funziona subito dopo un'installazione fresca e digitando

miodominio/wp-json/wp/v2/posts

allora dovrai semplicemente attivare i tuoi "permalink" come post_name situati in:

Pannello di controllo WP->Impostazioni->Permalink

Oppure se non desideri attivare i permalink, puoi semplicemente digitare:

miodominio?rest_route=/wp/v2/posts

Cavolo, vorrei che WordPress aggiornasse il loro manuale REST per renderlo più user-friendly. Mi piaceva la vecchia versione della documentazione :)

29 mag 2019 20:20:47
0

Vedo che hai risolto il problema, ma lascio qui la mia soluzione dato che ha funzionato anche per me. Ho avuto lo stesso problema quando ho aggiornato dalla beta15 all'API core in WP 4.7. A quanto pare il problema era che avevo alcuni plugin che utilizzavano una funzione deprecata register_api_field che ho cambiato in register_rest_field secondo questa nota nel changelog:

CAMBIAMENTO IMPORTANTE: Rinomina register_api_field() in register_rest_field().

Introduce una funzione register_api_field() per compatibilità all'indietro, la quale chiama _doing_it_wrong(). Tuttavia, register_api_field() non verrà mai integrata nel core di WordPress, quindi dovresti aggiornare le tue chiamate di funzione.

17 dic 2016 04:30:18