DataSpider Servista 3.1 Service Pack 1 新機能「REST アダプタ」のご紹介

Avatar
dstn


皆さまこんにちは。アプレッソ開発部の佐々木です。

今回は、2013年12月にリリースされたDataSpider Servista 3.1 Service Pack 1 に同梱されている「REST アダプタ」についてのご紹介です。
 

REST アダプタとは


REST アダプタとは、その名の通りREST APIに接続するための汎用的なアダプタですが、それだけではなく、HTTPでデータをやり取りするために必要な機能を多く実装しています。DataSpiderの既存アダプタでは、同じく汎用的にHTTPでデータをやり取りするWebアダプタがありますが、REST アダプタはWebアダプタの進化版といっても過言ではないでしょう。

REST アダプタの主な機能は以下の通りです。

  • HTTPメソッドのGET、POST、PUT、DELETE の実行 
  • 各種フォーマットのデータの送受信 
  • リクエストヘッダの指定、レスポンスヘッダの取得 
  • ベーシック認証、ダイジェスト認証、WSSE認証の対応 
  • レスポンスのHTTPステータスによる処理のハンドリング 
  • コネクションタイムアウト、ソケットタイムアウト(読み取りタイムアウト)の指定 


上記の中でも特にREST アダプタの特徴的な機能を紹介していきましょう。


HTTPのメソッドごとに分かれているオペレーション


REST アダプタでは、HTTPの4つのメソッド「GET」、「POST」、「PUT」、「DELETE」ごとにオペレーションが用意されています。

HTTP GET実行HTTP POST実行HTTP PUT実行HTTP DELETE実行
operation.execute_http_get operation.execute_http_post operation.execute_http_put operation.execute_http_delete


オペレーションを分けることで、スクリプトに配置した際オペレーションがどのメソッドを実行するのか直感的に分かりやすいというメリットがあります。

 

JSONデータ対応


REST アダプタでは、XML、JSON、フォーム、マルチパートフォームなどあらゆるデータ形式のデータを送受信することが可能になっています。その中でも、多くのREST APIでやり取りするためにはJSON データの送受信ができることはREST アダプタの機能としてマストでしょう。

DataSpiderをよくご存知の方であれば、ここで一つの疑問が生じると思います。そう、DataSpiderの中間データ形式はJavaの二次元配列で表される「テーブルモデル型」と、多階層のデータを扱うための「XML型」がありますが、この中間データ形式にJSON型というのが新たに追加されたのでしょうか。いえ、そうではありません。

それとも、JSONデータを文字列として扱っているのでしょうか。これも違います。JSONデータを文字列として扱う場合、マッピング時にJSONデータを構造化データとして見ることができません。これは非常に不便です。

REST アダプタが採用している中間データ形式は「XML型」です。このXML型のデータを、JSONデータに変換するために策定されたREST アダプタ独自のスキーマで表すことで、リクエスト時はXML型の中間データからJSONデータに変換して送信、逆にレスポンスでのJSONデータ受信時はJSONデータをXML型のデータに変換してから中間データとして出力されます。

例えば、以下のJSONデータをリクエストで送る場合、

{ "attachment": 
{
"attachmentType":"Poll",
"pollChoices": [
"Monday",
"Tuesday"
]
}
}


以下のように名前は要素名、値は要素内容、JSONの型はtype属性で表したXMLデータを入力データで渡すことで、上記JSONデータに変換されます。

<?xml version="1.0" encoding="UTF-8"?>
<root type="object">
<attachment type="object">
<attachmentType type="string">Poll</attachmentType>
<pollChoices type="array">
<element type="string">Monday</element>
<element type="string">Tuesday</element>
</pollChoices>
</attachment>
</root>


この仕様に関する詳細はREST アダプタのヘルプに記載されていますので割愛しますが、ここではイメージだけでも掴んでいただければと思います。 

 

マルチパートフォームデータの送信


REST APIの中でもファイルをアップロードする際はマルチパートフォームデータとして受け取る仕様になっているものがあります。そのようなAPIに対応するために、REST アダプタはマルチパートフォームデータの送信が可能になっています。

マルチパートフォームデータとは、例えば以下のようなデータ形式になっています。

