Better, Eazy, Access Anywhere
基于 gh-proxy + Jsdelivr + cnpmjs + cloudflare workers 的 GitHub Serverless API 工具。
cdn.js:仅含 gh-proxy 中的CDN功能,URL后加上GitHub各种资源(源码、Release文件等)的下载链接跳转为对应CDN加速的链接。
api.js:本项目的核心,提供API服务,部署时只用修改最开始的几个变量参数。
- GitHub资源下载龟速,你我都有办法,但是用户没有,而分发存储到其他地方也可能会增加开支和麻烦。
- GitHub的API没有办法直接获得 Release 的某个附件,如提供过滤选项在众多Assets中筛选想要的附件,获取最新版本的某个附件只能通过解析API进一步操作,而实际应提供一个固定、简短的API。
- Jsdelivr很好用,可结合GitHub Actions自动搬运资源,但是有~20MB/文件限制。
- 使用 Jsdelivr 等CDN加速资源下载,Release文件加速无大小限制;
- 提供简明的API,可作为程序分发的固定下载链接;
- 开销低,每个账号CloudFlare Workers 免费请求额度为 ~1k次/小时 ~100k次/天,5$付费版 ~10m次/天,且可开多个账号。
如需用自己的域名,应使用CloudFlare的DNS服务(maybe可用CNAME跳转Worker的域名)
- repo
- get
- bucket
- submit
- list
- submit可视化提交界面
如果有配置好的API服务可以直接使用,API参考这里,这里给出可用的域名,请尽量自己搭建减少这里的压力,毕竟是免费的,也可提交你的域名:
下面是使用举例:
| 含义 | URL |
|---|---|
| 获取advancedfx仓库的最新版本号 | https://api.upup.cool/repo/advancedfx/advancedfx/version |
| 获取advancedfx仓库的最新版本包含hlae字符串的zip压缩包 | https://api.upup.cool/repo/advancedfx/advancedfx/&hlae&&&.zip |
| 获取advancedfx仓库的最新版本号v2.115.0的HLAE_Setup.exe安装器 | https://api.upup.cool/repo/advancedfx/advancedfx/v2.115.0/&HLAE_Setup.exe |
| 获取本仓库最新源代码 | https://api.upup.cool/repo/One-Studio/better-github-api/source |
| 获取本仓库最新简化信息 | https://api.upup.cool/repo/One-Studio/better-github-api/info |
| 获取...上述zip压缩包,使用KV键值对预先存好的信息 | https://api.upup.cool/get/hlae |
| 获取advancedfx仓库的最新版本号 | https://api.upup.cool/get/hlae/version |
登录 Cloudflare Workers 注册,登陆,选择Workers,创建Worker。下面的服务可自由选择。
- 复制项目文件中
cdn.js的内容到左侧代码框; - 修改 ASSET_URL, Config, PREFIX;
- 保存并部署;
- (可选)修改Worker的域名/路由。
- 复制项目文件中
api.js的内容到左侧代码框,保存并部署; - 修改 HOME_PAGE,请求不加参数时跳转到主页;
- 保存并部署;
- 返回Workers界面,点击KV设置命名空间,添加两个命名空间:
KV、BUCKET(可修改),回到Worker的设置页绑定命名空间,注意变量名称必须是KV、BUCKET;BUCKET 功能未完成,可以只添加KV
- 提交KV键值对:给刚才绑定KV变量名的命名空间添加键值对(仓库简称-值)以使用get方法,参照这里;
- (可选)修改Worker的域名/路由。
HOME_PAGE,请求不加参数时跳转到主页ASSET_URL 修改为Worker的域名,如用自定义域名也要改成对应的。
如果有自己的域名,可以给CDN和API服务分配分配到两个子域名中。使用CloudFlare做域名的DNS服务器之后,按下表设置DNS:
| 类型 | 名称 | 内容 |
|---|---|---|
| A | api | 8.8.8.8 |
| A | cdn | 8.8.8.8 |
然后在域名设置页找到Workers,添加路由,路由格式:
api.upup.cool/*
cdn.upup.cool/*
KV(Key-Value)键值对:CloudFlare提供了免费1GB的键值对存储功能,可以设置多个命名空间,Workers可以读写这些键值实现一些功能
| 参数 | 含义 |
|---|---|
| /repo | 获取GitHub仓库信息 |
| /get | 利用KV中已有的键值对快速获取GitHub仓库信息 |
| /bucket | 与get类似,使用KV缓存的键值信息简化参数复杂度,加快响应 |
| /submit | 向KV提交键值对 |
| /list | 列出KV键值对 |
| API | 含义 |
|---|---|
/仓库主/仓库名 |
获取该仓库的最新版本的唯一附件 |
/仓库主/仓库名/version |
获取该仓库的最新版本的版本号 |
/仓库主/仓库名/source |
获取该仓库的最新版本的源代码下载地址 |
/仓库主/仓库名/info |
获取该仓库的最新版本的信息,如版本号和附件 |
/仓库主/仓库名/过滤器 |
获取该仓库的最新版本的附件,同时过滤附件名得到唯一附件 |
/仓库主/仓库名/版本 |
获取该仓库的给定版本的唯一附件 |
/仓库主/仓库名/版本/version |
获取该仓库的给定版本的唯一附件 |
/仓库主/仓库名/版本/source |
获取该仓库的给定版本的源代码下载地址 |
/仓库主/仓库名/版本/info |
获取该仓库的给定版本的信息,如版本号和附件 |
/仓库主/仓库名/版本/过滤器 |
获取该仓库的给定版本的附件,同时过滤附件名得到唯一附件 |
| 仓库信息 | 类型 | 示例 |
|---|---|---|
| 仓库主 | string | One-Studio |
| 仓库名 | string | better-github-api |
| 版本 | 含义 | 示例 |
|---|---|---|
| latest | 最新版本 | latest |
| 其他 | 指定的其他版本 | v2.116.0 |
| info成员 | 类型 | 含义 |
|---|---|---|
| version | string | 版本号 |
| source | string | 源代码URL |
| assets | asset array | 附件 |
| log | string | 更新日志 |
| asset成员 | 类型 | 含义 |
|---|---|---|
| name | string | 附件名 |
| size | int | 附件大小 |
| browser_download_url | string | 附件下载链接 (TODO 原始 or 加速后?) |
filter用&分隔的过滤器各个部分,必须&开头,格式为 &include&exclude&start&end ,可用格式的示例如下:
- &
hlae&&&.zip - &
HLAE_Setup.exe - &
HLAE_Setup.exe&&& - &
hlae&.exe - &
hlae&.exe&&
右侧连通的空白部分&可省去。
| 过滤器部分 | 含义 | 例 |
|---|---|---|
| include | 包含字符串 | hlae |
| exclude | 排除字符串 | |
| start | 开头字符串 | |
| end | 结尾字符串 | .zip |
仓库简称后的API与repo一致,区别在使用KV存储的信息(仓库主、仓库名、filter等)简化API。
| API | 含义 |
|---|---|
/get/仓库简称 |
获取该仓库的最新版本的唯一附件 |
/get/仓库简称/version |
获取该仓库的最新版本的版本号 |
/get/仓库简称/source |
获取该仓库的最新版本的源代码下载地址 |
/get/仓库简称/info |
获取该仓库的最新版本的信息,如版本号和附件 |
/get/仓库简称/过滤器 |
获取该仓库的最新版本的附件,同时过滤附件名得到唯一附件 |
/get/仓库简称/版本 |
获取该仓库的给定版本的唯一附件 |
/get/仓库简称/版本/version |
获取该仓库的给定版本的唯一附件 |
/get/仓库简称/版本/source |
获取该仓库的给定版本的源代码下载地址 |
/get/仓库简称/版本/info |
获取该仓库的给定版本的信息,如版本号和附件 |
/get/仓库简称/版本/过滤器 |
获取该仓库的给定版本的附件,同时过滤附件名得到唯一附件 |
至于KV里如何存简称-全称的对应关系:
| 键 | 类型 | 含义 | 例 |
|---|---|---|---|
| repo | string | 仓库主/仓库名 | advancedfx/advancedfx |
| filter | string | 附件名过滤器 | &hlae&&&.zip |
| info | object | KV键值对信息(多语言) | {"zh_CN": "hlae的zip安装包", "zh_TW": "hlae的zip安裝器"} |
举例:键为 hlae,值为:
{
"repo": "advancedfx/advancedfx",
"filter": "&hlae&&&.zip",
"info": {
"zh_CN": "hlae的zip安装包",
"zh_TW": "hlae的zip安裝包"
}
}
之后使用URL如https://api.upup.cool/get/hlae即可直接下载hlae的最新zip安装包,同时包含CDN服务,避免了很多访问速度的问题。
| API示例 | 含义 |
|---|---|
| /bucket | 获取所有bucket信息 |
| /bucket/hlae | 获取hlae最新安装包 |
| /bucket/hlae/version | |
| /bucket/ffmpeg/win/ | |
| /bucket/ffmpeg/win/ | |
| /get/hlae |