ecmadao / hacknical

Hacknical, hacker & technical. A website for GitHub user to make a better resume.
https://hacknical.com
Apache License 2.0
1.53k stars 118 forks source link

refactor: Use GraphQL API v4 instead of REST API v3 #64

Closed axetroy closed 7 years ago

axetroy commented 7 years ago

https://developer.github.com/v4/

今天试了一下GraphQL,发现真是惊为天人

RESTFUL缺点: 数据来源取决于服务端,如果A接口数据不足,则需要请求B接口,B接口还不足,还需要请求C接口,期间浪费了N多无用数据与http请求

GraphQL优点: 数据取决于客户端,只要你想要的数据

另外发现: GraphQL API v4提供的一些接口,是v3没有的。 比如:contributedRepositories 获取用户贡献过的项目

就像Github首页的右侧挂件 1

ecmadao commented 7 years ago

@axetroy 这个是真的赞!我也看见了。。用 GraphQL 的话理论上应该可以加速数据抓取,同时也减少现在会出现的无法抓到数据的情况(V3 API 调用频率超限制或者超时)。 之前把 hacknical 拆分了 server,目前 hacknical 主站提供简历服务的后端(待拆分)和前端,GitHub 的数据提供和抓取被拆到了这个 server 里:hacknical-api;同时,这个 server 也给我另一个正在开发中的项目提供 GitHub 的数据支持:jarvim-web,不同 server 间使用 HMAC 进行验证。

等之后找时间重构 hacknical-api 就行了,但是近期主要时间在忙工作上的项目,所以具体安排还得待定

ecmadao commented 7 years ago

@axetroy

Working in progress! 开始把 API 转换为 GraphQL 了 不过有坑啊。。用户 token 在 v3 和 v4 API 的权限不一致,在 v3 OAuth 下,只需要 user:email 的权限就能获取大部分的公开数据,但是转为 v4 后,organization 的信息就无法再获取到了。所以目前还得还得 v3 v4 混着用,下一步寻找下解决方案

ecmadao commented 7 years ago

@axetroy

Done!

GraghQL API 的优势不言而喻,但相比于 Restful API 来说,在处理数据分页的情况时有些不足。目前,只能依次获取各个分页的数据(必须根据上一页的 endCursor 来切分出下一页的起点位置),无法并发获取多页数据,因此在速度上很难保证一定比 Restful API 快(不知道之后会不会改进,按照官方的说法,其 GraphQL API 还不成熟,目前维持这样,也能保证 API 调用频率的限制)。