Puis-je utiliser l'API REST sur un format de permalien ordinaire?

9

Récemment, toutes mes demandes REST-API se sont soudainement retournées pour renvoyer une erreur 404, chaque demande (quel que soit le point de terminaison personnalisé ou intégré).

Ensuite, j'ai pensé que c'était à cause de la structure du permalien. /wp-json/n'est pas accessible sous un simple permalien, car il n'y a tout simplement pas de règle de redirection disponible pour le moment.

Est-il possible d'utiliser les points de terminaison REST dans cette situation? À la fois personnalisé et intégré.

Jack Johansson
la source

Réponses:

16

Oui, vous pouvez. Ajoutez simplement le rest_routeparamètre de requête.

Donc

https://wordpress.org/wp-json/

deviendrait

https://wordpress.org/?rest_route=/

Ou https://wordpress.org/wp-json/wp/v2/deviendrait https://wordpress.org/?rest_route=/wp/v2pour vous donner un exemple plus complet.

Vous vous demandez donc comment décider lequel utiliser? Ne vous inquiétez plus, il y a une fonction pour cela:get_rest_url()

Une autre option est le fait que par défaut, il y a un <link>en-tête qui vous donne la racine de l'API.

<link rel='https://api.w.org/' href='https://wordpress.org/wp-json/' />

Donc, si vous avez besoin de comprendre cela du côté client, JS utilise simplement quelque chose comme

document.querySelectorAll('link[rel="https://api.w.org/"]')[0].getAttribute('href');

Donc, fondamentalement, vous ne devriez pas prendre la wp-jsonpartie comme donnée (et la coder en dur) mais toujours la construire dynamiquement en utilisant get_rest_url()ou l'approche JS mentionnée ci-dessus.

kraftner
la source
Donc, si je veux l'utiliser en clair, ce serait quelque chose comme ça https://wordpress.org/?rest_route=SOMEPATH&value1=X&value2=Y? Cela signifie que je dois avoir un conditionnel pour détecter la structure de permalien et modifier la route REST en fonction de cela?
Jack Johansson
Eh bien, ce n'est peut-être pas un conditionnel, mais vous devez le créer dynamiquement. Voir les modifications ci-dessus.
kraftner
comment utiliseriez-vous cette route avec jsonp? J'ai essayé /?rest_route=/?_jsonp=callBackfnmais j'ai obtenu le statut 404.
redshift
@redshift Habituellement, veuillez ouvrir une question distincte pour des choses comme celles-ci. Dans votre cas, vous devriez lire les délimiteurs de chaîne de requête en.wikipedia.org/wiki/Query_string#Structure Vous auriez besoin de l'écrire comme ceci/?rest_route=/&_jsonp=callBackfn
kraftner
1

Vous pouvez ajouter une réécriture sur votre serveur Web.

Par exemple pour nginx

location ~ ^/wp-json/ {
    rewrite ^/wp-json/(.*?)$ /?rest_route=/$1 last;
}
northtree
la source
0

Le rest_routeparamètre de requête est le Uglystyle (le choix de mots de Wordpress n'est pas le mien) de Permalink. Vous pouvez changer le style de permilink Post namecomme illustré dans la capture d'écran ci-dessous et l' wp-jsonitinéraire devrait être accessible dans l'URL. Il est possible que d'autres de ces styles permilink fonctionnent, mais cela a Post namefonctionné pour moi et je n'ai pas exploré au-delà

Image illustrant les clics sur les boutons requis pour modifier les paramètres

Max Carroll
la source