ホームページ > ウェブフロントエンド > jsチュートリアル > REST から GraphQL へ: 切り替えた理由と方法

REST から GraphQL へ: 切り替えた理由と方法

Susan Sarandon
リリース: 2024-12-31 20:48:14
オリジナル
954 人が閲覧しました

REST API の構築に 4 年間の経験を持つソフトウェア エンジニアとして、私は REST がもたらすシンプルさと信頼性を常に高く評価してきました。エンドポイントの設計であっても、応答の構造化であっても、REST は私にとって頼りになるソリューションでした。

しかし、今年初めにすべてが変わりました。私は、大規模で複雑で相互に関連するデータ ソースの処理を必要とするプロジェクトに取り組むことになりました。これは単にユーザーのリストを取得したり、単一のレコードを更新したりするだけではなく、柔軟性、精度、およびREST では実現できなかった規模での効率性を実現します。

GraphQL と入力します。 ?

最初は半信半疑でした。なぜ壊れていないものを直すのでしょうか?しかし、さらに深く掘り下げていくと、GraphQL はプロジェクトのニーズを満たすだけでなく、API についての私の考え方を再定義しました。その能力は次のとおりです:

  • クライアントによって定義された柔軟な構造でデータを返します。
  • 単一の URL エンドポイント を通じて動作します。
  • 厳密に型指定されたスキーマに基づいて無効なリクエストを拒否し、および
  • 相互に理解される所定の形式でデータを配信します。

GraphQL はすぐにソリューション以上のものになり、私の API 設計の新しい標準になりました。

とはいえ、この記事の目的はGraphQL を支持して REST API の信用を傷つけることではありません。実際、この 2 つは互いに美しく補完し合うことができると私は信じています。私のプロジェクトでは、REST が依然として重要な役割を果たしています。特に、専用の REST エンドポイントが GraphQL クエリより実用的である特定のユースケースでは重要です。

この記事では、次のことを共有します。

  1. 私が REST から GraphQL に切り替えた理由
  2. 私が直接経験したメリット、そして
  3. 最初の GraphQL サーバーの構築に役立つ簡単なガイド

GraphQL に興味がある初心者でも、移行を検討している経験豊富なエンジニアでも、この記事では、GraphQL が注目に値する理由と、REST を完全に置き換えることなく GraphQL がプロジェクトをどのように変革できるかを説明します。

REST から GraphQL への私の旅

何年もの間、REST API は私の糧でした。私は堅牢なシステムの構築、データの管理、機能の提供を彼らに依存していました。しかし、プロジェクトが複雑になるにつれて、亀裂が目立ち始めました。
From REST to GraphQL: Why and How I Made the Switch

REST API の課題

繰り返し発生したフラストレーションの 1 つは、データのオーバーフェッチとアンダーフェッチでした。必要のない情報が多すぎるか、すべてを取得するために複数のリクエストを行う必要がありました。多数のエンドポイントを管理すると複雑さが増し、更新とメンテナンスが面倒な作業になります。

GraphQL の発見

今年の初め、私は 相互接続された大規模なデータ ソースを操作する必要があるプロジェクトに参加しました。 REST では対応できず、チームは GraphQL を提案しました。最初は懐疑的でしたが、単一のエンドポイントから必要なものを正確にクエリできるという約束に興味をそそられました。

GraphQL の第一印象

GraphQL を使い始めるには、課題がなかったわけではありません。スキーマとリゾルバーは難しく感じられましたが、スキーマとリゾルバーが提供する柔軟性と制御により、努力する価値がありました。時間が経つにつれて、REST で直面した問題点がいかにシームレスに解決されるかに気づきました。

私は今でも特定のケースでは REST を使用していますが、GraphQL は複雑で動的なデータ要件に取り組むための私の推奨ツールとなっています。

From REST to GraphQL: Why and How I Made the Switch

切り替えた理由

GraphQL をさらに深く掘り下げると、いくつかの重要な利点が際立ち、移行が簡単になることがわかりました。

  • 柔軟性: GraphQL を使用すると、必要なデータを正確に取得できます。それ以上でもそれ以下でもありません。複数のエンドポイントをやりくりしたり、オーバーフェッチに対処したりする必要はもうありません。
  • 効率: 単一のクエリで複数の REST API 呼び出しを置き換えることができ、パフォーマンスが大幅に向上します。これは、複雑で相互に関連するデータを扱うアプリケーションに特に影響を与えました。
  • 開発者エクスペリエンス: 強く型付けされたスキーマ、イントロスペクション、および優れたデバッグ ツールにより、開発がよりスムーズになり、エラーが発生しにくくなりました。
  • エコシステムとコミュニティのサポート: Apollo Client や GraphQL などのツールによりエクスペリエンスが強化され、GraphQL の学習とワークフローへの統合が容易になりました。

