web-dev-qa-db-ja.com

止める方法 WP キャッシングからのAPIエンドポイント?

私は簡単なエンドポイントを持っています。そのGETは、私はそれにIDパラメータを渡し、それはカール呼び出しを行うためにこのIDを使用しています。その後、エンドポイントはjson_encodedという2つの情報で応答します。

問題は、このエンドポイントが結果をキャッシュし続けることです。どうしたらこれを防ぐことができますか?

カップルノート:

  1. キャッシングプラグインはインストールされていません
  2. WPの設定はキャッシュを記録しません

エンドポイントコードは非常に単純です。

// Get Number of people in line
add_action( 'rest_api_init', function () {
    register_rest_route( 'cc/v1', '/in_line/(?P<id>\d+)', array(
           'methods' => WP_REST_Server::READABLE,
           'callback' => 'in_line',
           'args' => [
                'id'
            ],
    ) );
} );

function in_line($data) {

  //Do a bunch of Curl stuff

  $response['queue'] = $number;
  $response['queueID'] = $data['id'];

  return json_encode($response);
}

私はjQueryのAjaxを介してエンドポイントを呼び出します。

1
TJ Sherrill

リクエストヘッダにアクセスできる場合は、行を追加することができます。 Cache-Control: privateまたはCache-Control: no-cache。これは行儀の良いホストにあなたに新鮮な結果を送ることを強いるでしょう。

1
SungamR

Cache-Control値を設定するには、WP_REST_Responseから新しいインスタンスを作成する必要があります。

<?php
// Get Number of people in line
add_action( 'rest_api_init', function () {
    register_rest_route( 'cc/v1', '/in_line/(?P<id>\d+)', array(
           'methods' => WP_REST_Server::READABLE,
           'callback' => 'in_line',
           'args' => [
                'id'
            ],
    ) );
} );

function in_line($data) {

  //Do a bunch of Curl stuff

  $response['queue'] = $number;
  $response['queueID'] = $data['id'];

  $result = new WP_REST_Response($response, 200);

  // Set headers.
  $result->set_headers(array('Cache-Control' => 'no-cache'));

  return $result;
}
0
Mostafa Soufi