APIを使ったAlteryx Gallery(Server)へのアクセスについて

こんにちは、小澤です。

Alteryx ServerのGalleryにアップロードされたワークフローはAPI経由での実行もできます。 今回は、その方法を見ていきたいと思います。

APIからのアクセスを許可する

最初に、APIからのアクセスを許可するための設定を行います。 APIアクセスのStudioごと設定可能です。

管理者画面に入ってSubscriptionからAPIアクセスを許可したいStudioの編集画面に移ります。 「API Enabled」という項目があるのでそれをYesに設定すればAPIアクセスが可能になります。

APIキー、シークレットキーを取得する

Galleryにアクセスする際にログインするのと同様、APIアクセスも誰からのアクセスなのかを認識する必要があります。 Alteryx Serverではその仕組みにOAuth1.0を利用しています。

APIキーはGalleryのユーザ設定から確認できます。

右上にある歯車のようなアイコンから「SETTINGS」を選択します。 Keysのタブを選択すると、以下のようにStudioにアクセするためのAPIキーとシークレットキーが確認できます(シークレットキーを表示するには「SHOW」を押します)。

APIからアクセスしてみる

では、APIからのアクセスをやってみましょう。 今回はドキュメント内機能を使ってやってみます。

http:///gallery/api-docs/

にアクセスします。 すると以下のような画面が表示されます。

上部のAPI Key, Shared Secretにアクセスキーとシークレットキーを入力するとこの画面で試しにリクエストは発行してみることができます。

試しに/v1/workflows/subscription/にアクセスしてみましょう。 項目を選択すると詳細な説明が展開されます。

これは、Studio内のワークフローのリストを返すAPIになってます。

「Parameters」で必要なパラメータを選択したのち、下部にある「Try it out」を選択することでリクエストを送信することができます。

結果は以下のように確認できます。

APIでは、以下の機能が用意されているようです。

リクエストの種類 エンドポイント 機能 必須パラメータ  備考
GET /v1/workflows/subscription/ Studio内のワークフローのリストを返す なし APIキーがStudio単位で発行される
GET /v1/workflows/{appId}/questions/ Analytic Appのインターフェース上の設定項目リスト appId URL中の{appId}にappIdを入れる。Studio内のワークフローリストに記載されている
POST /v1/workflows/{appId}/jobs ワークフローを実行する  appId, values Analytic Appの場合valuesにインターフェース上の項目値を入れる
GET /v1/workflows/{appId}/jobs/ ワークフローの実行されたジョブリストを返す appId
GET /v1/jobs/{jobId}/ ジョブの詳細を取得する jobId jobIDはジョブリストに記載されている
GET /v1/jobs/{jobId}/output/{outputId}/ 実行されたジョブの出力ファイルを取得する jobId, outputId
GET /v1/{appId}/package/ ワークローを含むパッケージを返す appId

各エンドポイントの詳細は、ドキュメントをご確認ください。

これらのAPIを利用することで、あるジョブの実行が完了したことをトリガにして別なジョブを実行させるようなことも実現できます。

APIの叩き方

さて、プログラムからAPIを叩くには少しばかりOAuth1.0の手順を踏む必要があります。 上記APIリストの必須パラメータの他に以下のパラメータが必須になります。

パラメータ 入れる値
oauth_consumer_key APIキー
oauth_signature_method HMAC-SHA1
oauth_signature ※後述
oauth_timestamp リクエスト発行時刻のエポック秒
oauth_nonce 適当な値
oauth_version 1.0

oauth_signatureの生成

パラメータの中で生成する必要があるものとして、oauth_signatureが出てきます。 この値はHTTPのメソッド、リクエスト先、リクエストパラメータをまとめてハッシュ化する必要があります。 やり方としては一般的なOAuth1.0のライブラリが利用可能ですので、ドキュメント中の「Creating your own API client」を展開した時に出てくる、サンプルのJavascriptクライアントを例に見てみましょう。

ダウンロードしたファイルのindex.htmlを開くと以下のような画面が出てきます。

API Locationには「http:///gallery/api/v1」を入れます。 API Key, API Secretはそれぞれアクセスキーとシークレットキーです。

これらを入れた状態で、「Get Subscription Workflows」を押すとワークフロー一覧が取得できます。

この時の動きとして、main.jsにある以下の処理が実行されています。

$("#getSubscriptionWorkflows").click(function(){
    gallery = new Gallery($("#apiLocation").val().trim(), $("#apiKey").val().trim(), $("#apiSecret").val().trim());
    gallery.getSubscriptionWorkflows(function(workflows){
        var listStr = "";
        var len = workflows.length;
        if (len === 0) {
            listStr = "There are no workflows in the subscription associated with the given api key";
        }
        for (var i = 0; i < len; i++){
            listStr += "<li>" + workflows[i].metaInfo.name + " - " + workflows[i].id +  "</li>";
        }
        $("#workflowList").html(listStr);
    }, function(response){
        $("#workflowList").html(response.responseJSON && response.responseJSON.message || response.statusText);
    });
});

Galleryクラス及び、getSubscriptionWorkflowsメソッドはalteryxGalleryAPI.jsで以下のように定義されています。

this.getSubscriptionWorkflows = function (success, error){
    var type = "GET",
        url = this.apiLocation + "/workflows/subscription/",
        params = buildOauthParams(this.apiKey),
    //add any user parameters before generating the signature                                                                                                                                       
        signature = generateSignature(type, url, params, this.apiSecret);
    $.extend(params, {oauth_signature: signature});
    $.ajax({
        type: type,
        url: url,
        data: params,
        success: success,
        error: error
    });
};

buildOauthParamsでOAuthに必要なパラメータをハッシュマップに入れたものを返しています。

var buildOauthParams = function(apiKey){
    return {
        oauth_consumer_key: apiKey,
        oauth_signature_method: "HMAC-SHA1",
        oauth_nonce: Math.floor(Math.random() * 1e9).toString(),
        oauth_timestamp: Math.floor(new Date().getTime()/1000).toString(),
        oauth_version: "1.0"
    };
};

これをもとに、シグニチャの作成をしているのが、generateSignature関数になります。

var generateSignature = function(httpMethod, url, parameters, secret) {
    return oauthSignature.generate(httpMethod, url, parameters, secret, null, { encodeSignature: false});
};

oauthSignatureの実態は、以下のライブラリを使用しています。

こちらは一般的なOAuth1.0に対応したライブラリとなりますので、他の言語でもライブラリの利用で対応可能でしょう。

最後に得られたシグニチャをパラメータに追加して、リクエストを投げています。

おわりに

今回は、Alteryx ServerのGallery APIについて解説しました。

APIを使えば他のシステムと連携してワークフローを実行したり、特定の時間以外の要素をトリガとしたタイミングでのワークフロー実行が可能になります。 そういったことをしたいという方はぜひ参考にしていただければと思います。

Alteryxの導入なら、クラスメソッドにおまかせください

日本初のAlteryxビジネスパートナーであるクラスメソッドが、Alteryxの導入から活用方法までサポートします。14日間の無料トライアルも実施中ですので、お気軽にご相談ください。

alteryx_960x400