如何在 REST 中处理子集合的分页

问题描述 投票:0回答:1

我有一个实体,其中有多个子集合。在某些情况下,其中一些集合可能包含许多项目 (> 100)。但在大多数情况下,大约有 1-10 个,这很好。

当我显示我的主实体时,如果有超过 10 条记录,我想通过分页显示这些子集合。

由于我不想将 JSON 响应包装在信封中,所以我使用 Content-Range 标头(例如 Content-Range:实体 11-20/400),当我在其中获取集合时将其添加到响应中一般的。在这种情况下,我得到一个实体,并附加了多个集合。

(对“GETEntity/123?AnotherChildrenCollection.PageSize=15&Children.PageSize=10&AnotherChildrenCollection.PageIndex=1”的示例实体响应

“实体”

{ 身份证号:123, 儿童:[ { ChildID: 1 }, ... ] // 例如实际总数为122 AnotherChildrenCollection: [ { ChildID: 1 }, ... ] // 例如实际总数为130 }

到目前为止唯一的想法是使用所有子集合逗号分隔并解析 Content-Range 标头。

例如像这样:

内容范围:entities.Children 0-9/122,entities.AnotherChildrenCollection 15-29/130

是否有更好或更标准的方法来处理这个问题,因为这感觉有点像“黑客”

json rest collections pagination children
1个回答
0
投票

HTTP 规范 不允许以这种方式使用内容范围。它明确要求仅字节范围。考虑使用 链接标题 来代替。

举个例子,

Link: <"http://foo/bar">"; rel=next
添加多个链接标头,其中每个 

rel=

 值表示关系。根据您的情况,请使用“第一个”、“上一个”、“下一个”、“最后一个”。请注意,如果这样做,您将丢失记录总数。这就是人们使用信封的原因之一。

编辑:看来我对 HTTP 规范的阅读不准确。相关部分所说的是,客户不需要“要求”尊重任何其他范围类型。如果他们选择的话,他们仍然可以这样做。我仍然会考虑使用链接标题。

© www.soinside.com 2019 - 2024. All rights reserved.