PythonのGraphQLサーバーの紹介
國忠です。
Sprocketは一部のAPIサーバーにGraphQLを利用しております。
最近業務にてPythonでGraphQLサーバーを構築する案件が発生しました。
本記事では、その際に採用するライブラリを比較検討した記録を残します。
比較検討に際し、今回注目したGraphQLに関する2つの概念について解説し、その後にライブラリごとの違いを紹介します。
Apollo Federation
Apollo Federationは、複数のSubGraphと呼ばれるバックエンドサービスを連携させて、1つのSuperGraphと呼ばれるエンドポイントを作成できる機能です。
Apollo Federationは2019年に公開され、Netflix社による大規模な実例があります。
複数の開発チームで1つのプラットフォームを開発している際に、各チームがSubGraphを担当し、開発サイクルの独立性を保持し全体の開発スピードを上げる局面で有効とされています。
GraphQLサーバーはApollo Federation specificationに準拠した実装をすることで、Apollo Federationに対応できます。
スキーマファーストとコードファースト
GraphQLはSDL(Schema Definition Language)でAPIのスキーマを定義できます。
GraphQLサーバーの実装にあたり、スキーマファーストとコードファースの2つのアプローチが存在します。
スキーマファーストではSDL(Schema Definition Language)を使ってスキーマを定義し、それを元にリゾルバーを実装します。
コードファーストでは直接コードとしてスキーマとリゾルバーを記述します。
両者の特徴を表にすると下記のようになります。
項目 | スキーマファースト | コードファースト |
---|---|---|
公開時期 | 2016年~ | 2018年~ |
スキーマ定義とリゾルバーが分離するか | 分離する | 分離しない |
GraphQLスキーマをモジュール化できるか | しにくい | しやすい |
GraphQLスキーマ定義の再利用 | しにくい | しやすい |
IDEのサポート | 受けにくい | 受けやすい |
サーバー開発とクライアント開発の順序 | 並行して着手できる | サーバー開発から着手 |
大規模なスキーマの継続開発 | しにくい | しやすい |
スキーマ定義の把握しやすさ | SDLを読むことで把握しやすい | コードにはリゾルバも含まれるため把握しづらい |
上記表の作成にあたって以下の記事を参考にしました。
- Schema-first or Code-first in GraphQL
- Code-first vs. schema-first development in GraphQL - LogRocket Blog
- GraphQL - schema-first vs code-first | GraphQL Blog
- The Problems of "Schema-First" GraphQL Server Development | Prisma
- Schema-First GraphQL: The Road Less Travelled
ライブラリの比較
Apollo Federationとスキーマファーストとコードファーストを把握した上で、Pythonの4つのライブラリについての比較表を以下に示します。
GraphQLライブラリの実装はGraphQL公式ページにて紹介されています。
ariadne | graphene | strawberry | tartiflette | |
---|---|---|---|---|
Apollo Federation対応 | ○ | ○ | ○ | ○ |
コードファースト or スキーマファースト | スキーマファースト | コードファースト | コードファースト | スキーマファースト |
スター数 | 1.5k | 6.8k | 1.2k | 781 |
イシュー数 | 41 | 100 | 99 | 6 |
バージョン | 0.13.0 | v2.1.9 | v0.79.0 | v1.4.0 |
コントリビュート #1 | rafalp @Wrocław | syrusakbary @San Francisco | patrick91 @London | Maximilien-R @Paris |
1st commit | 2018-07-09 | 2015-09-24 | 2018-12-21 | 2018-01-26 |
備考 | Python オブジェクトで GraphQL Schema の型を表現している。 | Type Hint で GraphQL Schema の型を表現している。 | Powerd by dailymotion. grapheneから独自実装のtartifletteに移行した模様。 |
まとめ
Apollo Federationにはどのライブラリも対応しておりました。
各ライブラリそれぞれ違う魅力がありますので、ご自身のユースケースとライブラリの特徴を見比べて選択すると良いでしょう。
Sprocketで働きませんか?
弊社ではカジュアル面談を実施しております。
ご興味を持たれましたら、こちらからご応募お待ちしております。
Discussion