MuleSoft AnyPoint Studio で kintone をデータソースとした Customer アプリ参照APIを作成する:CData kintone MuleSoft Connector
この記事は MuleSoft Advent Calendar 2019 の9日目の記事として投稿しています。
今回この記事では、CData Software で提供しているkintone をデータソースとして、kintone の顧客管理用のアプリを抽象化したAPIを作成してみようと思います。
そもそもなぜ抽象化したAPIを作成するのか?
この記事で実際にできあがるものは、シンプルなAPI一つです。
以下のような kintone の顧客管理用アプリ(Customersとしています)を
「GET 0.0.0.0:8081/api/customers/1」のようなHTTPリクエストで取得できるようにする、というものです。
でも、kintone をご存知の方であれば、別に kintone のAPIをそのまま実行すればいいだけじゃないか? と思いませんか?
ここからは、MuleSoft のコンセプトそのものの話(詳しくはこちらもどうぞ https://qiita.com/mitch_oka/items/63d6323782c27e02fba6)となりますが、MuleSoftは単純なAPI作成のサービスではなく、企業のビジネスモデルをAPIという側面から全体整理し開発者・エンドユーザーへのエクスペリエンスを高めるためのトータルソリューションです。
それは、RDBで構成されたデータをAPI化するといった単純なものではなく、すでに企業内に存在する各種SaaSやPaaSのAPIも含めて、APIファシリティを整え、オーケストレーションし、監視・管理を行います。
おそらくそのアーキテクチャを端的にわかりやすく示しているのが、MuleSoftが推奨している以下の3レイヤーの考え方でしょう。
https://www.MuleSoft.com/resources/api/leveraging-digital-transformation-right
すべての企業データは現在様々なサービス・DB(RDB・NoSQL問わず)管理され、フロントエンドはそれらの情報単一のデータソースではなく、複合的なデータソースから、特定のビジネスシナリオを元に要求します。
そうなった時、各データソースのAPIエクスペリエンスがばらばらであっては、開発はもちろんのこと、再利用性、監視、管理の観点で大きくコストが発生します。顧客のデータを取得したいのに、取得したいデータの実体は、SalesforceとMarketoとSAPに存在していた、そしてそれら一つ一つの仕様の違うAPIリクエストロジックを書いていたら・・・、と考えると、なかなか怖いことがイメージできるのではないでしょうか。
MuleSoftはそこをまず、System APIs レイヤーとして、データモデルベースでシンプルなAPIとして調え、Process APIsレイヤーでフロントエンドの要求するAPIの処理を束ねます。
これにより、様々な媒体・チャネルから要求されるAPIのエクスペリエンスを高めようというのが、MuleSoftのコンセプトであると考えられます。
そんなMuleSoftでは、System APIs レイヤーの拡張性を高めるために、数々のコネクターを提供しています。SalesforceやBox、Marketoなど、50種類ほどの提供されています。
https://docs.MuleSoft.com/connectors/
しかしながら、例えばSendgridやSharePointを使いたい、もしくは日本国内の企業であれば kintone や Sansan に顧客情報が管理されていて、それらをデータソースとして使えないと厳しいといった場合もあると思います。
そこを、CData MuleSoft Connectors でカバーしてしまうというのが今回のお話です。
kintone Cusomter API の作り方
それでは、早速 kitnone Cusotmer APIを作ってみたいと思います。なお、必要な環境はMuleSoft AnyPoint Studioに準じます。
また、Design CenterとExchangeも使うので、予めAnypoint Platform のアカウントも用意しておいてください。
今回作成するAPIは、以下のRAMLで定義されたシンプルなAPIです。
前述の通り、以下のようなAPIリクエストを行い、URIに含まれるIDを元にして、kintone の Customer アプリを検索し、レスポンスを返します。
「GET 0.0.0.0:8081/api/customers/1」
kintone MuleSoft Connector のダウンロード・セットアップ
最初に kintone MuleSoft Connector をダウンロードします。以下のURLからトライアルがダウンロード可能となっています。
https://www.cdata.com/drivers/kintone/mule/
ZIPファイルがダウンロードできるので、任意のフォルダへ解凍してください。
トライアルライセンスはjava コマンドから実行することで、アクティベーションできます。
java -jar cdata.muleLicenseInstaller.kintone.jar
API定義の作成
次にAnypoint Platform にログインし、Design Center を使って、API定義を作成します。
「Design Center」→「Create API specification」を選択し
Code editor でCustomer APIを作成します。
「https://gist.github.com/sugimomoto/d4b9dbee5955767166ef2d55adbb6212」のRAML定義を貼り付けて、ExchangeにPublishすれば準備完了です。
AnyPoint Studio の準備
次に、AnyPoint Studioを立ち上げてプロジェクトを作成します。
ここで、API 定義をExhcnageからインポートします。
対象のAccountを追加し、Cusomter APIを検索すると、先程Exchangeに登録したAPI定義が表示されるので、これを追加します。
併せてProject内で kintone MuleSoft Connector を使えるようにセットアップします。
「Install Artifact in local repository」をクリックし
先程配置したkintone MuleSoft connector の「KintoneMuleSoftConnector\connectors」フォルダから「cdata-kintone-connector-19.0.7216-mule-plugin.jar」を参照して、インストールします。
あとはProjectの「pom.xml」を開いて、以下のXMLを追加(バージョンはHelpに記載されているものを使用してください)すれば設定完了です。
<!-- CData kintone --> <dependency> <groupId>org.cdata.connectors</groupId> <artifactId>cdata-kintone-connector</artifactId> <version>19.0.7216</version> <classifier>mule-plugin</classifier> </dependency>
うまく設定されていれば、以下のようにCData kintone MuleSoft Connectorの各モジュールがパレットに表示されます。
Cusomter APIの処理を実装する
それでは、実際にCusomter APIの内部処理を作っていきましょう。
まずは、ListnerでAPIをコールできるように設定を行います。
今回はローカルだけで試すので、ProtocolはHTTP、Hostは「0.0.0.0」、Portは「8081」を設定しました。
次に、kitnone からのデータ取得処理を記述します。パレットからCData kintone の「Select」モジュールを以下のように配置します。
Connector Configrationをクリックし、kintone への接続情報を入力します。最低限必要な情報は以下の3種類です。
- URL:kintone のURL:例 htt@s://XXXX.cybozu.com
- User:kintoneのログインユーザー
- Password:kintone のログインユーザーパスワード
入力後 Test Conection をクリックし、接続で切れいればOKです。
次に、kintone からデータを取得する部分を記述します。CData kinonte MuleSoft Connector はkinonte のAPIをRDBに仮想化し、SQLでデータの操作を可能にします。
まず、InputParameterでURLパラメータから渡ってきて、事前に変数に格納されているcustomerIdを定義します。「{"Id": vars.customerId}」
次にSQL Query のフォームでIDを元にkintone の Recordを検索するクエリ「SELECT * FROM Customers Where RecordId = :Id;」を書きます。これだけで、kintone のAPI仕様を意識することなく、データの取得処理を記述できます。
あとは、取得したデータを最終的なレスポンスのJSONにマッピングします。
Transform Messageにて、渡ってきたPayloadの最初のレコードを変数に格納し、kintoneの各カラムをマッピングします。MuleSoftが海外のプラットフォームなので若干心配だったんですが、日本語カラムも問題なく利用できるのがいいですね。
%dw 2.0 output application/json var customer = payload[0] --- { customerId: customer.RecordId, companyName: customer."会社名", customerFullName: customer."担当者名", address: customer."住所", email: customer."メールアドレス" }
それでは、APIを実行してみましょう。「Run」ボタンをクリック後、APIが実行状態になるのを待ちます。
実行されたら、PostmanやCURLなどから、HTTPリクエスト「GET 0.0.0.0:8081/api/customers/1」を投げます。
すると、以下のようにkintone からレコードを検索し、顧客情報が取得できました。番号を変えると、その番号に応じて、kintone を検索してきます。
おわりに
今回は 参照API を作成する部分を中心として行いましたが、CData MuleSoft ConnectorはINSERT・UPDATE・DELETEにも対応しているので、例えば問い合わせフォーム用のAPIを作成し、kintone へ顧客登録し、Salesforceに問い合わせ情報を入力する、みたいなことも可能になります。
ぜひ企業内の様々なAPIの構築、統合、管理に活用してみてください。