APIコンポジションパターンは、フロントエンドや外部サービスのために異なるマイクロサービスからデータを集約する必要があるときに使用されます。これは、必要なデータを特定のサービスへの個別のリクエストで収集し、最終的なレスポンスを形成するコーディネーティング層(API Composer)を通じて実現されます。
この層は、通常、集約、変換、エラーハンドリングを提供するための独立したサービス、ゲートウェイ、またはBFF(バックエンドフォーフロントエンド)として実装されます。このようなソリューションは、冗長なネットワークコールを削減し、内部APIの変更からクライアントを隔離します。
コード例(Node.js + Express):
const axios = require('axios'); app.get('/user-details/:id', async (req, res) => { const user = await axios.get(`http://usersvc/user/${req.params.id}`); const orders = await axios.get(`http://ordersvc/orders/user/${req.params.id}`); res.json({ user: user.data, orders: orders.data }); });
重要な特徴:
常にAPIコンポジションがマイクロサービスからのデータ統合の最良の方法ですか?
いいえ、関連するエンティティが多数あり、接続が遅い場合、パフォーマンスが影響を受ける可能性があります。特定のケースでは、CQRSやデータアグリゲーターサービスを使用する方が良いです。
フロントから各マイクロサービスに直接アクセスできますか?
小規模なシステムでは可能ですが、システムが成長するにつれて、セキュリティ、スキーマの管理、スケーラビリティ、フロントの集約ロジックによる過負荷の問題が発生します。したがって、中央集約層が望ましいです。
APIコンポジションはサービス間のトランザクション整合性を提供しますか?
いいえ。このパターンは、リクエストのためのデータのみを集約します。トランザクション性は、サガやイベントメカニズムを通じて実装する必要があります。