
NocoBaseで外部サービスのユーザーリストを取得して表示させてみる
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
NocoBaseのワークフローにHttp Requestを行えるノードがあります。
外部のWebサービスとのやりとりで使うことができますが、今回はこれを使って外部サービスに登録されているユーザーリストを取得していきます。
最終的にコレクションに登録してみます。
前提
REST APIで登録ユーザーのリストが取得できることが条件です。
今回は業務でID棚卸を行なっているFivetranのAPIを利用することにします。
API KEYの取得は行っておきます。
ワークフロー作成
Http Requestノード

ワークフロー作成画面でで、プロセス内のプラス記号 (「+」) ボタンをクリックして、「HTTP Request」ノードを追加します。

FivetranのList all user へリクエストを送るので、 これに合わせてノード構成を行います。
- HTTP method
GET
- URL
- `https://api.fivetran.com/v1/users`
- Content-Type
application/json
- Headers
Authorization: Basic {api_key}:{api_secret}- Fivetran REST APIは、API Key認証を使用しています。APIへの各リクエストに対して、以下の値を持つAuthorization HTTPヘッダを提供します: Basic {api_key}:{api_secret}。 {api_key}:{api_secret}の部分は、base64エンコードする必要があります。
- base64エンコードの例
echo -n '<API key>:<API secret>' | openssl base64
- Parameters
- 必要に応じて以下のパラメーターを使用できます
- cursor: ページングに使用するための文字列です。次ページがない場合はレスポンスには含まれませんの。
- limit: レスポンスに含まれるユーザーの最大件数です。1から1000まで設定でき、デフォルトは100です。
- 必要に応じて以下のパラメーターを使用できます
- Body
- 今回のAPIでは不要です
- Timeout config
- リクエストが長時間応答しない場合、タイムアウト設定によりリクエストの実行がキャンセルされます。そのためのmsを設定します
- Ignore failed request and continue workflow
- チェックされている場合、リクエストが失敗した後も後続の他のプロセス ノードが実行され続けます
レスポンスの使用
HTTP リクエストの応答結果は、JSON 解析ノードを介して解析され、後続のノードで使用できます。
version v1.0.0-alpha.16 以降、リクエスト ノードの結果レスポンスの 3 つの部分をそれぞれ変数として使用できます。
- ステータスコード
- 応答ヘッダー
- 応答データ
今回のFivetra APIでは、応答データがJSONで返ってくるので、json queryノードを使って中身を解析する必要があります。
{
"code": "Success",
"data": {
"items": [
{
"id": "nozzle_eat",
"email": "john@mycompany.com",
"given_name": "John",
"family_name": "White",
"verified": true,
"invited": false,
"picture": null,
"phone": null,
"role": "Account Administrator",
"logged_in_at": "2019-01-03T08:44:45.369Z",
"created_at": "2018-01-15T11:00:27.329220Z",
"active": true
},
{
"id": "prophecies_falsely",
"email": "robert@mycompany.com",
"given_name": "Robert",
"family_name": "Brown",
"verified": true,
"invited": false,
"picture": null,
"phone": null,
"role": null,
"logged_in_at": "2018-12-12T12:06:15.337Z",
"created_at": "2018-01-24T20:43:32.963843Z",
"active": true
}
],
"next_cursor": "eyJza2lwIjoyfQ"
}
}
このような結果が返ってくるので、ユーザーリストを取得するためには、itemsという配列を解析しないといけませんでした。

Json queryノードを使い、
- Query engine:
JMESPath - Data source:
ノードの結果 / HTTP request / Data - Query expression:
data - Properties mapping:
items
としてitems配列の中身を後続で扱えるようにします。
その後、

Loopノードを設置し、Loop targetに先ほど設定したノード結果であるitemsをセットします。

Loopの中に渡ってきたデータを保存するので、
次の処理はJson queryで中身を解析し(items がJSONデータであるため)、
その結果を使って保存していきます。

Json queryで、
Data source を Scope variables / Loop / Loop target とすることでLoopの中に渡ってきたデータを扱うことができます。
Query expression で @ を入力し、jsonの全てのノードを取得します。
Properties mapping では保存したいデータだけ抜き出します。

レコード追加のノードでは、前のJson queryノードで得た結果をフィールドの値をセットできます。
ワークフローの実行
作成したワークフローを実行してみます。
今回はトリガーをPost-action eventにしました。

Trigger modeをLocal modeにし、このワークフローにバインドされたアクション完了後にトリガーされるようにします。

データ追加のフォームに設置できる送信ボタンにあるBind workflowsというメニューで作成したワークフローを追加します。

送信ボタンを押した後、ワークフローが実行されるはずです。

実行履歴も確認できます。

Loop内でのノードの結果を確認できるので、エラーの場合や意図しない値が登録された などの確認もできるので、実行履歴はぜひ確認しておきましょう。
取得したデータの表示
ワークフローによりコレクションにデータを登録したので、そのデータをテーブルブロックを使って表示させてみました。
例) APIから取得してきたFivetranのIDとRoleを表示してみる

HTTP Requestノードを使って外部サービスのデータを取得してみました。
外部サービスに登録しているユーザーの棚卸で利用できるようになるかとおもって調べていましたが、コードを書かなくてもここまで連携できるので実用化してもいいかもと思いました。
ID棚卸の業務では、次の期間は利用するかしないかのアンケをとったりすることもあったのですが、
取得したユーザーリストからSlackなどのメッセージアプリにメッセージを送信するワークフローを組み込んだりもできそう。










