効率的な開発:あなたのプロジェクトは、インターフェイスのアグリゲーションサービスを提供していますか?

この記事は、最初に個人的なマイクロチャネル公共番号に登場:黒コーダ

サービススプリットの痛み

より多くの共通APIの大きさについて議論学生の前端と後端との間のサービスの分割後:

「2人の学生にフロントエンドインターフェースは、リスト上のデータではないで重合を要求?」バックエンドの学生は、アセンブリデータ処理は、フロントエンドの学生が完了したいと考えている、唯一の基本的なAPIのビジネス・サービス機能を提供します。

学生はフロントページのレンダリングのための唯一の責任たい「要求は、ページのレンダリングのための唯一の責任になると、バックエンドでの重合は、フロントエンドは!少なくすることができる」、およびH5、APP、第三端に発生する可能性が論理的な集約と小さなプログラム、バックエンドの集約のみ必要一回。

インターフェイスの集約サービスは、ソリューションの私たちの考えです。

インターフェイス何アグリゲーションサービス?

集約サービス・インターフェースインターフェースのヘルプ学生重合複数のすぐ遠位、ポーターであるデータを返すと、重合後に使い捨てそれぞれの要求元のクライアントに結果を返します私たちは、この中間層のアグリゲーションサービスインタフェースを介して、そのデータは、フロントへの直接アクセスを許可することができることをことを願っていますが、バックエンドは、基本的なサービスを提供するために、APIサービス機能の分野に集中し続けることができます。

シーン解析

  • シーンワン:シリアル・データ収集。関係関連する複数のリクエスト。
    • 例えば:レビュー項目IDを介して情報を取得するために、ユーザは、UIDの見直しを介して情報を取得します
  • シーン2:パラレルデータ収集。複数のリクエスト、関連がありません。
    • たとえば、次のように情報を購入した現在のユーザーを取得するには、商品活動は、情報を得るために、アイテムIDによって製品情報を入手

研究プログラム

プログラム オプションB
呼び出し側 クライアント クライアント
API-サーバー 自習 GraphQL
ペイロード 約束 GraphQL
応答 約束 GraphQL
フォールトトレランス 約束 約束
ダイナミックフィールドを選択してください それはあります それはあります

私たちは、簡単な自己開発の界面重合中間層によってこの問題を解決するために、プログラムAを選択しました。

API-アグリゲータ:したがって、インタフェース集約サービスがあります。フレームには、次の特性があります。

  • カーネルのコードの1000行程度軽量な実装

  • 既存のコードのための非侵襲的には、既存のインタフェースを直接使用することができ、既存のサービスとのコードの変換に適応する必要はありません。

  • 各重合段階においてApiAggregatePostProcessor拡張インターフェース介入ポイントを提供する拡張性と強いです

  • フレンドリーなフロントエンド、学生の前端部は、戻りデータ構造、動的な選択フィールドのサポートをカスタマイズすることができます。

  • 集約論理インターフェイスは、コンフィギュレーション・ファイルとAPI-アグリゲータを通じて直接通信解放せずに統合インターフェースを追加します

API-アグリゲータ:集約サービスインタフェース

火アグリゲータ

インターフェイスとインターフェイスとの間のアグリゲーションロジックのメタ情報:API-アグリゲータ重合性界面の重合は、設計に、我々は、2つの部分に分割され、インターフェースによって得られた結果の数によって返されるべきです。

ApiDefinition:インタフェースメタ情報

ApiDefinitionの定義だけでなく、メタ情報インターフェース、インターフェースは、必要なパラメータのソースを記載しています。

重合のインターフェイス、メタ情報パラメータ・インタフェースは、以下のソースの一部を有していてもよいAPI-アグリゲータ:

  1. 上に直接取得パラメータにすなわちのHttpRequestから、クライアントによって送信されます。
  2. インタフェースの戻り値から得ました。例えば:レビュー項目ID、UIDのコメントが取得したユーザ情報を介して情報を取得します。このuidのパラメータでは、インターフェイスからの戻り値を取得する必要があります。

ResponseDefinition:アグリゲーションロジック間のインタフェース

ResponseDefinitionアグリゲーションロジックとの間のインターフェースは、カスタムデータがインターフェース構造ResponseDefinition遠位学生によって返される可能性が記載されており、必要なフィールドを動的に選択することができます。

説明インターフェイスの集約関係

ResponseDefinitionない場合、API-アグリゲータは、データの単に同じレベル(左側に示すように)2つのインタフェースを凝集することができます。さて、構造がResponseDefinitionで(右図のように)より良い経験を開発するために、学生の前端に、返すように定義することができます。

シンプルなデザインの話

プロフィールプリロード

インターフェイス集約コンフィギュレーション情報は、フロントエンド開発管理の背景の学生で構成されています。

設定ファイルの提出後の学生のフロントエンドは、API-アグリゲータは、設定ファイルにいくつかの静的解析を行います。分析は、循環依存関係に問題があるかどうかを、ケース・インタフェースを依存しています。

関連する構成情報の解析が良いです後、パフォーマンス、API-アグリゲータを向上させるために、それが直接、同時に、設定ファイルと繰り返し解析を削減し、データを定期的に更新することを確認するために、MQのパブリッシュ/サブスクライブを取得するために、メモリにキャッシュされます一貫性。

単純化したモデルhttpリクエスト

HttpMethodInvoker

API-アグリゲータ抽象HttpMethodInvokerは、HTTP要求を開始します。サプライヤーによって得られた戻り結果は、httpクライアント間のAPIマスクの違い。

以前にそれを言及したシーンを覚えていますか?

シーンワン:シリアル・データ収集。関係関連する複数のリクエスト。

シーン2:パラレルデータ収集。複数のリクエスト、関連がありません。

API-アグリゲータでは、2つのシーンは、団結を簡略化しています。

まず、構成ファイル依存関係解析インタフェースを解析API-アグリゲータは、インターフェースが順次インタフェース定義ファイルに従って、この注文要求に配置するのではなく、考え状況依存API-アグリゲータ最適HTTPリクエストのプロセスに従って説明します。

例えば:

重合インタフェースを仮定、Aは、B、C、及びBは、データインターフェースポートA、ポートAからの取得パラメータのインターフェイスCよいのHttpRequestのリクエストパラメータに依存しているリクエスト接続する必要があります。

次に、実際の重合プロセスのインターフェイスは、API-アグリゲータは、次に、ブロッキング取得インターフェイスはB.インターフェース最後の要求の結果を第1のAインタフェース要求及びインターフェースC戻ります

拡張ポイントを提供

API-アグリゲータは、将来の拡張を容易にするためのApiAggregatePostProcessorを提供します。

ApiAggregatePostProcessorにより、API-アグリゲーターのような、インターフェースの全体介入集合を処理することができる:情報キャッシュインターフェース、ログなどを監視増加。

ApiAggregatePostProcessor

ApiAggregatePostProcessorて重合プロセスインターフェースに干渉することは可能ですが、新しいプロセッサを追加したいとき、まだ再起動API-アグリゲータに必要ながら。インタフェース集約点としてAPI-アグリゲータとトラフィックと同様ゲートウェイ濃縮点であり、その後のバージョンでは、動的開口をサポートするために、Groovyのスクリプトを導入し、プロセッサを無効にすることを検討してもよいです。

最後に、議論するコメント欄にメッセージを残すことを歓迎し、~~お読みいただきありがとうございました


パブリックには個人的な歓迎の注意ありません:

コーダ黒

おすすめ

転載: juejin.im/post/5e094adff265da33c90b5804