私がどのようにして切り替えたのか

この旅には課題がなかったわけではありませんが、それをステップに分割することで移行を管理しやすくしました。

ステップ 1: GraphQL の基本を理解する

私は中心となる概念を学ぶことから始めました:

  • クエリ を実行してデータを取得します。
  • データを変更するための Mutation
  • リゾルバー は、スキーマ定義を実際のデータ ソースに接続します。

この基本的な理解が、最初の GraphQL サーバーを構築する鍵となりました。

ステップ 2: 最初の GraphQL サーバーを構築する

実践するために、Node.js と Apollo Server を使用して簡単なサーバーを構築しました。プロセスは次のようになります:

  1. Node.js プロジェクトをセットアップします: npm init を使用してプロジェクトを初期化し、重要な依存関係を追加しました。
  2. GraphQL の依存関係をインストールします: apollo-server とgraphql をインストールしました。
  3. 基本的なスキーマとリゾルバーを作成します: データを記述するスキーマを定義し、それをフェッチするリゾルバーを作成しました。
  4. サーバーを実行します: サーバーを起動し、GraphQL を使用してクエリをテストしました。

初めてそれが機能するのを見たときは爽快でしたか?努力する価値があると感じました。

ステップ 3: 既存の REST API の移行

次のステップは、GraphQL を既存の REST ベースのプロジェクトに統合することでした。私は段階的なアプローチに従いました:

  1. GraphQL クエリまたはミューテーションに置き換える主要な REST エンドポイントを特定しました。
  2. 対応する GraphQL スキーマとリゾルバーを構築しました。
  3. 安定性を確保するために、移行中は GraphQL と並行して REST エンドポイントを維持しました。

このハイブリッド アプローチにより、既存の機能を中断することなく GraphQL を段階的に展開することができました。

クイック スターター ガイド: 最初の GraphQL サーバーを構築する

GraphQL を使い始めるのは、思っているよりも簡単です。 Node.js と Apollo Server を使用して基本的なサーバーをセットアップするためのクイックガイドは次のとおりです:

ステップ 1: 依存関係をインストールする

まず、Node.js プロジェクトを初期化し、必要なパッケージをインストールします。

npm init -y  
npm install apollo-server graphql  
ログイン後にコピー

ステップ 2: スキーマとリゾルバーを定義する

index.js というファイルを作成し、次のコードを追加します。

const { ApolloServer, gql } = require('apollo-server');  

// Simulated user data  
const users = [  
  { id: '1', name: 'John Doe', email: 'john@example.com' },  
  { id: '2', name: 'Jane Smith', email: 'jane@example.com' },  
  { id: '3', name: 'Alice Johnson', email: 'alice@example.com' },  
];  

// Define schema  
const typeDefs = gql`  
  type User {  
    id: ID  
    name: String  
    email: String  
  }  

  type Query {  
    users: [User]  
    user(id: ID!): User  
  }  
`;  

// Define resolvers  
const resolvers = {  
  Query: {  
    users: () => users,  
    user: (_, { id }) => users.find((user) => user.id === id),  
  },  
};  

// Create server  
const server = new ApolloServer({ typeDefs, resolvers });  

// Start server  
server.listen().then(({ url }) => {  
  console.log(`? Server ready at ${url}`);  
});  
ログイン後にコピー

ステップ 3: サーバーを実行してテストする

次のコマンドでサーバーを起動します:

node index.js  
ログイン後にコピー

ブラウザまたは GraphQL などのツールで指定された URL を開き、クエリをテストします。

すべてのユーザーをクエリ:

query {  
  users {  
    id  
    name  
    email  
  }  
}  
ログイン後にコピー

ID による単一ユーザーのクエリ:

query {  
  user(id: "1") {  
    name  
    email  
  }  
}  
ログイン後にコピー

From REST to GraphQL: Why and How I Made the Switch
おめでとう??最初の GraphQL サーバーが構築されました。

学んだ教訓

GraphQL に切り替えることで、貴重な教訓を得ることができました:

