API は、システム構築の第一級の要素であり、まったく異なるシステムと機能が相互に作用し、データを共有できるようにします。 API を構築して利用するための多数のツール、要件、およびプロトコルは、API テクノロジとして知られています。 それらは、JSON や XML を連想させるプロトコル仕様またはアーキテクチャ、セキュリティ プロトコル、およびデータ コーデックを網羅する予定です。 . それにもかかわらず、REST が満足しない多くの珍しい部分を含む、GraphQL として識別される、好まれている静かな別のものが出てきました。 これらには、クライアントが必要な特定のデータから最も簡単にデータを検索し、単一の検索データでわずかなリソースしか要求しないようにすることが含まれます.
ほとんどの場合、REST と GraphQL の間の選択は、特定の必要性に依存します。あなたのプロジェクトの。 REST は、簡単で適切に文書化された API を熱望していますが、GraphQL は複雑で進化する API に適しています。
ここにリストされています。 REST と GraphQL の両方の基本原則を掘り下げ、それぞれの長所と短所を評価して、それぞれをいつ利用するかを決定するのを待つことができます
REST (または RESTful) アーキテクチャ。
REST API は何のために成熟していますか?
REST API は、通信とデータの代替を可能にするために成熟しています。まったく異なるシステムシステムと機能の間。 REST API は、関数が HTTP プロトコルを利用して通信を維持するための洗練された方法を提供します。 REST は、REST アーキテクチャの原則によって特定された、上昇中のインターネット企業や製品にさまざまなソリューションを提供します。
- ステートレス プロトコルの利用 (ほとんどの場合 HTTP)
- スキーマ
- Resolvers
スキーマは、システム内の手持ちデータのタイプを定義し、ほとんどの場合、それらの間の関係を示します。 GraphQL Schema Definition Language (SDL) で記述されたケース。 また、サーバーが提供できるデータを構築するデータも定義します。これは、クエリとミューテーションを構築して、そのデータへのエントリを取得するために組み立てる可能性があるためです。
リゾルバーは、 GraphQL デマンドの実行。 彼らは、対応するフィールドのデータを取得する責任があります.
ショッパー
パトロンの面では、あなたもおそらく利用するかもしれませんGraphQL コンシューマ ライブラリ は、GraphQL サーバーとのやり取りを喜ばせます。 GraphQL コンシューマー ライブラリは、GraphQL リクエストを作成し、応答を解析する手法を簡素化します。
REST と GraphQL を利用する場合
REST と GraphQL の間の適応を理解したところで、いくつかの使用例を検討してみましょう。おそらくどちらか一方を反対に解決することもできます。
REST を解決する場合
REST は中断を簡単にプロットできるため、従来の達成、学習、更新、および削除 (CRUD) 操作を最も簡単に必要とする単純な API および関数を構築する場合に有利なオプションになります。 APIが複雑なクエリを必要としない場合、GraphQLの特異性は主なものではありません.
RESTはほとんど次の解決策です。 RESTful API は、サーバーがデータをより早くメソッド アシストできるようにする、あまり高度ではなく予測可能なデータ構築を好む傾向があります。 この場合、少数のリクエストを行うだけで済みます。データのチャンクが小さいほど、処理やアクティビティが難しくないからです。 その間、GraphQL を利用して複雑なクエリを送信すると、サーバーの応答時間が遅くなる可能性があります。は、複雑なデータのフェッチと操作を必要とする API の構築に適した、非常に用途の広いオプションです。 データのオーバーフェッチとアンダーフェッチを巧みに回避することで、帯域幅の使用量を減らし、レスポンス インスタンスを高速化します。 RESTful API は、少数の HTTP リクエストをアセンブルするだけで満足しますが、GraphQL では、クライアントが単一の要求を送信して、単一の JSON オブジェクトとして少数のソースからデータを取得することを許可します
もう 1 つの正直で適切なことGraphQL の使用に関しては、サーバー ファセット上のデータ ガジェットまたは企業や製品が変更されたときに、リクエストを交換したり、エンドポイントを変更したりすることに満足していないことです。 データ間の次の配置を考えて、同じ構造で同じデータ フィールドを受け取り続ける可能性があります。 nd サーバー データと改善された開発者の旅.
では、どちらを利用するのもよいのでしょうか?
破棄では、
- さまざまなデータの必要性を伴う複雑で進化する API に直面した場合は、GraphQL を実行してください。クライアントは、最も簡単に必要なデータからデータを検索し、1 回の検索データでわずかなリソースしか要求しません。
- 必要に応じて GraphQL を実行します。正確な時間の更新とジャストグレイン アシストはデータ フェッチを監視しますが、REST API は 1 回またはバッチのデータ処理に適しています。
- 直接的で適切に文書化された API を使用する場合は、REST を使用してください。データの必要性はかなりマウントされており、複雑ではありません。
- スナッチインGraphQL はさらなる柔軟性を提供しますが、ネットワークの使用とパフォーマンスのオーバーヘッドを改善する可能性があるため、柔軟性とパフォーマンスの間の変化を物語っていますが、REST AP はパフォーマンスは向上しますが、汎用性は低くなります。
GraphQL は、特定の複雑なデータの必要性を特定できる汎用性の高いデマンド言語です。昔ながらの REST API よりも詳細に、問題なく使用できます。 それにもかかわらず、最も簡単に構築している API が従来の CRUD 操作と単純なクエリを必要とする場合、完全な RESTful API は非常に簡単で効率的なソリューションです
寛大な違いは、特定の欲求によって異なります
Airplane を利用して REST リクエストを送信し、GraphQL API で固定する
Airplane は、アメリカとワークフローを構築するための開発者プラットフォームです。 Airplane を利用すると、スクリプト、クエリ、API を共有可能な関数にすることもできます
Airplane を使用すると、GraphQL API との接続と REST リクエストの送信が簡単になります。 Airplane の REST タスクを使用すると、既存の API を利用したり利用したりして、Airplane がそれらのインターフェイスとして機能することを喜んでいるかもしれません。
𝚆𝚊𝚝𝚌𝚑 𝙽𝙾𝚆 📺
GET、POST、PUT、および DELETE を連想させる上品な HTTP ソリューションの利用
In REST アーキテクチャでは、有用な各リソースは一般的ではない URI によって識別され、スタイリッシュな HTTP ソリューションを利用してさらにアクセスすることもできます.
REST は、2000 年に Roy Fielding によって一部として最初に提供されました。彼の 博士論文 と mercurial は、その単純で用途の広い性質のためにスタイリッシュになりました。 また、現在のインターネット インフラストラクチャを活用し、洗練された HTTP コンシューマ ライブラリを利用して簡単に対話できるようにしました。プラットフォーム、ソーシャル メディア ネットワーク、悲鳴管理システム、細胞機能。 それらは、おそらくプラットフォームに依存する可能性が高いAPIをビルダーが達成できるようにするため、まったく異なるプログラミング言語とテクノロジーを利用して構築された機能を統合することも考えられるでしょう.
一部REST API のスタイリッシュな利用例には、遠く離れたサーバーからのデータの取得、サーバー上のデータの更新、静かなデータの上昇、サーバーからのデータの削除が含まれます。 ほとんどの場合、REST API は洗練されたインターネット機能のバックエンドに活力を与えるまで成熟しており、React、Angular、または Vue を好む消費者側のフレームワークやライブラリとの対応を維持できます。
全体として、REST API はスタイリッシュなシステム構築に欠かせない機能を果たし、通信を維持し、シームレスにデータを共有する機能を可能にし、スケーラブルで拡張可能なインターネット機能を構築するためのインスピレーションを提供します。 彼らは、次の課題でメソッドを組み立てます.
REST API の課題
で作業するときのいくつかのスタイリッシュな課題REST API には、データのオーバーフェッチまたはアンダーフェッチの可能性が含まれており、サーバーとコンシューマー ファセットの余分な負荷を軽減します。 次のセクションでは、これらの 2 つの点について詳しく説明します。
オーバーフェッチ
オーバーフェッチは、消費者は、要求した特定のサブセットを超えて無意味なデータを受け取ります。これは、サーバーと消費者の両方の側面でポイントをつぶやきます。サーバーが成熟していないデータを返し、パトロンが不要なデータを受け取る.
オーバーフェッチがどのように発生するかを説明するために、例を見てみましょう.
消費者向けユーティリティのユーザー プロファイル インターネット ページを作成していることを思い出してください。ユーザー データを取得するための /users/:identification エンドポイントをご利用ください。 最も簡単なのは、ユーザーの名前とアドレスです。 このデータを取得するには、おそらく次のような HTTP GET 検索データを組み立てます:
GET https://example .com/users/1
サーバーは、ほとんどの場合、応答の本文でデータを返します。 JSON または XML 構造:
この応答は、アクティビティで希望する名前とアドレスを提供しますが、年齢、電子メール、電話番号、職業、状況、created_at を連想させる追加データも含まれています。
オーバーフェッチは、昇格された機能を使用してさらに認識可能なシナリオになり、プットはより大きなスケールで数回のインスタンスで発生します。 無意味なデータの大部分を処理するためにリソースを浪費することは、消費者向けユーティリティのパフォーマンスに最高の影響を与えることに満足しているようです. 違いとして、下位フェッチでは、メイン データを取得するために、サーバーに対して無限の追加要求を行う必要があります。 これは fetch 22 の状況で、API エンドポイントが消費者の検索データを満たす十分なデータを提供しないため、利用者が追加のリクエストを集めたいと思うようになります。 これは、ネットワーク使用率の上昇、余分な遅延、およびパフォーマンスの低下に大きな影響を与える立場にあります. 例として、API エンドポイントが 1 人のユーザーの名前と電子メールをメソッド支援するように設計されているが、利用者がユーザーのアドレスも必要としている場合、そのデータを取得するために別の API 検索データが必要になる可能性があります。
前の例に戻って、ユーザーの名前と住所が欲しいことに加えて、友達のデータの記録も欲しいということを解決しましょう。 手元にある /user/:identification エンドポイントに引き続き満足していますが、間違いなく次のエンドポイントを最も簡単に返すように改善されています:
chums フィールドには、chums としてマークされたユーザー ID のレコードが含まれています。固有のペイロードでのユーザーの。 オブジェクトのレコードの代わりとしてフィールド内の ID のチェックリストを返すことは、ネットワークを介して送信されるデータの量に見合う価値があります。 それにもかかわらず、各バディの名前と住所が欲しいという話では、このデータをフェッチする次の個別のリクエストを喜んで組み立てることができます:
フェッチの過剰と不足の両方がパフォーマンス ポイントと無意味なネットワークの使用により、過剰または不十分なデータを返さずに必要なデータを作成するために、API エンドポイントを綿密に組み立てる必要があります。 これらのポイントを処理する 1 つの方法は、GraphQL を利用することです。これにより、クライアントは、必要なデータを最も簡単なデータから検索し、オーバーフェッチまたはアンダーフェッチを避けることができます
GraphQL の成熟度は?
GraphQL は、汎用性が高く、効率的で、堅牢な API を構築するための要件言語です。 2012 年に Facebook によって最初に開発され、その後 2015 年にアップソースされて以来、開発者コミュニティで大きな注目を集めています
GraphQL では、パトロンは必要なGraphQLデマンド言語の活用から検索データを作成してデータを取得します。 これらのリクエストには、リクエストされたデータの形式を概説する一連のフィールドが含まれており、それぞれに一連のプライベートなサブフィールドが含まれています。 次にサーバーは、要求の形式に一致する JSON オブジェクトを使用して検索データに応答します。
次のセクションでは、GraphQL の助けを借りて、他のいくつかのコアコンセプトに焦点を当てます。
クエリ
GraphQLでは、クエリを利用してサーバーからデータを取得します。 これらは、希望するデータを指定することを可能にし、ほとんどの場合、最も学習しやすい操作に対して成熟しています.
特定のユーザーからデータを検索するために GraphQL デマンドをうまく利用する方法の例を次に示します。 object:
この要求は、ユーザー オブジェクトの ID、名前、およびアドレス フィールドを要求し、要求されたユーザーの ID が 1 であることを指定します。
以前のものを購入する名前と住所とともに、特定のユーザーの友達の記録を照会する例。 GraphQL を利用すると、クエリ対象の各バディ オブジェクトの下で探索している特定のデータからデータを検索することもできます:
RESTful API のように、少数のエンドポイントに分散して少数のリクエストを送信する代わりに、単一の検索データから目的のデータ全体を取得するのは面倒です
MutationsMutations
Mutation を利用して、サーバー データの調整を組み立てることができます。ほとんどの場合、実行、更新、および削除操作に使用できます。 以下は、GraphQL ミューテーションをうまく利用してクワイエット ユーザー オブジェクトを実現する方法の例です:
ミューテーションは、名前とアドレスを備えたクワイエット ユーザー オブジェクトを作成し、ID、名前、および作成されたユーザー オブジェクトのアドレス フィールド。
Server
サーバー ファセットでは、ほとんどの場合、GraphQL アーキテクチャには 2 つの重要な部分が含まれます。
Mutations
Mutation を利用して、サーバー データの調整を組み立てることができます。ほとんどの場合、実行、更新、および削除操作に使用できます。 以下は、GraphQL ミューテーションをうまく利用してクワイエット ユーザー オブジェクトを実現する方法の例です:
ミューテーションは、名前とアドレスを備えたクワイエット ユーザー オブジェクトを作成し、ID、名前、および作成されたユーザー オブジェクトのアドレス フィールド。
Server
サーバー ファセットでは、ほとんどの場合、GraphQL アーキテクチャには 2 つの重要な部分が含まれます。