WordPressであなたの残りAPIルートを確保する方法


最後にarticle 私たちはWordPressの残りのAPIを使用して独自のルートを作成するを見たregister_rest_route , パラメータの必要とチェックのいくつかの基本的な例とともに.今日、私たちはあなたのルートに渡されたデータの検証と消毒を処理するより良い方法を行きます.

我々が以前に去ったところ
これが最後のコードです.
add_action('rest_api_init', 'register_your_routes');

function register_your_routes() {
    register_rest_route(
        'ndx/v1',
        'my-endpoint',
        array(
            array(
                'methods' => WP_REST_Server::READABLE,
                'callback' => 'callback_function',
                'permission_callback' => '__return_true'
            ),
            array(
                'methods' => WP_REST_Server::EDITABLE,
                'callback' => 'another_callback_function',
                'permission_callback' => '__return_true'
            )
        )
    );

    // our new route
    register_rest_route(
        'ndx/v1',
        'my-endpoint/(?P<id>\d+)',
        array(
            array(
                'methods' => WP_REST_Server::READABLE,
                'callback' => 'callback_function_with_id',
                'permission_callback' => '__return_true'
            )
        )
    );
}
私たちは道を作ったmy-endpoint パラメータを必要としないGETメソッドとPOSTメソッドを使用して、最後に整数を必要とするような名前のルートと一緒に実行します.my-endpoint/10 ).

