Я создаю REST API в php с нуля, получил его работу, и теперь я хочу обрабатывать кеш, связанные с заголовками, поэтому клиентам не нужно снова и снова запрашивать ресурсы, которые они уже иметь.Частичное обновление ранее кэшированных ответов
Каждый объект службы останова связан с таблицей базы данных, и подход, который я использую, является созданным/обновленным полем для каждой таблицы, поэтому я могу обслуживать заголовок «Last-modified» для каждого запроса ресурса.
только, чтобы понять, как я могу обрабатывать запросы, это фрагмент кода, который генерирует ответ, и где я планирую добавить «Последние изменения» заголовок
switch(strtolower($requestMethod)){
...
case "get":{
if ($resourceId){
$this->resource = $resourceType::byId($resourceId);
if (!$this->resource){
$this->responseCode = 404;
}
else{
$this->responseBody = json_encode($this->resource);
$this->responseCode = 200;
$this->responseHeaders["Content-Type"] = "application/json; charset=UTF-8";
}
}
else{
$this->responseBody = json_encode($resourceType::find($this->requestData));
$this->responseCode = 200;
$this->responseHeaders["Content-Type"] = "application/json; charset=UTF-8";
}
}
break;
...
}
Чтобы сделать его более ясным , со следующим запросом/api/products/1 $ resourceType будет по продуктам, а $ resourceId будет равняться 1.
Теперь, для кэширования, если присутствует $ resourceId, я просто добавлю заголовок «Last-modified» с его последняя обновленная временная метка.
В случае отсутствия $ resourceId я бы запросил самую высокую обновленную временную метку в коллекции и поместил ее в качестве последнего измененного заголовка.
Последнее, что у меня есть проблема. Предположим, что у меня есть 20000 продуктов в моей базе данных и обновляется цена одного; это означало бы, что запрос на api/products после обновления должен будет снова извлечь 20000 элементов, хотя только один байт данных был изменен, и я хочу знать, есть ли способ сообщить браузеру, что он должен получить только одна запись и обновить ее кеш.
Это моя первая служба REST, выполненная с нуля, поэтому любые советы по кусочку кода, который я разместил, приветствуются.
спасибо.
Извините, но я не вижу, как это поможет в вопросе, который я задал. Кэширование уже сделано и работает хорошо, также я могу легко идентифицировать те записи, которые были обновлены, что я еще не могу сделать, это частичное обновление в кеше клиента, и даже не знаю, возможно ли это. – sergio0983