Content-Type: multipart/form-data; boundary=<バウンダリ>
--<バウンダリ>
Content-Disposition: form-data; name="firstname"
Ichiro
--<バウンダリ>
Content-Disposition: form-data; name="lastname"
Suzuki
--<バウンダリ>
Content-Disposition: form-data; name="attachment"; filename="profile.jpg"
Content-Type: image/jpeg
</data/profile.jpg のデータ>
--<バウンダリ>--

リクエストのContent-Typeは「multipart/form-data」で、バウンダリで区切られた各パートにはContent-Dispositionヘッダのnameパラメータに名前と、パートのヘッダ部から改行で区切られた領域にデータが入っています。また、ファイルのアップロードをする場合、Content-Dispositionヘッダにfilenameパラメータが付与され、データにはファイルの内容が格納されています。

JSONデータと同様、マルチパートフォームデータも次のようなスキーマのXMLデータを受け取り、マルチパートフォームデータに変換して送信します。

<?xml version="1.0" encoding="UTF-8"?>
<request>
<body>
<multipart>
<firstname>
<value>Ichiro</value>
</firstname>
<lastname>
<value>Suzuki</value>
</lastname>
<attachment>
<file>
<path>/data/profile.jpg</path>
</file>
<mimeType/>
</attachment>
</multipart>
</body>
</request>


このようなXMLのスキーマをマッピングで表示させるために、REST アダプタの設定は次のようにプロパティ画面で設定します。
multipart1

この設定では、各パートごとに名前と種類を設定します。種類は「文字列」と「ファイル」という選択肢があり、プレーンテキストのような文字列を格納する場合は「文字列」、ファイルを格納する場合は「ファイル」を選択します。この設定をした後、次のようにマッピングを定義します。
multipart2

REST アダプタで設定した各パートの名前がスキーマの要素名になっていることがお分かりいただけると思います。

種類が文字列の場合、子要素にあるvalue要素にパートに格納する文字列をマッピングし、種類がファイルの場合、子要素にあるfile/path要素にパートに格納するファイルのパスをマッピングします。ファイルの場合、ここでファイルパスを指定するだけで、実行時に指定したファイルパスから内容を読み取るので、ファイルの内容すべてをメモリに持つことはありません。

また、ファイルの場合、パートのContent-Typeヘッダに入るMIMEタイプはファイル名から自動で判別して設定しますが、mimeType要素にマッピングすることで任意のMIMEタイプも指定することができます。 

 

レスポンスヘッダの取得


次にレスポンスヘッダの取得についてご紹介したいと思います。

REST アダプタでは、任意のリクエストヘッダの指定と、レスポンスヘッダの取得ができるようになっています。特にレスポンスヘッダの取得は他のアダプタにはない特徴を持っていますので、ご紹介したいと思います。

取得したいレスポンスヘッダは、REST アダプタのプロパティ画面で次のように設定します。
response_header

ここで設定したレスポンスヘッダは、REST アダプタのコンポーネント変数として次のように定義されます。
component_variable

コンポーネント変数として定義されるので、スクリプト実行時にヘッダの値を取得することが可能になります。 

 

レスポンス関連のコンポーネント変数


最後に、レスポンス関連のコンポーネント変数についてご紹介したいと思います。

REST アダプタではレスポンス関連の以下のコンポーネント変数が定義されています。

  • status_code・・・ステータスコード 
  • reason_phrase・・・ステータスコードに関連したテキストフレーズ 
  • error_response_body・・・エラー時のレスポンスボディ 


マッピングの画面で見るとそれぞれ次のようになっています。
component_variable2

スクリプト実行時にこれらの情報がコンポーネント変数として取得できるということで、例えば、status_codeを参照してステータスコードが4xx、5xxの場合、フローを分岐してreason_phraseとerror_response_bodyの内容をログ出力コンポーネントでログに出力する、というようなことができるようになります。 


フィードバックお待ちしています


豊富な機能を搭載するREST アダプタ、まだまだご紹介したい機能がありますが、そこはぜひ使っていただき、直に体感していただければと思います。

コメント

ログインしてコメントを残してください。

Powered by Zendesk