Talend StudioでAPIを開発
SOAP/REST
Qlik TECH TALK
2024年3月26日
TECH TALKとは?
Qlikの製品や機能の中から
特定のテーマを取り上げて、
技術的な情報を発信していくセミナーで
す。
• 質問はZoom画面下のQ&Aアイコンをクリックして入力してください。
• 質問に対してQlikパネラーが随時Q&Aパネルで回答します。
• 質問と回答については、セミナーの最後に他の参加者に共有させていただきま
す。
Q&Aについて
4
アジェンダ
• SOAP/REST開発概要
• SOAPサービスの開発
• REST APIの開発
• REST API向けの追加機
能
• SOAP/RESTのデプロイ
• Route(Apache Camel)
SOAP/REST開発概要
5
• Talend Data Fabricプラットフォーム製品の以下のライセンスが必要
o オンプレミス製品: Data Services PlatformまたはReal-time Big Data
o クラウド製品: Could API Services PlatformまたはCloud Data Fabric
• Talend Studioで開発してテスト実行
• Talend Runtime上にデプロイして運用
• Webサーバーには、サーブレットコンテナの「Jetty」を採用
o https://eclipse.dev/jetty/
• SOAP/RESTサービスの実装基盤には「Apache CXF」を採用
o https://cxf.apache.org/
• Talend RuntimeではOSGi(Open Services Gateway initiative)コンテナの「Apache
Karaf」を採用し、その中でサービスを運用
o https://karaf.apache.org/
6
TalendでSOAP/RESTサービスを開発・運用するには?
HTTPクライアント機能は標準のデータ統合機能で利用可能
1. Talend StudioでSOAP/RESTサービス用のジョブを開発
o SOAPは先にサービス定義(WSDL: Web Services Description Language)が必要
2. Talend Studioでローカル実行(HTTP)し、SOAP/RESTのクライアントツール等でテス
ト
3. クラウド: Talend StudioからSOAPサービスまたはRESTジョブを選択して「Publish
to Cloud」
o Talend Cloudにアーティファクト(ジョブ)がアップロードされる
o Talend Management ConsoleでTalend Runtime(Talend Remote Engine配下)にデプロイ
4. オンプレ: Talend StudioからSOAPサービスまたはRESTジョブを選択して
「Publish」
o アーティファクトリポジトリにアーティファクト(ジョブ)がアップロードされる
o Talend Administration CenterでTalend Runtime(Talend JobServer配下)にデプロイ
5. SOAP/RESTのクライアントツール等で、デプロイされたサービスを呼び出す
o HTTPまたはHTTPSで運用 7
SOAP/RESTサービスを開発・運用するまでの大まかな流れ
Talend Studioでローカル開発し、リモートのTalend Runtime上にデプロイ
SOAPサービスの開発
8
9
WSDLを作成 – 新規作成または既存のWSDLをインポート
WSDLの設計機能は、Eclipse標準のWSDL機能をそのまま利用しています
• 疑似コード: string SOAPMySQLOperation(int id){...}
o 例: string takahashi = SOAPMySQLOperation(1);
• サービス内のオペレーションを選択し、「ジョブを割り当てる」
• 新規のジョブを作成
• SOAPのオペレーションごとに、別々のジョブを開発・デプロイ
10
今回作成するSOAPの処理 – ジョブの作成と割り当て
整数を1つ受け取り、MySQLからデータを1行SELECTして、結果を文字列とし
て返す
• tESBProviderRequestで始まり、 tESBProviderResponseで終わる
11
1行SELECTして、その結果を返すフロー
SOAPリクエストからXMLを取り出し、MySQLにSELECT文を送信し、結果を
XMLで返す
• tXMLMapで、Document型内のinパラメータ(文字列)を、Javaのjava.lang.Integer
型に変換
12
1行SELECTして、その結果を返すフロー(続き)
XMLからidの値を取り出す
• 今回は簡略化のためjava.sql.PreparedStatementは不使用
13
1行SELECTして、その結果を返すフロー(続き)
tDBInputで、MySQLから1行検索する
• tXMLMapで、Javaのjava.lang.String型をDocument型内のoutパラメータ(文字列)に
変換
14
1行SELECTして、その結果を返すフロー(続き)
返信用のXMLを作成する
• tESBProviderResponseでDocument型を返信
15
1行SELECTして、その結果を返すフロー(続き)
XMLを返信する
• WSDLの取得は、 http://localhost:8090/services/[サービス名]?wsdl
o 例: http://localhost:8090/services/SOAPMySQL?wsdl
16
Talend Studioでジョブをローカル実行(HTTP)
http://localhost:8090/services/[サービス名] で待ち受け開始
• https://www.soapui.org/downloads/soapui/
• WSDLをインポートして、パラメータをセットして、SOAPのオペレーションを呼び出
す
17
SOAPサービスを呼び出してみる
超便利なSoapUI(無償版、Javaベース)や、Talend StudioのtESBConsumerを利
用する
18
SELECTの結果セットが空だった時は、エラーを返す
「Run if」トリガーで、「処理された」結果セットの行数を判定する
• Javaのif文の条件は「(Integer)globalMap.get(“tDBInput_1_NB_LINE”) == 0」
を記述
• SOAPサービスは、エラーのステータスとFaultタイトルを含んだXMLを返す
SOAPサービス実装のTips
19
• tJavaでヘッダーのリストを参照し、判定結果のフラグをglobalMapに入れて「Run if」
トリガーで分岐
20
HTTPのリクエストヘッダーを参照するには?
特別なヘッダー(例: APIKey)とその値を検出して、SOAP呼び出しの認証に利用
してみる
REST APIの開発
21
• tRESTRequestで始まり、 tRESTResponseで終わる
• MySQLから全データを取得して、結果をJSONとして返す
• 整数を1つ受け取り、MySQLからデータを1行SELECTして、結果をJSONとして返す
22
今回作成するREST APIの処理 – 「標準ジョブ」を作成
tRESTRequestを配置して、複数の種類のHTTPリクエストに応答する
• JSONを返すために、Document型を生成し、tRESTResponseに渡す
23
MySQLから全データを取得して、結果をJSONとして返す
tDBInput,tXMLMap,tRESTResponseを利用
• JSONを返すために、Document型を生成し、tRESTResponseに渡す
• 簡略化のため、java.sql.PreparedStatementは未使用
24
整数を1つ受け取り、1行SELECTして、結果をJSONとして
返す
tDBInput,tXMLMap,tRESTResponseを利用
• WADL(Web Application Description Language)の取得は
http://localhost:8090/services/[サービス名]?_wadl
o 例: http://localhost:8090/services/RESTMySQL?_wadl
25
Talend Studioでジョブをローカル実行(HTTP)
http://localhost:8090/services/[サービス名] で待ち受け開始
• https://www.soapui.org/downloads/soapui/
• REST APIのエンドポイントを設定して、各種REST APTを呼び出す
26
REST APIを呼び出してみる
超便利なSoapUI(無償版、Javaベース)や、Talend StudioのtRESTClientを利用
する
• Javaのif文の条件は「(Integer)globalMap.get(“tDBInput_1_NB_LINE”) == 0」
を記述
• REST APIは、エラーのステータスとダミーの値を含んだJSONを返す
27
SELECTの結果セットが空だった時は、エラーを返す
「Run if」トリガーで、「処理された」結果セットの行数を判定する
REST API実装のTips
28
• tJavaでヘッダーのリストを参照し、判定結果のフラグをglobalMapに入れて「Run if」
トリガーで分岐
29
HTTPのリクエストヘッダーを参照するには?
特別なヘッダー(例: APIKey)とその値を検出して、REST呼び出しの認証に利用し
てみる
REST API向けの追加機能
30
• Talend API Tester
o https://chromewebstore.google.com/detail/ndhpdjlmagefginpimmegdninnnkodgo
• Talend API Tester - Free Edition
o https://chromewebstore.google.com/detail/aejoelaoggembcahagimdiliamlcdmfm
31
Talend API Tester - REST APIの呼び出しテストが容易
Talend Cloud API Services Platformの一部で、「Chrome向けの拡張機能」
• OAS/SwaggerやRAML APIの定義をWeb画面上で設計可能
• Talend StudioでREST API定義をインポートして利用可能
o API定義の各種エクスポートも可能
32
Talend API Designer - REST APIの設計・ドキュメント化
Talend API Testerと連携するので、Chromeで利用するのが便利
• SOAP/RESTのデプロイ
33
• SOAPのサービス、RESTのジョブを選択して「Publish to Cloud」
• TMCで、そのPublishされたアーティファクトを選択して、「タスクを追加」
o アーティファクトタイプ: データサービス
o タイプ: データサービス(SOAP) / データサービス(REST)
o バイナリタイプ: Talend Runtime(Talend Remote Engine配下)
34
クラウド構成の場合
Talend Studio, Talend Management Console(TMC), Talend Runtime
• SOAPのサービス、RESTのジョブを選択して「Publish」
• TACの「ESB CONDUCTOR」で「Task」を追加(英語UIの場合)
o [Select Feature]でNEXUSからジョブを選択
o Server: JobServer(+Talend Runtime)
o Type: Service
35
オンプレミス構成の場合
Talend Studio, NEXUS, Talend Administration Center(TAC), Talend Runtime
• デフォルトでは、ポート番号8040(HTTP),9001(HTTPS)を利用してサービスを提供
• サービス一覧は以下のURLで確認
o http://[サーバー名]:8040/services/
o https://[サーバー名]:9001/services/
36
Talend Runtime – デプロイ状況の確認
動作中のサービスの一覧表示や、WSDL,WADL,エンドポイントの確認
Route(Apache Camel)
37
• Talend Data Fabricプラットフォーム製品の以下のライセンスが必要
o オンプレミス製品: Data Services PlatformまたはReal-time Big Data
o クラウド製品: Could API Services PlatformまたはCloud Data Fabric
• エンタープライズサービスバス(ESB)上で稼働するタイプのジョブ
• Talend Runtime上にデプロイ
• 「Apache Camel」を採用
o https://camel.apache.org/
o https://camel.apache.org/manual/architecture.html
• cXXXX系(例:cTimer)のコンポーネント群を利用してジョブをデザイン・実装
38
ルート(Route)とは
メッセージをサービス(またはエンドポイント)間で移動する方法を定義するルー
ル
Thank you !
39
Thank you !
40

Talend StudioでAPIを開発 - SOAP/RESTのサービス開発手法