2011-12-16 31 views
0

如果我有一个通过终点,如具有发现资源的RESTful服务:REST:什么是一个好的超媒体和资源缓存策略?

请求:

GET http://acme.org/someInfo 

响应:

HTTP/1.1 200 OK 
Content-Length: ... 
Content-Type: application/vnd.acme+xml 
Date: Fri, 16 Dec 2012 12:40:00 GMT 
Last-Modified: Tue, 1 Mar 2012 11:45:00 GMT 

<someInfo xmlns="http://schemas.acme.org/someInfo" xmlns:dap="http://schemas.acme.org/dap"> 
    <dap:link rel="http://relations.acme.org/someInfo" uri="htp://acme.org/someInfo/foo" /> 
    <dap:link rel="http://relations.acme.org/someInfo" uri="htp://acme.org/someInfo/bar" /> 
    <dap:link rel="http://relations.acme.org/someInfo" uri="htp://acme.org/someInfo/baz" /> 
</someInfo> 

然后用这个响应,客户端可能再请遵循以下超媒体链接之一:

要求:

GET http://acme.org/someInfo/foo 

响应:

HTTP/1.1 200 OK 
Content-Length: ... 
Content-Type: application/vnd.acme+xml 
Date: Fri, 16 Dec 2012 12:45:00 GMT 
Last-Modified: Wed, 28 Sep 2012 11:45:00 GMT 

<fooInfo xmlns="http://schemas.acme.org/fooInfo"> 
... 
</fooInfo> 

的第一个反应可以更少地(例如:许多个月)的变化,而第二个可能改变稍微更频繁地(例如:每隔一个月左右)。什么是这种情况下的一个好的HTTP缓存策略;按日期,客户ETag比较,别的?

编辑:如果数据陈旧在一天左右的大小,那很好。任何更多可能会有问题。

回答

0

这是一个性能与一致性问题,只能由业务回答。

对于每一个你需要问两个问题的资源:

  1. 如果资源变化和用户看不到的X 小时这种变化,什么是对业务的影响?如果用户没有看到温度变化,反应堆会爆炸吗?
  2. 查看 该资源的新版本需要多少钱?您是在1Gbps本地网络上, 还是通过西伯利亚的手机访问?

一旦您知道如何使数据保持最新以及获取该数据的成本多少,那么您可以决定最佳缓存策略。

+0

这是一个很好的观点。我编辑了我的原始问题以反映陈旧问题。 – Bullines 2011-12-16 21:34:57