1

与此相关的最佳做法是什么?您能否说这取决于应用程序,或者是否有任何建议表明一种选择比另一种更好?

这两个选项如下:

1 - 返回嵌套对象

{
  "id": 1,
  "title": "Game A",
  "developer": "Developer DEF",
  "releaseDate": "2015-01-01",
  "platforms": [
    {"id":1,"name":"Xbox"},
    {"id":2,"name":"Playstation"}
  ]
}

2 - 返回指向该对象的链接

{
  "id": 1,
  "title": "Game A",
  "developer": "Developer DEF",
  "releaseDate": "2015-01-01",
  "platforms": [
    {"_self": "http://api.example.com/games/1/platforms/53"},
    {"_self": "http://api.example.com/games/1/platforms/34"},
  ]
}
4

1 回答 1

2

“这取决于”。

缓存是 REST 架构风格中的关键架构约束之一。当我们缓存资源的表示时,我们将整个表示缓存为单个原子;当我们无效时,我们使整个表示无效。

例如,考虑一次拍卖——拍品的表现形式(描述、多媒体文件、出处数据)都变化缓慢;但是当前高出价的表示经常变化。每次有新出价时都获取该大视频会给网络带来很多不必要的压力,因此您可能希望视频的缓存策略与用于高出价的缓存策略不同——因此,需要多个资源。

当您要在许多不同的上下文中重复使用相同的表示时,也会有类似的考虑——想象一个网站,其中每个页面都使用相同的徽标和一致的演示风格。您可能希望缓存徽标和样式表,而不是将它们嵌入到依赖于它们的每个表示中。

我认为,在远程创作用例中,您更有可能嵌入。当一个实体的修改将级联到另一个实体时,问题就出现了——HTTP 支持不安全请求的缓存失效,但它没有通用机制来宣布其他也应该失效的资源。

于 2020-02-08T20:39:31.207 回答