API の GraphQL 化
課題
テラーノベルにおける API の実装基盤は、下記のような世代を経てきました。
- API 定義なしの REST API
- twirp フレームワークに依拠した protocol buffer による API 定義とコード生成による REST API
- 本来はここで gRPC にしたかったが、App Engine が gRPC 通信をサポートしていなかったため、API 定義そのものは protocol buffer で定義しつつも、実態は JSON をペイロードとする REST API の形になった (twirp)
- protocol buffer による API 定義に基づいた GraphQL ライクな API
- 本来はここで gqlgen を導入して、GraphQL API を実現したかったが、App Engine がサポートする Go ランタイムのバージョンが古いことにより、gqlgen そのものを導入することができなかった
GraphQL ライクな API は、画面ごとの over-fetch, under-fetch を避けるという課題を解決することはできたが、一般的なエコシステムから完全に独立しているため、サーバサイドのみならず、クライアントサイドもそれらのエコシステムのメリットを享受することができず、開発に余分な負担が生じ続けている。
展望
サーバサイドが正式な GraphQL フレームワークに則って実装することで、クライアントサイドが Apollo フレームワーク等をベースにしたエコシステムに則って開発できる形にしたい