こんばんは。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コマンドで代替可能ですが以下のような便利機能があります。
- HTTP通信の設定がUIを通して実現できるので直感的な操作
- Headerの設定やリクエストパラメータの入力も簡単
- 作成した通信設定を保存でき、他人との共有が容易
- HTTP通信実行前後で簡単なスクリプトを記載でき、レスポンスなどを変数に格納することが可能
Postmanサイトhttps://www.postman.com/
TableauCloudでのAPI実施準備
TableauCloudのユーザー詳細画面に遷移し、設定を押し、「個人用アクセストークン」欄のトークン名に任意の名前をつけて「新しいトークンの作成」ボタンを押すとトークンが作成されます。後程使うので、メモしておきましょう。
- 右上のアカウントのロゴを押し、「マイアカウントの設定」を押す
- 表示された画面で、「個人用アクセス トークン」という項目があるので、任意の名前を入れて「新しいトークンの作成」を押す
- トークンが作成されるので、クリップボードにコピーしておく(後程使います)
Postmanでの認証の実行
認証は以下の設定でHTTP通信を行えば良いようです。
認証に必要なHTTP通信設定
設定項目 | 設定内容 |
---|---|
HTTPメソッド | POST |
URL | https://[自分が利用している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の呼び出しは、
- 認証方法
- 呼び出し方法
を理解すれば実行可能です。
ただし、RESTAPIではHTTPメソッドによっては簡単にデータが消えてしまうため、慣れるまでは、HTTPメソッドGETのみで試してみましょう。
参考
*1:1. Postmanの左ツリーからEnvironmentsを選択し、新しいEnvironmentを作成(下図ではNewEnvironmentを作成)
2. 右上のプルダウンで作成したEnvironmentを選択(下図ではNewEnvironmentを選択)