ホームページ >ウェブフロントエンド >jsチュートリアル >GraphQLゲートウェイを構築する:dataSourceを組み合わせたり、縫いたり、マージしたりする
コアポイント
ソフトウェアエンジニアとして、私たちは皆、複数のシステムからのデータをまとめるという課題に直面しています。単一ページでも、複数のサービスからのデータをレンダリングする必要があります。
データは、CRMから金融システムまで、SaaSプラットフォームからデータベースまで、どこにでもあります。すべてのビジネスが多数のSaaSプラットフォームを購入し、それらすべての上に統一されたビジネスビューを取得することを望んでいることは避けられません。私たちはこの問題に直面し、すべてをまとめる必要があります。
GraphQLゲートウェイは、従来のAPIゲートウェイとGraphQLの利点を組み合わせています。
最初にAPIゲートウェイの利点について説明し、次にGraphQLがどのように適合するかを確認します。この記事を読み続けてください。独自のAPIゲートウェイを構築するためのフレームワークについて説明します。
APIゲートウェイの利点
ハッカーからの公共向けのAPIを保護することは、全天候型の仕事です。時間が経つにつれて、組織は、サービス指向のアーキテクチャからマイクロサービスまで、多くのAPIを作成するために進化してきました。組織は、これらのAPIをインターネット上に直接配置するのではなく、セキュリティの追加レイヤーを追加する傾向があります。これは、これらすべてのAPIよりも先にあり、データへのアクセスが常に同じ認証ルールに従うことを保証します。
これを行うためにAPIゲートウェイを使用します。
KongやApigeeなどの製品は、中央の場所から内部APIを公開します。それらは、APIキー管理、レートの制限、監視などの機能を備えたリバースプロキシとして機能します。
APIゲートウェイを使用すると、各サービスに誰と何がアクセスできるか、接続を監視し、アクセスを記録できます。
最近、アプリケーションはAPIゲートウェイと他の外部SAASプロバイダーのデータを組み合わせる必要があります。これは、古い集中化されたツール(ルールが順守されていることを確認)が定期的にバイパスされることを意味します。
会社のWebアプリケーションを構築しているとします。私たちのタスクは、ユーザープロファイルページを作成することです。ログインプロセス中に、複数のシステムからのデータを組み合わせる必要があります。
下の図に示すように、データを取得するために、クライアントは3つの個別のリクエストを発行する必要があります。
私たちはもっとうまくやることができます。理想的には、リクエストを3から1に減らしたいと考えています。これを行うための新しいサービスを作成できます。これは、バックエンドサービスのリクエストを調整するサービスです。このアイデアには名前があります:BFFモード。
バックエンド、つまり、フロントエンド(BFF)アーキテクチャモードにより、フロントエンドは単一のリクエストを発行できます。
しかし、それはどのように機能しますか?このパターンを詳しく見てみましょう。
BFFモードの利点
BFFモードを使用して、アプリケーションはAPIゲートウェイに単一の要求を送信します。 BFFサービスは、各バックエンドサービスからデータを要求し、それを組み合わせます。最後に、データがフィルタリングされ、フロントエンドで必要なデータのみが返され、それによりネットワーク上に送信されるデータの量が減少します。
上の画像に示されているように、スタックに追加のレイヤーを導入してリクエストを調整します。
しかし、私たちはまだ完了していません。
エンタープライズはモバイルアプリをリリースすることにしました。モバイルアプリにはプロファイルページもありますが、この画面ではプロファイル情報がはるかに少なくなります。
この時点で、モバイルチームには2つのオプションがあります。チームはWebチームのエンドポイントを使用できます。つまり、データをオーバーフレックすることを意味します(モバイルアプリが必要としないデータをより多く取得します)。別のオプションは、モバイルチームに独自のBFFを作成することです。
期待によると、モバイルチームは、アプリケーションに適したパフォーマンスが必要なため、独自のBFFを作成することを決定しました。
上の写真に示されているように、物事は複雑になり始めており、今では2つの新しい問題があります。
これらの問題をどのように解決しますか?
各アプリケーションが必要なデータを選択できるソリューションが必要であり、すべての会社のアプリケーションで使用される単一のAPIである必要があります。
BFFが成熟するにつれて、多くの開発者は休息の代わりにGraphQLを使用しようとし始めています。
このテクノロジーがどのように役立つか見てみましょう。
bffよりもgraphqlの利点
GraphQLには、BFFにとって理想的な技術となる多くの利点があります:
フロントエンドは、各リクエストに必要なデータのみを選択できるようになりました。
2つのアプリケーションを同じGraphQLサーバーに接続して、2番目のBFFサービスの必要性を減らすことができます。
組織内のあらゆるアプリケーションに対してBFFを共有できるようになりました。また、浸透をテストする必要がある単一のエンドポイントもあります。
しかし、別の新しい問題を導入しました! APIゲートウェイとGraphQL BFFの2つのシステムを管理する必要があります。
2つをGraphQLゲートウェイに統合した場合はどうなりますか?
次に、GraphQLゲートウェイの仕組みを見てみましょう。
graphqlゲートウェイとは何ですか?
GraphQLゲートウェイAPIゲートウェイとGraphQL APIを組み合わせて、両方のテクノロジーの最良の結果を得ます。
利点を確認しましょう:
次の画像は、ユーザープロファイルAPIがGraphQLゲートウェイで動作する方法を示しています。
上記の画像では、クライアントはGraphQLゲートウェイに単一の要求を送信し、必要なデータを要求します。ゲートウェイは、各サービスに単一の要求を発行し、結果を組み合わせます。現在、管理して展開する必要があるサービスは1つだけです。
自分で試してみる準備ができていることを願っています。次に、GraphQLゲートウェイの構築方法を見てみましょう。
GraphQl Gateway
をビルドしますゲートウェイフレームワークを選択するときは、いくつかの重要な機能を探す必要があります。
hasura
他のサーバーからのGraphQLを組み合わせた「リモートモード」に接続できます。
この方法にはいくつかの欠点があります。まず、リモートスキーマを別のサービスで作成および管理する必要があります。このサービスは、GraphQLエンドポイントでなければなりません。これにより、2番目の問題が発生します。データソースに直接接続することはできません。
さらに、Hasuraでは、別のデータソースの値に基づいて、あるデータソースでデータをフィルタリングすることはできません。これはアカデミックに聞こえるかもしれませんが、「ABC」という名前の注文を教えてください」のようなものを表現したいことがよくあります。
これは柔軟性を提供しますが、複数のサービスを実行するための犠牲を払っています。直接接続できるオプションを見てみましょう。
stepzen
stepzenをデータソースに接続するには、以下に示すようにGraphQLスキーマファイルを作成します。
この例では、カスタムモードを使用して、サーバーをデータベースに接続します。あなたが好むかもしれない別のオプションがあります。これは純粋なコードアプローチです。次に見てみましょう。
<code>type Query { anything(message: String): JSON @rest ( endpoint: "https://httpbin.org/anything" method: POST headers: [ {name: "User-Agent", value: "StepZen"} {name: "X-Api-Key", value: "12345"} ] postbody: """ { "user": { "id": "1000", "name": "The User" } } """ ) } </code>
graphweaver
過去数年間、私はGraphWeaverと呼ばれるオープンソース製品を開発しており、GraphQLゲートウェイとして使用できます。
GraphWeaverは、PostgresやMySQLなどのデータベースや、XeroやContentfulなどのSaaSプロバイダー用のデータコネクタを箱から出して提供しています。
変更またはデータソースへの接続には、タイプスクリプトコードの作成が含まれ、完全なカスタマイズを行うことができます。
独自のGraphQL APIの作成に興味がある場合は、GraphWeaver GitHubコードをチェックすることを強くお勧めします。
結論
この記事では、現在のAPIゲートウェイとBFFパターンを単一のGraphQLゲートウェイに置き換える方法を検討します。APIゲートウェイの利点と、組織がそれらを使用する理由を調べました。バージョン化、レート制限、およびアクセス管理がいくつかの理由です。
また、BFFパターンと、フロントエンドアプリケーションのAPIリクエストの調整方法についても調べました。
最後に、GraphQLとそれがBFFにとって有益な手法である理由を調べました。
一日の終わりに、これによりGraphQLゲートウェイを作成するようになり、3つのオプションを調べて、Hasura、Stepzen、および私が開発している製品のGraphWeaver製品を作成しました。この記事で、自分でgraphqlゲートウェイを使用してみてください。できればgraphweaverを試すことを検討してください。
GraphQl Gateway FAQ(FAQ)
GraphQLゲートウェイの主な目的は何ですか?
GraphQLゲートウェイは、すべてのGRAPHQL操作の単一のエントリポイントとして機能します。リクエストを対応するサービスにルーティングし、応答を集約し、クライアントに送り返す責任があります。これにより、単一の場所から複数のGraphQLパターンとサービスを管理できるため、アプリケーションがよりスケーラブルでメンテナンスが簡単になります。従来のAPIゲートウェイは、安らかなAPIを処理するように設計されており、その動作モードはGraphQLの動作モードとは異なります。一方、GraphQLゲートウェイは、GraphQL操作を処理するように特別に設計されています。複数のGraphQLパターンを1つに組み合わせることができるパターンステッチやマージなどの機能を提供します。これは、従来のAPIゲートウェイができないことです。
モードステッチは、複数のGraphQLパターンを1つに組み合わせることができるGraphQLゲートウェイの機能です。これは、複数のサービスがあり、それぞれに独自のスキーマがあり、単一のAPIとしてそれらを公開する場合に特に便利です。パターンステッチは、パターンを統合し、競合を解決し、クライアントにシームレスなエクスペリエンスを提供する責任があります。
GraphQLゲートウェイは、クライアントとサーバー間の往復の数を減らすことにより、パフォーマンスを大幅に改善できます。異なるサービスに複数のリクエストを行う代わりに、クライアントはGraphQLゲートウェイに単一のリクエストを行うだけで、リクエストを対応するサービスにルーティングし、応答を集約し、クライアントに送り返します。これにより、ネットワークの遅延が減少し、全体的なパフォーマンスが向上します。
はい、GraphQLゲートウェイは、マイクロサービスアーキテクチャに特に適しています。各マイクロサービスは独自のGraphQLパターンを持つことができ、ゲートウェイは一緒にスプライスして統一されたAPIを提供できます。これにより、クライアントに一貫したインターフェイスを提供しながら、マイクロサービスを独立して管理および拡大することができます。
GraphQLゲートウェイは言語がないため、GraphQLをサポートするプログラミング言語で使用できます。これには、JavaScript、Python、Ruby、Javaなどの一般的な言語が含まれます。
GraphQL Gatewayは、強力なエラー処理機能を提供します。サービスのいずれかでエラーが発生した場合、ゲートウェイは、どのサービスがエラーを引き起こし、どのエラーが発生したかについての情報を含む、クライアントに詳細なエラーメッセージを返します。これにより、診断と修正の問題が容易になります。
はい、GraphQLゲートウェイはサーバーレスアーキテクチャと互換性があります。 Gatewayをサーバーレス関数として展開できます。これにより、サーバーレスコンピューティングのスケーラビリティと費用対効果を活用できます。
GraphQL Gatewayは、認証と承認、レートの制限、要求の確認など、さまざまなセキュリティ機能を提供します。これらの機能は、不正アクセスや虐待からサービスを保護するのに役立ちます。
はい、既存のRESTFUL APIでGraphQLゲートウェイを使用できます。 Gatewaysは、Restful APIをGraphQLパターンでラップすることができ、既存のAPIを使用しながらGraphQLを利用できるようにします。
以上がGraphQLゲートウェイを構築する:dataSourceを組み合わせたり、縫いたり、マージしたりするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。