关于GitHub API获取最近N个公开仓库及since参数的技术问询
GitHub API 「列出公开仓库」端点的
since 参数详解 我来帮你把这个参数的用法讲清楚,刚好我之前做过仓库同步的需求,对这块挺熟的:
1. since 参数的核心作用
它是用来做增量拉取/分页续更的标记。你传入一个仓库的ID,API就会返回所有ID严格大于这个值的公开仓库。因为GitHub的仓库ID是全局自增的——新创建的仓库ID一定比旧的大,所以这个参数本质上是帮你过滤出「在某个仓库之后创建的所有仓库」,非常适合做定期同步之类的场景。
2. 它确实返回ID大于since值的仓库吗?
没错,就是这个逻辑。只要你传的是有效的仓库ID,返回结果里所有仓库的ID都会比它大,而且默认是按ID从小到大(也就是创建时间从早到晚)排序的。
3. 如何获取最近50个公开仓库?
这里得先纠正一个误区:since参数其实不是直接「拿最新n个」的最佳方式,它更适合增量同步。如果要直接拿最近50个,用排序参数会更简单高效:
直接获取最近50个的最优写法
GitHub的这个端点支持sort和direction参数,你可以直接指定按创建时间降序排列,取前50个:
GET /repositories?per_page=50&sort=created&direction=desc
这样返回的结果就是刚创建的50个公开仓库,一步到位。
如果一定要用since参数实现(适合增量场景)
如果是基于之前的拉取记录,要获取「上次拉取之后新创建的50个」,步骤是:
- 第一步:记下你上次拉取到的所有仓库里最大的那个ID(假设是
LAST_MAX_ID) - 第二步:调用API时带上
since参数,同时限制数量:
这样返回的就是上次拉取之后新创建的最多50个仓库。GET /repositories?per_page=50&since=LAST_MAX_ID
要是你是第一次拉取,想通过since拿到最新的50个,操作会比较麻烦(因为仓库ID可能有间隙,无法直接通过ID倒推数量),所以还是推荐用前面的排序参数写法。
内容的提问来源于stack exchange,提问作者iAmoric
相关产品推荐
相关产品推荐

