はじめに
GitHubの運用にてアカウント一覧を作成する必要があり、GitHubAPI v3(REST API)を使って実装したのですが、アカウント数の増加とともに処理時間が増えてしまう為、GitHubAPI v4(GraphQL)に変更したメモです。
改善結果
アカウント数が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
- createdAt
- role
コード
RESR API
PyGitHubを使うことで簡単に取得できます。
GraphQL
GraphQLは一回で取得できる件数に制限があり、制限を超えている場合は動的に次のページ情報を指定する必要があったのですが、以下に参考例があったので簡単に実装できました!(感謝!!)
An example on using the Github GraphQL API with Python 3 · GitHub
自分はOrganizationも変数化したかったので、その部分を一部修正してます。
まとめ
GraphQLに変える事でここまで大幅に処理時間が改善できると思っていなかったので感動ものでした!!
動作環境を考えると、処理時間次第でlambdaで実装するか、コンテナ化するかなど、費用面や開発コストにも大きく影響するので、GraphQLの理解を深めて今後の実装に生かしていきたいと思います!!