嵌套资源也需要分页吗?
Do nested resources need to be paged too?
我正在构建 REST api。我要解决的一个简单问题示例涉及 2 个域实体:posts 和评论。当前对 http://myapidomain.com/posts returns post 集合的 GET 请求,其中每个 post 包含一个 link 来评论这个特定的 post。我还将允许在响应中扩展评论 link,以便评论列表显示在一行中,而不是 url 指向它们。每种方法都有利弊,但有充分的理由包括这两种选择。
我的问题是,例如我对 /posts returns 的 posts 分页列表(例如,页面大小为 10)的 GET 请求,其中包含评论列表,而不仅仅是 link...我是否也需要对嵌套资源进行分页?我担心单个 post 可以有无限数量的评论,因此 10 个 post 的列表可能有一个或多个 post 有很多 100 条评论一个 post。那么内部/嵌套资源是否也需要分页,或者是否有一些标准的方法来处理这种情况?
为集合子资源包含一个 link 是一个很好的做法。如果客户端需要采集,可以向link发起新的请求。
但是,如果出于某种原因,您需要为每个 post 预加载一些评论,我会考虑仅包含评论的第一页并提供 link 以加载下一页。
{
"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"
}
}
我正在构建 REST api。我要解决的一个简单问题示例涉及 2 个域实体:posts 和评论。当前对 http://myapidomain.com/posts returns post 集合的 GET 请求,其中每个 post 包含一个 link 来评论这个特定的 post。我还将允许在响应中扩展评论 link,以便评论列表显示在一行中,而不是 url 指向它们。每种方法都有利弊,但有充分的理由包括这两种选择。
我的问题是,例如我对 /posts returns 的 posts 分页列表(例如,页面大小为 10)的 GET 请求,其中包含评论列表,而不仅仅是 link...我是否也需要对嵌套资源进行分页?我担心单个 post 可以有无限数量的评论,因此 10 个 post 的列表可能有一个或多个 post 有很多 100 条评论一个 post。那么内部/嵌套资源是否也需要分页,或者是否有一些标准的方法来处理这种情况?
为集合子资源包含一个 link 是一个很好的做法。如果客户端需要采集,可以向link发起新的请求。
但是,如果出于某种原因,您需要为每个 post 预加载一些评论,我会考虑仅包含评论的第一页并提供 link 以加载下一页。
{
"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"
}
}