Github GraphQL API查询响应出现不存在仓库的问题排查求助
问题产生原因
- 核心原因是你在GraphQL查询的
repositories字段中设置的ownerAffiliations参数包含了三类仓库归属:OWNER(你自己持有的仓库)、ORGANIZATION_MEMBER(你所属组织下的所有你有权限访问的仓库)、COLLABORATOR(你作为协作者受邀加入的其他用户/组织的仓库)。你在GitHub个人主页默认看到的仓库列表仅展示你作为OWNER的仓库,以及你手动置顶的组织/协作者仓库,剩下的两类归属的仓库自然不会出现在你的个人列表中,就会出现「返回了不存在的仓库」的错觉。 - 你在请求参数中额外传递的
archived、isArchived参数完全无效:你的GraphQL查询语句既没有定义这两个入参,也没有在仓库查询的过滤条件中引用这两个参数,所以哪怕你传了值也不会生效,没法按归档状态过滤仓库。
解决方案
- 如果只需要查询你自己持有的仓库,直接把
ownerAffiliations的取值改为["OWNER"]即可,调整后就不会返回组织仓库和协作者仓库。如果同时需要过滤非归档仓库,可以直接在查询参数中添加对应条件,修改后的查询片段示例如下:
repositories(first: 100, after: $after, ownerAffiliations: [OWNER], isArchived: false)
- 如果你确实需要保留组织和协作者仓库的查询能力,可以在前端拿到返回结果后加一层过滤,只保留
owner.login和你当前登录的GitHub用户名一致的仓库即可。 - 也可以调整GitHub授权Token的权限,取消组织仓库的访问授权,这样就算查询参数保留
ORGANIZATION_MEMBER,也不会返回你没有权限的组织仓库。
内容的提问来源于stack exchange,提问作者T. Young
相关产品推荐
相关产品推荐

