Php 以前缓存的响应的部分更新
我正在从头开始用php构建一个RESTAPI,并使其正常工作,现在,我想处理与头相关的缓存,这样客户就不必一次又一次地请求他们已经拥有的资源 rest服务中的每个实体都链接到一个数据库表,我使用的方法是在每个表上创建/更新一个字段,因此我可以在每个资源请求上提供一个“上次修改”的头 只是为了明确我如何处理请求,这是生成响应的代码段,我计划在其中添加“Last modified”头 更清楚地说,对于以下请求/api/products/1,$resourceType将按产品显示,而$resourceId将为1 现在,对于缓存,如果存在$resourceId,我将简单地添加一个带有最后更新时间戳的“Last modified”头 如果没有$resourceId,我将查询集合中最高更新的时间戳,并将其作为最后修改的头 最后一点就是我的问题所在。假设我的数据库中有20000个产品,并且更新了单个产品的价格;这意味着更新后对api/products的请求将不得不再次获取20000项,尽管只修改了1字节的数据,我想知道是否有办法告诉浏览器只获取一条记录并更新其缓存 这是我从零开始的第一个REST服务,因此,欢迎对我发布的代码提供任何建议Php 以前缓存的响应的部分更新,php,rest,caching,cache-control,Php,Rest,Caching,Cache Control,我正在从头开始用php构建一个RESTAPI,并使其正常工作,现在,我想处理与头相关的缓存,这样客户就不必一次又一次地请求他们已经拥有的资源 rest服务中的每个实体都链接到一个数据库表,我使用的方法是在每个表上创建/更新一个字段,因此我可以在每个资源请求上提供一个“上次修改”的头 只是为了明确我如何处理请求,这是生成响应的代码段,我计划在其中添加“Last modified”头 更清楚地说,对于以下请求/api/products/1,$resourceType将按产品显示,而$resource
谢谢。您可以实现服务器端缓存。它更容易管理。您可以创建一个php数据库表,并将api响应存储在该表中。您还可以使用memcache服务器来缓存api的响应 我想知道是否有办法告诉浏览器应该只获取一条记录并更新其缓存 不,当您为一个资源提供所有记录时不会 浏览器缓存很乐意为单独的产品管理单独的到期时间,但是没有通用的机制将差异发送回浏览器 已经提出了解决方案(例如),因为在轮询Atom提要时基本上会出现相同的问题,但它们需要了解这些技术的客户机
要么减少你的主要资源的规模,要么接受它将在每次变更中提供。对不起,我不认为这对我提出的问题有什么帮助。缓存功能已经完成,并且运行良好,而且我可以轻松识别那些已更新的记录,但我无法在客户端缓存中进行部分更新,甚至不知道是否可能。感谢您的回答,我必须考虑另一种方法,因为一个页面可以包含1000万条信息,而且不能接受每次请求都有新的负载;也许通过页面获取可以使这一点变得轻松一点?是的;按页拆分,这样只有一些资源无效,这是允许更多缓存重用的好方法。
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;
...
}