web-dev-qa-db-ja.com

からの不正な形式の応答を処理する方法 WP REST API?

幸せな日のシナリオ:JavaScriptクライアントにJSONを送信するWP REST AP​​Iを実装します。ユーザー。すべて良好。

実際に起こること、必然的に:WordPressのコードやプラグインがPHPの注意や警告を生成し、サーバーがこのゴミを発見するように設定されているJSONレスポンス(WP REST AP​​I はそれを避けようとします しかし、たとえばini_set()がサーバーの設定によって許可されていない場合でも、発生する可能性があります。)

アプローチの1つの方法は単にユーザーにそれを責めることです - 彼らのサーバーがPHPの通知と警告を本番環境で送信するように設定されている場合、それは確かに悪いです。ただし、コアのRESTインフラストラクチャでも、サーバーの設定が不適切なユーザーをサポートしようとしているため、この場合も私の目標です。

これに対処するために確立されたテクニックはありますか?私は2つの方法を見ることができます:

  1. JavaScriptで応答が不正な形式であることを検出し、何らかのエラーを表示して作業を拒否します。
  2. サーバー上で固有のキーを追加して実際のJSONを変更し、それをJavaScriptクライアントに機能させます。例えば、プレーンな値123の代わりに、それは{ "__VALID__": true, "data": 123 }のようなオブジェクトにラップされ、JSコードはresponse.body.dataの代わりにresponse.bodyを使用します。

または他の方法はありますか?

1
Borek Bernard

クラスを作成している場合、構文の最初の部分はこれになります。または、できるだけ早く行動を起こすことができます。たぶん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

可能性が多すぎるので、ソフトウェアの他の部分によって引き起こされたあなた自身のプラグインの一般的な問題を解決することはできません。追加のプラグイン/テーマを使用できるようになると予想される場合は、サイトの所有者の責任でクリーン操作を実行してください。

あなたが持つことができる唯一の合理的なアプローチはブラウザコンソールにこの種の応答をログに記録することであるのでプラグインユーザーが文句を言ったときに物事がうまくいかない理由をあなたが追跡することはより簡単になるでしょう。

0
Mark Kaplun