NouveauBlack Friday : 50 % de réduction sur votre premier paiement
Dépannage WordPress

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.

Réponse rapide

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.

Diagnostic

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.

CauseComment vérifierCorrectif
Un plugin de sécurité ou WAF bloque la routeLa 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 jamaisLa 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 JSONLa 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.
Guide

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.

  1. 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
  2. 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'
  3. Reconstruire les règles de réécriture

    Bon marché, sûr, et fixe une part surprenante de ceux-ci.

    wp rewrite flush --hard
  4. 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;
  5. 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/
Sur MagicWP

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

Questions fréquentes.

Puis-je désactiver l'API REST ?
Pas vraiment. L'éditeur de blocs, Site Health, mots de passe d'application et beaucoup de wp-admin sont construits sur elle, donc le désactiver brise l'administrateur plutôt que de le sécuriser. Restreindre des itinéraires spécifiques aux utilisateurs authentifiés est la version raisonnable de cette idée.
Le rédacteur en chef dit: "Mettre à jour les échecs" — est - ce le même problème?
Habituellement oui. L'éditeur enregistre à travers l'API REST, donc une surface de réponse bloquée ou mal formée là d'abord, et les vérifications de cette page sont les bonnes à exécuter.
Pourquoi ça marche quand je suis déconnecté mais pas connecté ?
Cela pointe à l'en-tête Autorisation ou au nonce de cookie plutôt qu'à l'itinéraire. Routes non authentifiées jamais nécessaires non plus, c'est pourquoi ils continuent de fonctionner.
Un 404 sur /wp-json/ est-il différent d'un 403 ?
Oui, et utilement. Un 404 signifie que l'itinéraire n'a pas été trouvé, ce qui est des règles de réécriture. Un 403 signifie quelque chose trouvé et refusé, ce qui est une règle de sécurité.
Erreurs associées

Si le problème vient d’ailleurs.

Ces erreurs peuvent se présenter de façon similaire dans le navigateur.