うまくいったこと

  • この移行により、データ取得効率が大幅に向上しました。フェッチ不足やフェッチしすぎはもう必要ありません。
  • 厳密に型指定されたスキーマにより、実行時エラーが減少し、デバッグが容易になりました。
  • エコシステムのツール (Apollo クライアントなど) により、開発者の生産性が向上しました。

私だったら違うことをしたい

  • 徐々に学習: 私は頭から飛び込みましたが、圧倒されました。段階的なアプローチを採用し、最初にクエリとミューテーションに焦点を当てた方がスムーズだったでしょう。
  • 小規模から始める: ワークフローの雰囲気をつかむために、単一の REST エンドポイントを GraphQL に置き換えることから始めます。

他の人へのアドバイス

  • REST を完全に放棄しないでください: REST と GraphQL は共存できます。単純な操作には REST を使用し、複雑で相互に関連するデータのニーズには GraphQL を使用します。
  • コミュニティを活用する: GraphQL には、活発なコミュニティと優れたリソースがあります。ためらわずに助けを求めたり、他の人の経験から学んだりしてください。

GraphQL への移行は、ツールを変更するだけではなく、データの操作方法を再考することでもあります。小さなことから始めて実験し、旅を楽しんでください。

REST と GraphQL: 簡単な比較

REST と GraphQL のどちらを選択するかを決定する場合、主な違いを理解することで、プロジェクトに適切な選択を行うことができます。簡単な内訳は次のとおりです:

機能 REST API GraphQL
Feature REST API GraphQL
Data Fetching Fixed data structure for endpoints; can lead to over-fetching or under-fetching. Flexible queries; fetch exactly what you need.
Endpoint Management Multiple endpoints for different resources. Single endpoint for all queries and mutations.
Flexibility Limited flexibility; requires custom endpoints for specific data needs. Highly flexible; client defines data requirements.
Type Safety Relies on documentation; no built-in type enforcement. Strongly-typed schema ensures predictable data.
Error Handling Custom error formats; inconsistent across APIs. Standardized error responses from schema validation.
Tooling Varied and often endpoint-specific tools. Rich ecosystem with tools like Apollo, GraphQL, and Relay.
データの取得 エンドポイントの固定データ構造。オーバーフェッチまたはアンダーフェッチが発生する可能性があります。 柔軟なクエリ。必要なものを正確に取得します。 エンドポイント管理 さまざまなリソースに対する複数のエンドポイント。 すべてのクエリとミューテーションに対する単一のエンドポイント。 柔軟性 柔軟性が限られている。特定のデータのニーズに対応するにはカスタム エンドポイントが必要です。 柔軟性が高い。クライアントはデータ要件を定義します。 タイプ セーフティ ドキュメントに依存します。組み込み型の強制はありません。 厳密に型指定されたスキーマにより、予測可能なデータが保証されます。 エラー処理 カスタム エラー形式。 API 間で一貫性がありません。 スキーマ検証からの標準化されたエラー応答。 ツール さまざまな、多くの場合エンドポイント固有のツール。 Apollo、GraphQL、Relay などのツールを備えた豊富なエコシステム。 テーブル>

REST API は信頼性が高く広くサポートされていますが、GraphQL は複雑で相互に関連するデータと柔軟性を必要とするシナリオで威力を発揮します。
前回の記事で違いをさらに詳しく説明します

結論

REST から GraphQL への移行は、私にとって大きな変化でした。柔軟性、効率性、開発者エクスペリエンスの向上により、私のプロジェクトはより堅牢でスケーラブルになりました。そうは言っても、私は REST API と GraphQL が共存可能であり、さまざまなユースケースに合わせて相互に補完できると強く信じています。

移行を検討している場合は、小規模から始めて実験し、徐々に GraphQL をスタックに統合することをお勧めします。これは踏み出す価値のある旅であり、あなたがどのようにしてそれを自分のものにするかを見るのが楽しみです。

始めるためのリソース

GraphQL を詳しく学ぶのに役立つツールとガイドをいくつか紹介します。

  • GraphQL ドキュメント
  • Apollo サーバーガイド
  • GraphQL プレイグラウンド

From REST to GraphQL: Why and How I Made the Switch

ここで寝ますか?
REST から GraphQL に移行しましたか、それとも移行を検討していますか?その過程でどのような課題や成功を経験しましたか?ご意見、ご質問、経験などを以下のコメント欄でお気軽に共有してください。一緒に学び、成長していきましょう! ?

以上がREST から GraphQL へ: 切り替えた理由と方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート