Data Protocol - Graan/open GitHub Wiki
实现原理
原则
- 尽量使用GitHub原生功能和数据
- 尽量降低碎片数据的数量
关系映射
-
Oauth
具体实现流程如下:
(1)创建Oauth APP链接点我去创建OAuth app
(2)引导用户跳转 github 授权登录页面 webView 页面实现 使用api 参考文档api 1. Request a user's GitHub identity 同意授权后,会回执 code 值。
(3) 根据(1)中获取的client id client secret 和 (2)中获取的code 实现post 请求api实现获取用户token 2. Users are redirected back to your site by GitHub
(4) 存储token 作为认证 可实现其他用户相关功能 (3中请求成功会回执token eg:
{
"access_token" = 2ee1163deb7f5fd74e101e818805cd7296e7dd68;
scope = "";
"token_type" = bearer;
}
-
遍历仓库 code根目录有
.graan/config.json
基本逻辑:(⚠️当前已优先展示缓存的仓库、笔记、日记、书签,隐式拉取最新第一页数据进行刷新处理 提高展示和交互效率)
if (用户仓库数为0) { //判断目的:避免空仓库数情况 无法正常操作检索目标文件仓库问题
创建第一个目标仓库
创建标识仓库文件
默认创建出第一条日记
} else {
if (存在目标文件仓库集) {
if (没有默认标签) {
打好默认标签eg 日记,笔记等
}
展示出来仓库,列出日记,笔记等
if (没有日记) {
默认创建出第一条日记
}
} else {
创建第一个目标仓库
创建标识仓库文件
默认创建出第一条笔记
}
}
相关API:
- 查询存在目标文件仓库集:
//Get
NSString *url = [NSString stringWithFormat:@"/search/code?q=+user:%@+path:.graan+filename:%@",loginName,FIRGraanConfigFileName];
- 增删改查issue eg 笔记条目 ⚠️注意:删除一个issue 使用添加一个删除标签_delete 并且 state 字段对应的value 改为 @"closed" 的patch请求方式
- 增删改查Label 日记,笔记 等标记
- 增删改查comment具体一条issue 下的评论
- 如果没有
- 创建
- 现有的(不推荐)
label
- _review 总结
- _note 笔记
- _bookmark 书签
- _delete 删除
- 自己创建的label
笔记
新建一条issue 自动打上_note
label,删除笔记时打上_delete
label
显示笔记列表时根据_note
查询并去除包含_delete
的issue
日记
只使用1条issue记录所有日记. 每条评论就是一天日记, 一天可以记多条. 每条都可以使用reaction表情来记录当时的情绪. 每一个修改都有版本历史. 自动打上_review
label
缺点: 时间无法修改
书签
通过软件或小工具, 将链接内容抓取并存为一条issue, 同时打上_bookmark
标签.
close这条issue就是将这个书签存档, 同时还可以全文被搜索.
默认第一条comment里缓存原文
- 通过接口直接拿到可读性更好的内容
同步数据(客户端)
客户端中, 缓存数据可以提高访问速度(书签保存的内容可以选择不同步, 只同步链接/文字内容)
离线时, 添加和修改内容是一个很麻烦的问题, 暂时做只读处理, 这可以作为一个收费的理由
附件存储
直接拖拽附件会生成一个匿名可访问的公开链接, 注意保密