REST API return 应该嵌套对象还是指向该对象的链接?
Should REST API return nested objects or links to that objects?
与此相关的最佳做法是什么?您能说这取决于应用程序还是有任何建议表明一个选项比另一个更好?
两个选项如下:
1 - Return 嵌套对象
{
"id": 1,
"title": "Game A",
"developer": "Developer DEF",
"releaseDate": "2015-01-01",
"platforms": [
{"id":1,"name":"Xbox"},
{"id":2,"name":"Playstation"}
]
}
2 - Return 链接到该对象
{
"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"},
]
}
“视情况而定”。
Caching 是 REST 架构风格中的关键架构约束之一。当我们缓存资源的表示时,我们将整个表示缓存为单个原子;当我们无效时,我们使整个表示无效。
以拍卖为例——拍品的表现形式(描述、多媒体文件、出处数据)变化缓慢;但当前高出价的表示经常变化。每次有新出价时获取大视频会给网络带来很多不必要的压力,因此您可能希望视频缓存策略与高出价不同——因此需要多种资源。
当您要在许多不同的上下文中重复使用相同的表示时,会有类似的考虑——想象一个网站,其中每个页面都使用相同的徽标和一致的呈现样式。您可能希望缓存徽标和样式表,而不是将它们嵌入到依赖于它们的每个表示中。
在远程创作用例中,我认为您更有可能嵌入。当一个实体的修改将级联到另一个实体时,问题就会出现——HTTP 支持 cache invalidation 不安全请求,但它没有通用机制来宣布 other 也应该失效的资源。
与此相关的最佳做法是什么?您能说这取决于应用程序还是有任何建议表明一个选项比另一个更好?
两个选项如下:
1 - Return 嵌套对象
{
"id": 1,
"title": "Game A",
"developer": "Developer DEF",
"releaseDate": "2015-01-01",
"platforms": [
{"id":1,"name":"Xbox"},
{"id":2,"name":"Playstation"}
]
}
2 - Return 链接到该对象
{
"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"},
]
}
“视情况而定”。
Caching 是 REST 架构风格中的关键架构约束之一。当我们缓存资源的表示时,我们将整个表示缓存为单个原子;当我们无效时,我们使整个表示无效。
以拍卖为例——拍品的表现形式(描述、多媒体文件、出处数据)变化缓慢;但当前高出价的表示经常变化。每次有新出价时获取大视频会给网络带来很多不必要的压力,因此您可能希望视频缓存策略与高出价不同——因此需要多种资源。
当您要在许多不同的上下文中重复使用相同的表示时,会有类似的考虑——想象一个网站,其中每个页面都使用相同的徽标和一致的呈现样式。您可能希望缓存徽标和样式表,而不是将它们嵌入到依赖于它们的每个表示中。
在远程创作用例中,我认为您更有可能嵌入。当一个实体的修改将级联到另一个实体时,问题就会出现——HTTP 支持 cache invalidation 不安全请求,但它没有通用机制来宣布 other 也应该失效的资源。