我依稀记得 Java 的 Spring Cloud 中有一个重要的部分就是集中配置:
如图所示,将后台服务的配置文件集中存储于远程的 GitHub 库,然后通过配置服务去拉取库中的配置信息,而不同的微服务则统一通过配置服务获取其需要的配置信息。
集中配置有什么好处? 假设我们后台的三个应用程序都是操作同一个数据库,而某一天这个数据库的账号密码被修改了或者干脆迁移到了另一个库,如果没有集中配置我们就不得不在每一个程序中修改数据库的配置,反之,如果使用了集中配置的方式,我们就只需要修改一次配置文件即可。
当然 GitHub 作为一个开放的平台用来存储配置文件完全没问题,而存储了之后怎么读取呢,这才是我想说的内容,也是本文的标题:从 GitHub 上获取文件内容。
01
—
Developer API
如何从 GitHub 上获取文件内容,我的第一反应是爬虫啊,地址都知道直接爬就行了嘛,没错,爬虫没问题啊,但是爬下来还需要额外去抓取指定标签才能获取到你想要的内容,而直接使用 GitHub 提供的 API 接口显然更方便。
这里我们使用 REST API v3 版本,地址:https://developer.github.com/v3/ 。
获取指定库中文件内容的接口文档:
示例:
上述内容对公开库没问题,但是如果是私有库呢,我们就必须加上认证信息了。
02
—
私有库认证
私有库操作必须经过认证,而对于认证,最基础的 Basic Authentication,也就是输入用户名和密码:
然而,这种明文的用户名和密码显然不够安全。
OAuth 认证:我想用自己的微信直接登录另一个第三方应用进行操作怎么办,这时第三方应用就必须向微信进行认证授权,这就是 OAuth 认证的一种使用场景。而这里我们并没有第三方的参与,因此 OAuth 认证不太适合。
那么有没有一种更适合的认证方式呢,当然有啊! GitHub 有另一种专门的认证方式:Personal Access Token 。
为此,我们需要进入 settings -> Developer settings -> Personal access tokens 进行配置:
点击创建新的tokens,填写描述信息,并添加 repo 的操作权限:
成功创建后生成 token(红色注掉的字符串):
图示中我创建了一个 config for mysql 的 token,对私有库操作时只需要加上这个 token 就可以进行认证了:
上述 token 是可以随时更新和删除的,显然更好用。
本文简单描述了如何从 GitHub 上获取文件内容,完。