REST:什么是良好的超媒体和资源缓存策略?

时间:2011-12-16 18:50:13

标签: http caching rest hateoas

如果我的RESTful服务通过端点具有可发现的资源,例如:

请求:

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比较,还有什么?

编辑:如果数据在一天左右的时间内过时,那很好。任何更多可能会有问题。

1 个答案:

答案 0 :(得分:0)

这是一个性能与一致性问题,实际上只能由业务部门解决。

对于每个资源,您需要提出两个问题:

  1. 如果资源发生更改且用户未看到X的更改 小时,对业务有何影响?如果用户没有看到温度变化,反应堆是否会爆炸?
  2. 看多少钱 该资源的新版本?您是否在1Gbps本地网络上, 或者从西伯利亚的手机访问它?
  3. 一旦您了解了获取最新数据以及获取数据的成本有多大价值,您就可以决定最佳缓存策略。