web-dev-qa-db-fra.com

Comment gérer une réponse malformée de WP REST API?

Scénario de bonne fête : j'implémente WP REST API qui envoie des JSON à un client JavaScript, qui les analyse et affiche les données au utilisateur. Tout est bon.

Ce qui se passe réellement, inévitablement : un code ou un plugin WordPress génère une notification ou un avertissement PHP, et le serveur est configuré pour que cette poubelle trouve son chemin vers le Réponse JSON. (WP REST API tente d'éviter cela mais, par exemple, si ini_set() n'est pas autorisé par la configuration du serveur, cela peut toujours arriver.)

Une façon d'aborder le problème est simplement de blâmer les utilisateurs - si leurs serveurs sont configurés de manière à envoyer PHP avis et avertissements en production, c'est certainement mauvais. Cependant, même l'infrastructure principale REST essaie de prendre en charge les utilisateurs qui ont des serveurs mal configurés et c'est également mon objectif.

Existe-t-il une technique établie pour traiter ce problème? Je peux voir deux façons:

  1. Détectez en JavaScript que la réponse est mal formée, affichez une erreur et refusez de travailler.
  2. Modifiez le code JSON réel en y ajoutant une clé unique sur le serveur et laissez le client JavaScript le gérer. Par exemple, au lieu de la valeur simple 123, il serait encapsulé dans un objet tel que { "__VALID__": true, "data": 123 } et le code JS utiliserait response.body.data au lieu de response.body.

Ou existe-t-il une autre approche?

1
Borek Bernard

Si vous créez des classes, la première chose dans la construction serait la suivante. Ou vous pouvez le déposer avec une action le plus tôt possible. Peut-être plugins_loaded.

/*
     * If WP DEBUG is not on do NOT return any php warning, notices, and/or fatal errors.
     * Well If it is a fatal error then this return is FUBAR anyway...
     * We do this because some badly configured servers will return notices and warnings switch get prepended or appended to the rest response.
     */
    if( defined('WP_DEBUG') ){
        if( false === WP_DEBUG ){
            error_reporting(0);
        }
    }
1
Ernest

Vous ne pouvez pas résoudre dans votre propre plugin les problèmes généraux causés par d'autres parties du logiciel car il y a trop de possibilités. Il incombe au propriétaire du site de lancer une opération en mode minimal s'il s'attend à pouvoir utiliser un plugin/thème supplémentaire.

La seule approche raisonnable que vous pouvez avoir est de consigner ce type de réponses dans la console du navigateur afin que vous puissiez plus facilement comprendre pourquoi certaines choses ne fonctionnent pas lorsqu'un utilisateur du plug-in se plaint.

0
Mark Kaplun