把 gh-api 部署到 Vercel,就能给静态博客提供一个只读的 GitHub API 代理:仓库信息、贡献者、最新版本和热门项目都能取。
特点
- 前端不用放 Token:凭证存在服务端,用白名单按用户、组织或仓库开放资源。
- 有缓存,不用每次都请求 GitHub:走 CDN、运行时缓存和 ETag 校验。
- 返回的还是 GitHub 的 JSON 结构,支持跨域;另外有一个按 Star 数排序的热门仓库接口。
- 不需要数据库、Redis 或定时任务,配两个环境变量就能跑。
在静态博客中使用
页面加载后,由浏览器请求代理获取数据。Star 数和版本信息按缓存周期更新,无需重新构建博客。
仓库信息
将 https://your-domain 替换为部署域名,白名单中加入 xaoxuu/gh-api,即可获取仓库数据:
const response = await fetch('https://your-domain/repos/xaoxuu/gh-api'); |
如果主题组件支持自定义 API 地址,且使用相同的 GitHub JSON 格式,可以直接填入对应的代理地址:
| 用途 | 路径 |
|---|---|
| 仓库信息 | /repos/:owner/:repo |
| 贡献者头像 | /repos/:owner/:repo/contributors |
| 最新版本 | /repos/:owner/:repo/releases/latest |
| Issue 列表 | /repos/:owner/:repo/issues |
| 用户资料 | /users/:owner |
:owner、:repo 分别替换为用户名或组织名、仓库名。普通列表需自行处理分页;用户资料需要 owner 级白名单。
热门项目
在个人主页展示 Star 最多的 6 个项目,可以请求:
https://your-domain/users/xaoxuu/popular-repos?limit=6 |
返回的仓库数组已按 Star 数降序排列,无需自行遍历分页。组织使用 /orgs/:owner/popular-repos;limit 默认 10,允许 1–100。此接口需要 owner 级白名单,例如 xaoxuu。
代理仅支持部分公开资源的只读接口,不支持搜索、文件内容、GraphQL 或写入操作,仍受 GitHub 与 Vercel 的用量限制约束。
部署到 Vercel
- 导入 xaoxuu/gh-api,或使用 README 中的一键部署按钮。
- Framework Preset 选择
Other,Node.js 选择24.x。 - 在 Production 环境配置以下变量,然后部署。Preview 如需测试,应单独配置。
| 环境变量 | 配置方法 |
|---|---|
GITHUB_TOKEN | 创建 GitHub fine-grained PAT,Repository access 选择 Public repositories (read-only) |
GITHUB_ALLOWLIST | 填入允许访问的用户、组织或仓库,多个用英文逗号分隔,如 xaoxuu,vercel/next.js |
白名单中,owner 开放该用户或组织的公开资料、仓库列表及所有公开仓库的受支持接口;owner/repo 仅开放指定仓库。Token 只保存在服务端,不要赋予私有仓库权限或写入博客前端。
部署后,请求白名单内的仓库验证服务:
curl -i 'https://your-domain/repos/xaoxuu/gh-api' |
确认返回仓库 JSON;重复请求时,可通过 x-vercel-cache: HIT 检查 CDN 命中。默认数据新鲜期为 30 分钟,缓存与跨域设置可按下方 README 调整。
修改环境变量后必须重新部署。撤销授权时,还需保护或删除仍使用旧配置的历史部署。
完整使用说明
接口、可选配置和排错说明见下方 README,也可以 在 GitHub 中阅读。