呼び出し数の削減
良好なインテグレーション設計では、通常、インテグレーションポイントの書き込みが行われるので、サービス間の呼び出しの数が可能な限り少なく抑えられます。Cloud API には、呼び出し元アプリケーションが一度の呼び出しで複数の要求を実行できるようにする機能が複数含まれています。このトピックでは、こうした機能の概要について説明します。
複数の要求を一度に実行する機能
Cloud API には、呼び出し元アプリケーションが一度の呼び出しで複数の要求を実行できるようにする機能がいくつかあり、それぞれコンポジット要求、要求包含、およびバッチ要求と呼ばれています。
コンポジット要求は、兄弟関係にある複数のサブ要求で構成され、親要求がない要求です。各サブ要求は、表示される順序でトランザクショナルに実行されます。データのコミットを試行する特定のサブ要求が失敗すると、コンポジット要求全体が失敗します。あるサブ要求から別のサブ要求に情報を渡すことができます。
コンポジット要求の詳細については、コンポジット要求を参照してください。
要求包含は、以下で構成される呼び出しの POST および PATCH の手法です。
- リソースを作成または変更する単一の親要求
- 親リソースに関連するリソースを作成または変更する 1 つ以上の子要求
親要求またはいずれかの子要求のどれかが失敗すると、要求全体が失敗します。
要求包含の詳細については、要求包含を参照してください。
バッチ要求は、兄弟関係にある複数のサブ要求で構成され、親要求がない要求です。各サブ要求は、表示される順序で非トランザクショナルに実行されます。特定のサブ要求が失敗した場合でも、バッチ内のその他のサブ要求が引き続き試行されます。また、あるサブ要求から別のサブ要求に情報を渡すメカニズムはありません。各サブ要求は原則として互いに独立しています。
バッチ要求の詳細については、バッチ要求を参照してください。
複数の要求を実行する機能の比較
| コンポジット要求 | 要求包含 | バッチ要求 | |
|---|---|---|---|
|
呼び出しのアーキテクチャ |
兄弟関係のサブ要求(親要求なし) | 1 つ以上の子要求がある親要求 | 兄弟関係のサブ要求(親要求なし) |
| 呼び出し先のエンドポイント | コンポジット API の /composite エンドポイント |
親オブジェクトを作成または変更するエンドポイント(すべてのエンドポイントが要求包含をサポートするとは限らない) | 関連 API の /batch エンドポイント |
| データをコミットしようとする 1 つのサブ要求が失敗した時の動作 | 要求全体が失敗 | 要求全体が失敗 | その他のサブ要求をまだ試行する可能性あり |
| サブ要求間での情報の受け渡し | 変数を使用 | refid を使用 | サポート対象外 |
| GET サブ要求の許可 | はい | いいえ | はい |
| DELETE サブ要求の許可 | はい | いいえ | はい |
ビジネスアクションの POST サブ要求(/assign など)の許可 |
はい | いいえ | はい |
| 関連のない 2 つのオブジェクトの作成または変更の許可 | はい | いいえ | はい |
使用する機能の決定
使用すべき適切な機能を判断する単純なアルゴリズムはありません。状況によっては、複数の機能を使用することが可能な場合もありますが、1 つの特定の機能を使用してコードを記述するほうが簡単です。
高度なレベルでは、通常はコンポジット要求が最も手堅い選択肢となります。使用する機能の選択肢がある場合は、コンポジット要求を使用することが最も適切で簡単な可能性があります。
以下のガイドラインも、使用すべき最適な機能の判断に役立つことがあります。
- 以下の場合には、コンポジット要求または要求包含を使用します。
- すべてのサブ要求が 1 つの単位として成功または失敗する必要がある。
- あるサブ要求から別のサブ要求に情報を渡す必要がある。
- サブ要求で、異なる API からのエンドポイントを使用する必要がある。
- 以下の場合には、コンポジット要求またはバッチ要求を使用します。
- サブ要求のうち、少なくともいくつかは GET、DELETE、またはビジネスアクションの POST である。
状況によっては、特定の手法が必要となる場合もあります。例えば、未検証の保険契約は、コンポジット要求でのみ作成できます。