REST API から GraphQL への移行戦略 - 入門 ( Ruby on Rails )

Sommaire
この記事は、当社の API を REST から GraphQL に移行した経験の振り返りと、実施した行動計画の紹介を目的としています。
Ruby と Ruby On Rails を使用していますが、この行動計画は他のフレームワークにも有効です!
動機
なぜ REST から GraphQL に移行するのか?
いくつか理由が思い浮かびますが、第一は柔軟性です。
まずは状況の説明:移行当時、私たちは小さな開発チームでした:フロントエンド開発者 2 名、バックエンド開発者 1 名、フルスタックリード開発者 1 名を擁していました。私たちは複数のフロントアプリケーションを管理しており、それらは API(私たちのバックエンド)を消費していました。
REST はこの種のプロジェクトに非常に適していますが、私たちの小さなチームでは、フロントエンド開発者が機能を実装/完了するために必要な API エンドポイントが欠けている、あるいは開発中であるために作業が滞ることがありました。
もう一つの理由は、GraphQL 自体のユースケースです:フロントエンド開発者が望む応答やデータ形式を記述できる柔軟性を提供します。
これにより、フロントエンド開発者は開発中に一定の自由度を得られ、インターフェースに特化したクエリを表現できるようになります。
REST は時代遅れか?
いいえ!REST は依然として良いアプローチだと思います。GraphQL によって導入される一部のバックエンドの複雑さ(特にサーバーキャッシュ)は、REST のアプローチで単純に解決できる場合もあります。それでも、GraphQL の人気の高まりは採用が進んでいることを示しており、最終的には REST API と共存していくと考えています。
興味があります、詳しく教えて
ここでは、REST 版のサービスを利用するアプリケーションやクライアントに対してサービスの継続性を提供しつつ、API の GraphQL 版を作成するために私たちが実施した行動計画を提示します。
Plan d'action
Travail préparatoire
- Répertorier les controllers & actions qui seront présent sur la version GraphQL de l'API.
- Extraire les actions des controllers en objet (Design Pattern "コマンド を参考にする").
- Mettre à jour la couverture de test.
Configuration du routing
- Mettre en place la strategie de routing : filtrage et routing par header "accept".
Installation et configuration de GraphQL
- Installer GraphQL.
- Créer les modèles GraphQL spécifiques aux modèles ActiveRecord.
- Créer les différentes queries & mutations.
Conclusion & retour d'expérience
まず、準備フェーズによりコードベースの整理ができました:未使用コードの特定、リファクタリングや最適化が必要なコードの改善、そしてテストカバレッジの向上を行うことができました。
次に、ヘッダ "Accept" によるルーティング戦略を導入することで、2 つの API バージョンを共存させることができ、当社の API を利用する各種消費者に対してサービス継続性を提供しました。
最後に、GraphQL は Ruby on Rails のエコシステムに比較的よく統合されます。多くの記事やチュートリアルがネット上にあり、スキーマの難読化、カスタム型の作成、認可などの重要な概念がよく説明されています。
フロントエンド側の日常的な利用に関しては、セットアップと移行期間(axios → appolo)を過ぎると、GraphQL の導入によりフロントエンド開発者の自律性と生産性が向上しました。
私の見解では、この決定はチームにとって良いものでした。機能面での付加価値だけでなく、各種リファクタとテストカバレッジの改善によって堅牢性も増しました。
今後は?
計画で示したいくつかの主要なステップの詳細により深く踏み込んだ一連の記事を作成する予定です。
それまでは、この記事のテーマに関連する有用なリンクをいくつか紹介します。
リンク
リファクタ & 単体テスト
- デザインパターン(コマンド) : コマンドパターンの解説(CodeProject)
- 単体テスト RSpec : RSpec 公式サイト
Ruby on rails / API / GraphQL
- Rails API のバージョニング : Rails API のバージョニングに関する記事
- GraphQL Ruby : GraphQL Ruby 公式サイト
- GraphQL と Rails のセットアップ : Ruby on Rails で GraphQL API を設定する方法(DigitalOcean)
- GraphQL と Rails の利用 : Ruby on Rails での GraphQL 利用(Apollo ブログ)
コメント
読み込み中...