Vimeo API не отвечает на заголовок «If-Modified-Since» - PullRequest
3 голосов
/ 02 мая 2019

Согласно документации Vimeo API :

Заголовок If-Modified-Since позволяет возвращать только те ресурсы API, которые были изменены с определенной даты и времени.

Заголовок выглядит так: If-Modified-Since: {ddd}, {D} {MMM} {YYYY} {HH}:{mm}:{ss} {Z} ПРИМЕЧАНИЕ. Если ваши коды форматирования ржавые, например, 20 июня 2023 14:42:36 GMT.

Если ни один из ресурсов не был изменен с этой даты, API возвращает пустое тело ответа и статус HTTP 304 Не изменено.


Я использую Официальную библиотеку PHP для API Vimeo .
Согласно выпуску GitHub # 130 , метод request() библиотеки PHP принимает массив заголовков. И этот коммит показывает, как массив $headers передается и анализируется:

public function request($url, $params = array(), $method = 'GET',
                        $json_body = true, array $headers = array())
// Set the headers
foreach ($headers as $key => $value) {
  $curl_opts[CURLOPT_HTTPHEADER][] = sprintf('%s: %s', $key, $value);
}


Но когда я передаю будущую дату, показанную в примере, я все равно получаю полный список видео, а не «пустое тело ответа и HTTP-статус 304 Не изменен», указанный в документации.

Что я делаю не так?

$fields = array(
  'created_time',
  'modified_time'
);

$params = array(
  'page' => $page,
  'filter' => 'embeddable',
  'filter_embeddable' => true,
  'fields' => implode(',',$fields)
);

$headers = array(
  'If-Modified-Since' => 'Tue, 20 Jun 2023 14:42:36 GMT'
);

$json_body = true;
$method = 'GET';

$response = $vimeo->request('/me/videos', $params, $method, $json_body, $headers);

Результат:

Array
(
    [0] => Array
        (
            [created_time] => 2018-06-05T19:27:18+00:00
            [modified_time] => 2018-06-29T19:12:21+00:00
        )

    [1] => Array
        (
            [created_time] => 2016-06-02T03:01:40+00:00
            [modified_time] => 2019-04-30T06:15:29+00:00
        )

    [2] => Array
        (
            [created_time] => 2016-05-29T05:31:46+00:00
            [modified_time] => 2019-04-25T07:46:53+00:00
        )

    ....

Редактировать

Исходя из этого ответа (не о Vimeo), кажется, что API мог бы вернуть весь набор видео, если хотя бы один из них был изменен после даты "If-Modified-Since".

Если что-то изменилось во всем ответе, то он отправит вам весь ответ.

Но я все равно ожидал бы, что результат будет пустым, если дата будет в будущем. Я неправильно понимаю?


Редактировать

Том предположил, что Vimeo API игнорирует заголовки «If-Modified-Since», которые будут установлены в будущем. Я пытался установить мой в недавнем прошлом, но я все еще получаю результаты, которые были изменены до этой даты:

<code>$vimeo = new \Vimeo\Vimeo(false,false,$access_token);

$fields = array(
    'modified_time'
);

$params = array(
    'page' => 1,
    'fields' => implode(',',$fields)
);

$method = 'GET';
$json_body = true;

$headers = array(
    'If-Modified-Since' => 'Fri, 24 May 2019 14:42:36 GMT'
);

$response = $vimeo->request('/me/videos', $params, $method, $json_body, $headers);

echo"<pre>".print_r($response,true)."
";

Результат включает в себя:

[21] => Array
  (
    [modified_time] => 2019-05-16T17:22:58+00:00
  )

[22] => Array
  (
    [modified_time] => 2019-05-12T08:07:30+00:00
  )

Редактировать

Я был не прав. Как упоминалось выше, я считаю, что весь ответ возвращается, если любой элемент в ответе был изменен после отметки времени «If-Modified-Since». Это выглядело так, будто заголовок не работал. Но я установил временную метку как можно ближе к текущему времени и получил ответ «304 Не изменен», как сообщил Том в своем ответе ниже. Другие (производители контента) также имеют доступ к учетной записи Vimeo, с которой я тестирую, и я не знал, как недавно они изменили контент.

1 Ответ

1 голос
/ 22 мая 2019

Это не задокументировано Vimeo, но я экспериментально обнаружил, что:

Когда If-Modified-Since лежит в будущем, оно игнорируется.

В противном случае,заголовок работает как положено.Но позаботьтесь о своих часовых поясах и возможном перекосе часов на несколько секунд.

Время модификации Vimeo указано в ответе API, в моем случае:

"modified_time": "2019-05-22T09:52:45+00:00",

If-Modified-Since: Wed, 22 May 2019 09:56:25 GMT возвращает 304 Not Modified для моей ситуации.


Я отправил запрос в службу поддержки Vimeo, чтобы уточнить или изменить это поведение.

...