引数の定義
以前は、最後に整数を必要とする新しいルートを作成しました.
// requires an id parameter, which must be a number
register_rest_route(
    'ndx/v1',
    'my-endpoint/(?P<id>\d+)',
    array(
        array(
            'methods' => WP_REST_Server::READABLE,
            'callback' => 'callback_function_with_id',
            'permission_callback' => '__return_true'
        )
    )
);
再び、ここでどのように動作を定義する正規表現ですか
'(?P<id>\\d+)' // the full argument (parathenses are to group it)
'?P' // denotes that this is a parameter
'<id>' // the name of the parameter
'\\d+' // indicates the paramter should be an integer
正規表現は読みにくいですが、これはこの記事でカバーするカップルのことを気にします.
  • IDが不足している場合(ルートでは、元のRESTルートが実行されます.
  • IDが整数でない場合、エラーが返されます(ただし、ルートが存在しないということです).
  • このスタイルが実行されないこともあります.
  • タイプが間違っている場合、ルートは適切なエラーを送信しません(ユーザが知らないようにするには、存在しないルートについてのあいまいなエラー対整数を送信する必要があるかどうか)
  • データは任意のカスタム方法で消毒されることはありません
  • デフォルト値を渡すことはできません

  • 引数の追加チェックを追加する
    上記の機能を追加するには、argsという引数をメソッドに追加する必要があります.
    register_rest_route(
        'ndx/v1',
        'my-endpoint/(?P<id>\\d+)',
        array(
            array(
                'methods' => WP_REST_Server::READABLE,
                'callback' => 'callback_function_with_id',
                'permission_callback' => '__return_true',
                'args' => array(
                    'id' => array(
                            // parameters go here
                    )
                )
            )
        )
    );
    
    args引数はキー配列で、各キーはパラメータに対応します.キー値は4つのオプションの配列です:
  • パラメータが不足している場合のデフォルト値
  • 必須:必要なパラメータを設定する
  • ValidateHeight callback :パラメータについての検証を行う関数です.trueまたはfalseを返し、falseの場合、フォーマットされたエラーを返します.
  • SanitizeEdit callback :コールバックに送信する前にデータを消去する機能
  • これらのオプションについて興味深いのは、私たちのルート名の中で我々のパラメータをどのように定義したかということです.
  • パラメータが必要です
  • パラメータは整数でなければなりません
  • テストについては、できるだけ多くのデータ型としてパスを変更しましょう.
    register_rest_route(
        'ndx/v1',
        'my-endpoint/(?P<id>[a-zA-Z0-9_-]+)',
        array(
            array(
                'methods' => WP_REST_Server::READABLE,
                'callback' => 'callback_function_with_id',
                'permission_callback' => '__return_true',
                'args' => array(
                    'id' => array(
                    )
                )
            )
        )
    );
    
    我々は今、新しい正規表現を持って(?P<id>[a-zA-Z0-9_-]+) 文字列や数字で渡すことができます.次に、利用可能な引数をargs配列に追加しましょう.
    register_rest_route(
        'ndx/v1',
        'my-endpoint/(?P<id>[a-zA-Z0-9_-]+)',
        array(
            array(
                'methods' => WP_REST_Server::READABLE,
                'callback' => 'callback_function_with_id',
                'permission_callback' => '__return_true',
                'args' => array(
                    'id' => array(
                        // NEW CODE HERE
                        'default' => 0,
                        'required' => true,
                        'validate_callback' => function($value, $request, $key) {
                            return true;
                        },
                        'sanitize_callback' => function($value, $request, $param) {
                            return $value;
                        }
                    )
                )
            )
        )
    );
    
    上記のサンプルは、基本的に役に立たないように符号化されています.妥当性検査は常にtrueを返します、そして、sanitizationはちょうど触れられていない値を返します.それぞれの引数を壊しましょう.

    デフォルト値
    The default 引数が渡されなければデフォルト値を提供します.パラメータをルート名の一部としてエンコードしているので、このコードは決して呼び出されません.URLに値を指定しないと、ルートが存在しないエラーを返すか、最後に付けられたパラメータがない同じ名前で別のエンドポイントを呼び出しますmy-endpoint and my-endpoing/<id> .

    価値を必要とする
    The required 引数を指定して引数を定義します.もう一度、ルート名の一部としてパラメータをエンコードしているので、このコードは決して呼ばれません.

    検証
    パラメータの妥当性検査は、パラメータをすばやくチェックし、有効(true)か有効(false)であると言う素晴らしい方法です.あなたはtrueまたはfalseを返しますvalidate_callback . 以下の例を示します.
    'validate_callback' => function($value, $request, $param) {
        return $value < 10;
    }
    

    清浄化
    パラメータのサマリ化はバリデーションとは異なります.注意sanitize_callback and validate_callback 任意の特定の順序で呼び出されないでください、そして、フィットしているどんなデータも元のコールバック関数の論理を確実にするために、単に追加のフィルタです.この例では、負の数を取り除きましょう.
    'sanitize_callback' => function($value, $request, $param) {
        $integer_value = (int) $value;
    
        return $integer_value < 0 ? 0 : $integer_value;     
    }
    
    さて、我々validate_callback and sanitize_callback 我々が数0 - 10だけを保証した機能は、通過されるのを許されます.

    迅速な検証と消毒の追加引数
    関数コールバックを使わずに、パラメータをすばやく検証するためのARGSがたくさんあります.
    array(
        'type' => // array | object | integer | number | string | boolean | null
        'description' => // a description used in the API schema
        'format' => // hex-color | email | date-time | ip | uuid
        'enum' => // array of allowed values
        'minimum' => // minimum integer value (inclusive)
        'maximum' => // maximum integer value (inclusive)
        'exclusiveMinimum' => // minimum integer value (exclusive)
        'exclusiveMaximum' => // maximum integer value (exclusive)
    );
    
    注意: formatオプションには、文字列として定義する型が必要です

    包む
    どんな機能、メソッドまたはAPIへのユーザー入力を確実にするかは、行動を起こす前に常に確かめられなければなりません.あなたがルートのための完全なコールバック関数で上記のすべてをすることができる間、それはこれを切り離すのが好きです、そして、何かが間違っているならば、コールバックが発砲されるのを防ぎます.
    私はまた、あなたのエンドポイント名の一部として定義されるかもしれないものだけでなく、あなたのコールバックで使用されるどんなパラメタも多くの規則として作成することができることを強調したいです.
    著者
    ・・・アクションボタン
    背景色:こっち重要
    カラー:竜華ffffff!重要
    ボーダーカラー:こっち重要


    David Woolf フォロー
    Designer and developer. Follow me on twitter: https://twitter.com/wwuulf