【问题标题】:Do nested resources need to be paged too?嵌套资源也需要分页吗?
【发布时间】:2016-12-10 07:17:55
【问题描述】:
我正在构建一个 REST api。我要解决的问题的一个简单示例涉及 2 个域实体:posts 和 cmets。目前,对http://myapidomain.com/posts 的 GET 请求会返回一组帖子,其中每个帖子都包含指向有关此特定帖子的 cmets 的链接。我还将允许在响应中扩展 cmets 链接,以便 cmets 列表显示在行中,而不是指向它们的 url。每种方法都有利有弊,但有充分的理由同时包含这两种方法。
我的问题是,例如,我对 /posts 的 GET 请求返回一个分页列表(例如,页面大小为 10)的帖子,其中包含 cmets 列表,而不仅仅是一个链接...我需要吗?也要对嵌套资源进行分页?我担心一个帖子可能有无限数量的 cmets,因此 10 个帖子的列表可能有一个或多个帖子,其中一个帖子有很多 100 个 cmets。那么内部/嵌套资源是否也需要分页,还是有一些标准方法来处理这种情况?
【问题讨论】:
标签:
api
rest
spring-data-jpa
nested-resources
【解决方案1】:
包含集合子资源的链接是一种很好的做法。如果客户端需要该集合,可以对链接执行新的请求。
但是,如果出于某种原因,您需要为每个帖子预加载一些 cmets,我会考虑仅包含 cmets 的第一页并提供加载下一页的链接。
{
"data": [
{
"id": 1,
"title": "It's a post",
"content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit...",
"comments": {
"data": [
{
"content": "It's a comment",
"author": "John Doe"
},
{
"content": "It's comment",
"author": "Jane Doe"
},
...
],
"paging": {
"next": "http://api.example.com/posts/1/comments?page=2&size=10"
}
}
},
...
],
"paging": {
"previous": "http://api.example.com/posts?page=1&size=10",
"next": "http://api.example.com/posts?page=3&size=10"
}
}