Apache Camel - APIコンポーネントフレームワーク

f:id:tasato-redhat:20190314152401p:plain

Red Hatの佐藤匡剛です。

Apache CamelのAPIコンポーネントフレームワークについて紹介します。このミニフレームワークは個人的にCamelのキラーフィーチャーだと思っているんですが、日本語はおろか英語でも開発者本人のブログかRed Hat Fuseの公式ドキュメントくらいしか紹介記事がありません。

Camelを使っていても、実は知らない方が多いのではないかと思います。

そこで、以下の全四部構成(予定)でAPIコンポーネントフレームワークの使い方を紹介したいと思います。

  1. APIコンポーネントフレームワークとは何か(この記事)
  2. APIコンポーネントフレームワークを使ってみる
  3. APIコンポーネントフレームワークの高度な設定
  4. APIコンポーネントのテスト

APIコンポーネントフレームワークとは

Camelでは個々の外部システムとの連携機能を提供するモジュールをコンポーネントと呼びます。APIコンポーネントフレームワークとは、連携先の外部サービス(Twitter、LinkedIn、Salesforce、etc.)がRESTやJava SDKの形で提供するAPIを元に、コンポーネントの雛形を生成してくれるCamelの一機能です。

実際のところ、Camelがインテグレーションフレームワークとして圧倒的優位にあるのは300以上ある連携コンポーネントの数が大きいと思っていますが、APIコンポーネントフレームワークがコンポーネント開発を大幅に容易にすることでそれを支えています。Alpakkaなど、Camelと競合する魅力的なインテグレーションフレームワークもいくつかありますが、ぜひこのAPIコンポーネントフレームワークの仕組みも採用したらいいのになと思います。

なぜAPIコンポーネントフレームワークが必要か

APIコンポーネントフレームワークを使わずとも、Camelのカスタムコンポーネントを開発するのは簡単です。しかし、内製の特定用途にフォーカスしたカスタムコンポーネントならいいですが、WebサービスのAPIを網羅した高品質なコンポーネントをフルスクラッチで開発しようとすると、REST APIやSDKライブラリのクラスをCamelコンポーネントとしてラップするための膨大な繋ぎのコードを書かねばならず、大変骨が折れます。

そうした高品質のコンポーネントをたくさん提供しなければならないという、Camelコミュニティにおける開発ニーズからAPIコンポーネントフレームワークは生み出されました。現時点で、このフレームワークを使って作られている標準コンポーネントには以下のものがあります。

  • camel-as2
  • camel-box
  • camel-braintree
  • camel-fhir
  • camel-google-*
  • camel-linkedin
  • camel-olingo2
  • camel-olingo4
  • camel-twilio
  • camel-zendesk

APIコンポーネントフレームワークの仕組み

Camelのコンポーネント開発の基本は、連携対象サービスのインタフェース(API)を以下のようなエンドポイントURIに落とし込むことです。

scheme://endpoint?option1=value1&...&optionN=valueN

例えばJMSブローカであれば、myqueueという名前のキューをqueue://myqueueのようなエンドポイントで指定できます。

最近のWebサービスは、たいていAPIがRESTやJava SDKライブラリの形で提供されています。Java SDKの場合は、APIとなるクラスとメソッドをエンドポイントにマッピングすることになります。RESTの場合は、いったんWADLやSwaggerからJavaクライアントを生成し、それをJava SDKと同様にAPIとして使います。

APIコンポーネントフレームワークのエッセンスは、ビルド時のコード生成と実行時のリフレクションです。それによって、SDKのクラスとメソッドを以下のようなエンドポイントURIに自動的にマッピングします。

scheme://apiName/methodName?option1=value1&...&optionN=valueN

マッピングのカスタマイズは、プロジェクトpom.xml内のMavenプラグインの設定で行います。pom.xml内にマッピングを定義するだけで、SDKが提供する幅広い機能を網羅的にサポートすることができます。

言ってしまえば、APIコンポーネントフレームワークは3rdパーティのJava SDKをCamelのエンドポイントとしてラップして、ルートの中で呼び出せるようにする仕組み、のようなものです。

おわりに

抽象的な話はここまでで終わりです。次の記事からは、このフレームワークを使って実際にAPIコンポーネントを作ってみましょう。

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。