TableauRESTAPIにPostmanで簡単アクセス!TableauCloudの管理情報を取得しよう!

こんばんは。APIをよく調査しているya_yamaguchiです。

最近TableauCloudのRESTAPIをPostmanを利用しながら検証を行いました。 ※検証自体はTableauCloudで行っていますが、未検証ながら、TableauServerでもバージョンによっては同じかもしれません。

この記事では以下3点について記載します

  • TableauCloudのAPI設定
  • Postmanでの認証
  • PostmanでTableauCloudから情報を取得する。

また今回は以下のツール及び環境で検証を行いました。

  • TableauCloud(TableauServer) :2023.1.0
  • TableauCloudユーザーのサイトロール:SiteAdmin
  • Postman:Version10.11.1

Postmanとは

本来はWEB API開発のテストを行うツールですが、私はAPIの検証によく利用します。
HTTP通信を行うだけならcurlコマンドで代替可能ですが以下のような便利機能があります。

  1. HTTP通信の設定がUIを通して実現できるので直感的な操作
  2. Headerの設定やリクエストパラメータの入力も簡単
  3. 作成した通信設定を保存でき、他人との共有が容易
  4. HTTP通信実行前後で簡単なスクリプトを記載でき、レスポンスなどを変数に格納することが可能

Postmanサイトhttps://www.postman.com/

TableauCloudでのAPI実施準備

TableauCloudのユーザー詳細画面に遷移し、設定を押し、「個人用アクセストークン」欄のトークン名に任意の名前をつけて「新しいトークンの作成」ボタンを押すとトークンが作成されます。後程使うので、メモしておきましょう。

  • 右上のアカウントのロゴを押し、「マイアカウントの設定」を押す
  • 表示された画面で、「個人用アクセス トークン」という項目があるので、任意の名前を入れて「新しいトークンの作成」を押す
  • トークンが作成されるので、クリップボードにコピーしておく(後程使います)

Postmanでの認証の実行

認証は以下の設定でHTTP通信を行えば良いようです。

認証に必要なHTTP通信設定
設定項目設定内容
HTTPメソッドPOST
URLhttps://[自分が利用しているTableauCloudのドメイン]/api/3.18/auth/signin
送信データ形式XML もしくは JSON。今回はJSONを利用
受信データ形式デフォルトはXML。ただし、今回は使いやすいJSONとして受け取る。
送信データ・個人用アクセストークンで指定した名前
・個人用アクセストークン作成時に作成できたトークン
・TableauCloudのサイトを記載

送信データをJSONで記載すると以下のようになります。

{
    "credentials": {
        "personalAccessTokenName": "[個人用アクセストークン名]",
        "personalAccessTokenSecret": "[個人用アクセストークン]",
            "site": {
                "contentUrl": "[サイト名のURL部分(URLの#/site/の後ろの文字)]"
            }
    }
} 
HTTPメソッド、URL、送受信データ形式の指定

メソッドはPOSTを設定し、URLの欄に上記のURLを記載します。
送受信形式の指定は、HeaderのContent-TypeとAcceptをapplication/jsonに変えてます。
※Headerの入力はURLの下部のタグをHeadersに切り替えます。

送信データの設定

次に送信データはURLの下部のタグをBodyに切り替えて、ラジオボタンのデータ型でrawを指定し、右端の値をJSONにします。

送信すると以下のようなレスポンスが取得されます。

{
    "credentials": {
        "site": {
            "id": "[サイトID]",
            "contentUrl": "[TableauCloudのサイト部のURL]"
        },
        "user": {
            "id": "[個人用アクセストークンの持ち主のユーザーID]"
        },
        "token": "[アクセストークン]",
        "estimatedTimeToExpiration": "[アクセストークンの有効時間]"
    }
}

上記から都度、アクセストークンを次のAPI呼び出しに設定するのは手間なので、PostmanのTest機能を使い、レスポンスの値を変数に格納しましょう。 私は以下のコードをTestsに入力して、認証結果を変数に格納しています。

const jsonData = pm.response.json();
pm.environment.set("site_id", jsonData.credentials.site.id);
pm.environment.set("siteURL", jsonData.credentials.site.contentUrl);
pm.environment.set("user_id", jsonData.credentials.user.id);
pm.environment.set("token", jsonData.credentials.token);

以下が実際に入力している画像になります。URLの下部にあるTestsタブを押して上記を入力します。


※上記変数機能を利用するには、Environment設定が必要となります。脚注の手順を参照し、Environmentを作成して下さい。 *1

アクセストークン取得リクエストを実行後、Testsタブのスクリプトが実行され、Environment内の変数に値が格納されます。

PostmanでのAPIの呼び出し

取得したアクセストークンはAPIのヘッダーに設定します。ヘッダー名は「X-Tableau-Auth」となります。
以下は、Project一覧を取得するPostmanの設定になります。{{}}で囲まれた部分が変数です。
下記のケースではURL内に{{domain}}と{{site_id}}を、X-Tableau-Authの値に{{token}}を利用しています。

最後に

APIの呼び出しは、

  1. 認証方法
  2. 呼び出し方法

を理解すれば実行可能です。

ただし、RESTAPIではHTTPメソッドによっては簡単にデータが消えてしまうため、慣れるまでは、HTTPメソッドGETのみで試してみましょう。

参考

REST API

個人用アクセス トークン - Tableau

*1:1. Postmanの左ツリーからEnvironmentsを選択し、新しいEnvironmentを作成(下図ではNewEnvironmentを作成)

2. 右上のプルダウンで作成したEnvironmentを選択(下図ではNewEnvironmentを選択)