Согласно документации 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, с которой я тестирую, и я не знал, как недавно они изменили контент.