2014-06-13 35 views
0

我有一個實體,其中有多個子集合。在某些情況下,這些集合中的一些可能包含很多項目(> 100)。然而,在大多數情況下,大約有1-10個,這很好。如何處理REST中子集合的分頁

當我顯示我的主要實體時,如果有超過10條記錄,我想用分頁顯示這些子集合。

因爲我不想將我的JSON響應包裹在信封中,所以我使用Content-Range標題(例如Content-Range:entities 11-20/400),當我添加到響應中時一般收藏。在這種情況下,我得到一個單一的實體附加了幾個集合。

(例如實體響應於 「GET實體/ 123 AnotherChildrenCollection.PageSize = 15 & Children.PageSize = 10 & AnotherChidrenCollection.PageIndex = 1?」

「實體」

{ ID:123 , 子女:[{ChildID:1},...] //例如實際總數爲122 AnotherChildrenCollection:[{ChildID:1},...] //例如實際總數爲130 }

唯一的想法是如何擴展內容範圍頭與所有子集合昏迷分離和解析。

例如像這樣:

內容範圍:entities.Children 0-9/122,entities.AnotherChildrenCollection 15-29/130

是否有更好或處理這一點,因爲這感覺有點像更標準的方法一個「黑客」

+0

您是否可以在需要的時候得到孩子,而不是每次都得到主要實體? – heikkim

+0

我想與主實體同時顯示它們,並且我希望避免向每個子集合的服務器發出請求。這是爲了獲得更好的用戶體驗,相比之下,如果用戶不得不從用戶界面展開每個集合,然後才能看到那裏有哪些數據。 – AdEpt

回答

0

HTTP spec不允許以這種方式使用內容範圍。它明確地只需要一個字節範圍。考慮使用link headers來代替。

例如,

Link: <"http://foo/bar">"; rel=next 

添加多個鏈接報頭,其中,每個rel=值表示的關係。在你的情況下,使用「第一個」,「上一個」,「下一個」,「最後一個」。請注意,如果你這樣做,你將失去記錄的總數。這是人們使用信封的原因之一。

編輯:看來我對HTTP規範的閱讀不準確。相關部分說的是,客戶不需要要求尊重任何其他範圍類型。他們仍然可以,如果他們選擇的話。我仍然會考慮使用鏈接標題。

+0

使用信封時,我必須將每個收藏包裝在信封中,而不要將它們直接附加到主要實體,看起來也不是一個好的解決方案,或者您是否在主信封中包含子收藏總數等? – AdEpt