L'API REST a rencontré une erreur
Quelque chose a répondu à la demande qui n'était pas WordPress, ou a répondu avec HTML. L'éditeur arrête de travailler en premier, parce que cela dépend de l'API pour tout.
The REST API encountered an error: The REST API request failed due to an error.
Demander une route REST directement et regarder ce qui revient. JSON signifie que l'API est vivante et le problème est l'authentification; une page d'erreur HTML signifie quelque chose devant WordPress intercepté la route avant PHP répondu.
Les causes les plus probables d’abord.
Parcourez la liste dans l’ordre. Vérifiez chaque cause avant de modifier quoi que ce soit : les correctifs diffèrent et une supposition coûte plus cher qu’une commande.
| Cause | Comment vérifier | Correctif |
|---|---|---|
| Un plugin de sécurité ou WAF bloque la route | La requête retourne HTML ou un 403 de quelque chose qui n'est pas WordPress, et le bloc est enregistré par le plugin ou le pare-feu plutôt que par WordPress. | Autorise /wp-json/ pour les utilisateurs authentifiés. Les règles écrites pour arrêter le dénombrement de l'utilisateur bloquent fréquemment l'espace de noms entiers plutôt que le seul paramètre auquel ils étaient destinés. |
| Les permaliens sont brisés, donc la route ne se résout jamais | La jolie route 404s alors que le formulaire de requête répond correctement. Cette différence isole les règles de réécriture. | Flush les règles de réécriture. La route REST est une réécriture comme n'importe quel autre, donc elle disparaît quand ils sont en panne. |
| L'en-tête Autorisation est déconnecté | Les itinéraires non authentifiés fonctionnent et les itinéraires authentifiés indiquent que vous n'êtes pas connecté, même si vous êtes. | Passez l'en-tête Autorisation à PHP sur le serveur Web. Les configurations de style CGI la déposent par défaut, et les mots de passe des applications cessent de fonctionner entièrement quand ils le font. |
| Un plugin émet une sortie avant le JSON | La réponse est valable JSON avec quelque chose en face de lui — un avis, une ligne blanche perdue — ce qui la rend inexpréhensible. | Trouvez le plugin en impression précoce. La même sortie errante brise aussi les flux et produit un avertissement en-têtes-déjà-envoyé ailleurs. |
Corriger l’erreur, étape par étape.
Les commandes supposent un accès à WP-CLI et au terminal. Si vous n’en disposez pas, chaque étape explique comment procéder depuis le tableau de bord ou via SFTP.
Demandez à l'API pour l'index
Cette route ne nécessite aucune authentification, donc rien d'autre que JSON est la réponse.
curl -sS -i https://example.com/wp-json/ | head -n 20
Comparer joli et routage simple
Si la seconde fonctionne et la première ne fonctionne pas, les règles de réécriture sont le problème et rien d'autre n'a besoin de test.
curl -sS -o /dev/null -w '%{http_code}\n' 'https://example.com/wp-json/wp/v2/types' curl -sS -o /dev/null -w '%{http_code}\n' 'https://example.com/?rest_route=/wp/v2/types'Reconstruire les règles de réécriture
Bon marché, sûr, et fixe une part surprenante de ceux-ci.
wp rewrite flush --hard
Confirmer la survie de l'en-tête d'autorisation
Ajoutez ceci au serveur web ou .htaccess lorsque les routes authentifiées sont les seules qui échouent.
# .htaccess SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1 # nginx + fastcgi fastcgi_param HTTP_AUTHORIZATION $http_authorization;
Plugins de bisect s'il échoue encore
Testez la route entre chaque désactivation plutôt qu'à la fin, de sorte que le plugin qui corrige il est sans ambiguïté.
wp plugin deactivate --all curl -sS -o /dev/null -w '%{http_code}\n' https://example.com/wp-json/
Ce que la plateforme prend en charge.
Rien ne se situe entre la requête et WordPress qui réécrit ou inspecte /wp-json/, donc la route atteint PHP intact et l'en-tête arrive avec elle — les deux causes qui comptent pour la plupart de ces. Les règles de Permalink font partie de la configuration propre du site plutôt qu'un fichier partagé d'autres sites également éditer, de sorte qu'ils ne vont pas s'évanouir quand quelque chose n'est pas lié est déployé.
Questions fréquentes.
Puis-je désactiver l'API REST ?
Le rédacteur en chef dit: "Mettre à jour les échecs" — est - ce le même problème?
Pourquoi ça marche quand je suis déconnecté mais pas connecté ?
Un 404 sur /wp-json/ est-il différent d'un 403 ?
Si le problème vient d’ailleurs.
Ces erreurs peuvent se présenter de façon similaire dans le navigateur.