dehio3’s diary

仕事、生活、趣味のメモ

GitHubAPIをRESTからGraphQLに変えたら処理速度が4分16秒から7秒に改善した

f:id:dehio3:20200728114503p:plain

はじめに

GitHubの運用にてアカウント一覧を作成する必要があり、GitHubAPI v3(REST API)を使って実装したのですが、アカウント数の増加とともに処理時間が増えてしまう為、GitHubAPI v4(GraphQL)に変更したメモです。

docs.github.com

改善結果

アカウント数が399の状態で実行した結果が以下です。

REST API / 256s (4分16秒)

INFO : 2020-07-28 11:02:11,810 : Rest Api Start
INFO : 2020-07-28 11:06:27,565 : member count: 399
INFO : 2020-07-28 11:06:27,565 : Rest Api End

GraphQL / 7s

INFO : 2020-07-28 11:06:27,565 : GraphQL Start
INFO : 2020-07-28 11:06:34,046 : member count: 399
INFO : 2020-07-28 11:06:34,046 : GraphQL End

取得するデータ

GitHubアカウントから以下の情報を取得します。

  • login
  • name
  • email
  • createdAt
  • role

コード

RESR API

PyGitHubを使うことで簡単に取得できます。

GraphQL

GraphQLは一回で取得できる件数に制限があり、制限を超えている場合は動的に次のページ情報を指定する必要があったのですが、以下に参考例があったので簡単に実装できました!(感謝!!)

An example on using the Github GraphQL API with Python 3 · GitHub

自分はOrganizationも変数化したかったので、その部分を一部修正してます。

まとめ

GraphQLに変える事でここまで大幅に処理時間が改善できると思っていなかったので感動ものでした!!

動作環境を考えると、処理時間次第でlambdaで実装するか、コンテナ化するかなど、費用面や開発コストにも大きく影響するので、GraphQLの理解を深めて今後の実装に生かしていきたいと思います!!