基本的な手順は次のとおりです。
- サービスは、他のサービスのリソースを検出する必要があります。
- 次に、サービスは、必要に応じてレンダリングするリソースへのリンクを追加します。
このリポジトリには、これらの手順の非常に初歩的な例があります。この例は、店舗の地理空間検索を提供するサービスという 2 つのサービスで構成されています。2 番目のサービスは、基本的な顧客管理であり、現在利用可能な場合は店舗サービスとオプションで統合します。
手順の実装方法は次のとおりです。
リソース発見
私の例では、消費サービス (つまり、顧客サービス) は、Spring HATEOAS のTraverson
API を使用して、という名前のリンクが見つかるまで一連のリンク関係をトラバースしますby-location
。これはStoreIntegrationで行われます。したがって、クライアント サービスが知る必要があるのは、ルート URI (私の場合は環境から取得) と一連のリンク関係だけです。-requestを使用して定期的にリンクの存在をチェックします。HEAD
もちろん、これはより洗練された方法で行うことができます。ベース URI をクライアント サービスに配線することは、最適ではないと考えられるかもしれませんが、とにかく DNS を使用している場合 (URI の背後にある実際のホストを交換できるようにするため) には、実際には非常にうまく機能します。ハードコード)。それにもかかわらず、これはまともな実用的なアプローチであり、URI を変更した場合でも他のサービスを再検出し、追加のライブラリは必要ありません。
さらに洗練されたアプローチについては、基本的にサービスレジストリであるNetflix の Eureka ライブラリをご覧ください。また、そのために用意されているSpring Cloud 統合をチェックアウトすることもできます。
リンクによるリソースの増強
Spring HATEOAS は、ResourceProcessor
Spring Data REST が活用する API を提供します。Resource
レンダリングしようとしているインスタンスを操作したり、リンクを追加したりできます。顧客サービスの実装は、ここにあります。
基本的に、上記の手順で発見されたばかりのリンクを取得し、既知のパラメーターを使用してそれを拡張するため、クライアントはリンクをたどるだけで店舗の地理検索をトリガーできます。
それ以上
Spring Cloudのサンプル プロジェクトで、この例のより洗練されたバリアントを見つけることができます。まったく同じ例を使用しますが、Eureka 統合、メトリックの収集、UI の追加などの Spring Cloud コンポーネントに切り替えます。