前言
在使用Github作为远端仓库的时候,Github给我们提供了一套API接口,可以做非常多有趣的事,今天尝试使用其中的API来操作仓库文件,达到一个免费“数据库”的作用。
具体描述:
- 创建Github仓库,并传入一个文件作为“数据库”。
- 创建Token,用于访问和操作“数据库”
- 在安卓端,使用该Token,对“数据库”进行读写操作。
开始
在开始之前,请先确保已经申请Github账号和配置好本地Git环境,并具备基本的Git操作知识。如果还未接触过Git请先尝试学习一下简单教程。
一、 创建仓库
在Github页面创建一个公开仓库,起个名字比如:APITest
:
本地创建一个新文件夹,创建两个文件data.json
和README.md
。
其中data.json
就作为“数据库”文件使用,编辑此文件随便写点什么:
1 | { |
然后,在本地建立仓库,并push到Github远端仓库:
1 | git init |
至此仓库准备完毕
二、 验证接口
Github给我们提供了访问仓库文件的接口,测试下:
1 | https://api.github.com/repos/Staray/APITest/contents/data.json |
返回结果:
分析下这个接口:
前面的https://api.github.com/repos/
是固定的,接着Staray
是我的Github账户名,APITest
是刚刚创建的仓库名称,contents
是固定格式,data.json
是刚刚创建的文件名称,所以通用的格式如下:
1 | https://api.github.com/repos/[用户名]/[仓库名]/contents/[文件名] |
注意,这个地址一定要注意大小写!
这个json结构数据,包含了这个文件的一些关键性信息:
1 | { |
需要注意的就是这个key:sha
,每个仓库文件,都有对应的哈希值,如果修改该文件,哈希值就会变化,这个值是后面我们更新文件的唯一标识。
第二个需要注意的就是content
,这个值记录的是文件内容的Base64
编码结果,你可以直接通过Base64解码
来获取到文件的内容。
第三个download_url
,尝试访问这个地址,你就会直接拿到文件内容,如下所示:
其他更多接口使用查看:
https://www.jianshu.com/p/a6779929fad2
三、 TOKEN申请
上面的文档中给出了多种认证方式:
认证方法一:Basic authentication
认证方法二:OAuth2 token
认证方法三:OAuth2 key/secret
根据我们要实现的功能,最合适的是TOKEN验证。
在Github页面,打开Setting页面:
找到 Developer settings
选项卡点击打开,进入Token页面
点击Generate new token
,在下拉框中选择Generate new token(classic)
,创建一个新的Token。
在创建页面,输入Note,设置期限,可以设置无过期,然后根据权限勾选token能操作的接口,这里我们需要操作仓库,至少要把repo勾选上:
然后,点击下方的Generate token
按钮。
就能看到生成的Token页面,注意,这个页面只有在这时显示一次,以后就再也看不到这个Token明文了,所以需要这时保存下来,然后一直使用,假如没有保存,重新执行上面的生成token步骤进行替换即可。
四、 修改文件测试
下面介绍在安卓项目中修改仓库文件的实际测试,可以使用任何其他网络访问方式进行替换,比如在windows上使用Curl工具,PostMan工具等,原理都是一样。
比如使用Ok-go库进行网络访问,设置Header:
1 | HttpHeaders headers = new HttpHeaders(); |
代码里的token后面的内容使用申请的Token字符串进行替换。
然后,重点来了,修改文件内容需要以下操作,直接上代码:
1 | import android.util.Base64; |
可以实际看到文件内容就被更改了:
再次访问Github API接口:
可以看到文件内容更改成功。
结语
有了这个接口,我们就可以实现一些简单的数据存储,这里使用的明文,可以进行加密处理,这样我们就可以在没有个人服务器的情况下,使用远端数据存储和同步数据了。