📌

PythonのGraphQLサーバーの紹介

2024/07/23に公開

國忠です。

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を読むことで把握しやすい コードにはリゾルバも含まれるため把握しづらい

上記表の作成にあたって以下の記事を参考にしました。

ライブラリの比較

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で働きませんか?

弊社ではカジュアル面談を実施しております。
ご興味を持たれましたら、こちらからご応募お待ちしております。

Sprocketテックブログ

Discussion