caching - REST 资源设计 : Embedding related data VS linking to it?

标签 caching rest resources

我有一个包含文章和作者资源的 REST 系统。通常,在访问文章时,我还想知道作者的姓名。我可以通过以下几种方式制作文章来实现这一点:A) 将作者姓名的副本直接嵌入到文章中;或 B) 在文章中包含指向适当作者资源的 URI。

将作者姓名直接复制到文章资源中显然有一个缺点。通过将信息复制到多个资源中,我对资源之间的冲突持开放态度。在作者更新其姓名后,文章资源可以使用其旧名称,而作者资源将使用新名称。

也许如果我不缓存文章,这将不是问题?但作为一个实际问题,速度和减少返回服务器的次数是非常可取的,所以在浏览器中缓存是我追求的目标。

在场景 B 中,使用 URI 进行链接似乎是正确的,并且对缓存更加友好。但这会使对服务器的调用次数增加一倍:每篇文章都需要对作者进行第二次(串行)提取。因此,从另一方面来说,这是昂贵的,尤其是当我们谈论多个其他资源的多个 URI 时。一次显示 50 篇文章时,这会变得很疯狂。

我想听听其他人是如何解决这个问题的。有没有值得一读的“最佳实践”文章?

最佳答案

linking ... doubles the number of calls back to the server: every Article requires a second (serial) fetch of an Author.



REST 包含缓存约束正是出于这个原因,如果数据已经位于本地缓存中,则根本不必进行“第二次获取”(或者可以是仅使用部分网络资源的请求,如果缓存是中介或服务器端)。如果您的数据可以设计为利用这一点,您就可以将网络总流量减少几个数量级。如果不能,那么应用 REST 架构风格就没有意义了,这取决于网络效率的缓存——选择不同的风格,比如 RPC。

关于caching - REST 资源设计 : Embedding related data VS linking to it?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5047321/

相关文章:

java - Picasso - 自定义 RequestHandler 不会在磁盘上缓存图像

ruby-on-rails - Rails 3:缓存到全局变量

ios - AFNetworking 500响应主体

java - 如何解决maven中的java.lang.reflect.InitationTargetException

HTML5 History API 实际 URL 不存在

image - 从嵌入资源加载图像

python - 删除 Flask-Cache 或 Flask-Caching 中的特定缓存

c# - 缓存 Lucene.net 搜索结果

http - 如何阻止 chrome 缓存来自 WebApi 的 REST 响应?

amazon-web-services - 模板错误:Fn::GetAtt 的实例引用未定义的资源 EventHandlerLambdaFunction