【发布时间】:2019-12-26 05:27:14
【问题描述】:
我是working on a UI,它列出了给定用户或组织的所有存储库。这是使用树形格式,其中第一级是存储库,第二级层次结构(子节点)是每个分支,如果展开的话。
我正在使用一种机制,它故意不要求我提取给定 repo 的所有分支的列表,因为 API 对 API 调用有速率限制。相反,我所要做的就是指示它包含多少个子节点,而不是实际为它们分配值(直到用户展开它的那一刻)。我几乎可以肯定,获取 repos 列表会在结果中包含分支计数,但令我失望的是,我没有看到它。我只能看到分叉、观星者、观察者、问题等的计数。除了分支计数之外的所有内容。
UI 的目的是它会提前知道填充子节点的分支数量,但直到 用户展开父节点后才真正获取它们 - 因此立即显示 每个分支的空占位符,然后异步加载要填充的实际分支。同样,因为我需要避免过多的 API 调用。当用户滚动时,它将使用分页只获取它需要向用户显示的页面,并保持缓存以供以后显示。
具体来说,我使用的是 Delphi 的 Virtual TreeView:
procedure TfrmMain.LstInitChildren(Sender: TBaseVirtualTree; Node: PVirtualNode;
var ChildCount: Cardinal);
var
L: Integer;
R: TGitHubRepo;
begin
L:= Lst.GetNodeLevel(Node);
case L of
0: begin
//TODO: Return number of branches...
R:= TGitHubRepo(Lst.GetNodeData(Node));
ChildCount:= R.I['branch_count']; //TODO: There is no such thing!!!
end;
1: ChildCount:= 0; //Branches have no further child nodes
end;
end;
我是否缺少某些东西,可以让我获得 repo 分支计数,而无需预先获取所有这些分支的完整列表?
【问题讨论】:
-
如果您在速率限制方面遇到问题,请考虑实施Conditional Requests,这样重复查询就不会计入您的限制。
-
我从未想过要考虑的一件事是,实际上每个存储库都至少有一个分支。因此,我总是可以显示 [+] 来扩展任何 repo,只有这样它才会关心获取任何东西。那时,我可以使用分页来加载所有分支,甚至可能一次加载所有分支。扩展一个的成本可能很高,但至少我不需要提前知道总数。我首先需要知道的原因是我知道是否要在任何东西上加上 [+] 扩展器。但是因为所有的都会有一个默认的分支,所以他们都会有一个。
标签: github github-api