Node-REDでhttp requestノードでAPIを作りPowerAppsのカスタムコネクタと連携するメモ

Node-REDでhttp requestノードでAPI作りPowerAppsのカスタムコネクタと連携するメモです。

目的

今回はNode-REDのHTTP APIをPowerAppsのカスタムコネクタとデータ連携して、お互いの連携具合の雰囲気を掴んでみたいと思います。

もちろん、最終的に Node generator for Node-RED をさらに加えると、より良くなることを見据えつつ、一旦シンプルに試してみます。

全体像

image

このように、Node-RED上で簡単なPOSTとGETのやり取りができるAPIを用意し、その橋渡しのできる swagger 定義を使って、Power Appsのカスタムコネクタに解釈できるようにしてシンプルな連携を作ります。

Swagger の定義

まず、Power Appsのカスタムコネクタで読み込むために、Swaggerを定義します。

Swagger定義ファイルの書き方(超手抜き編) – Qiita ここを参考にさらにシンプルに。

swagger: '2.0'
info:
  version: 'first version'
  title: Sample Api
host: <今回のNode-REDのURL>:1880
basePath: /

schemes:
  - http

consumes:
  - application/json
produces:
  - application/json

paths:
  /swagger:
    x-swagger-pipe: swagger_raw

  /test_post:
    post:
      x-swagger-router-controller: echo
      operationId: test_post
      parameters:
        - in: body
          name: body
          schema:
            type: object
      responses:
        200:
          description: Success
          schema:
            type: object
      summary: test_post API

  /test_get:
    get:
      x-swagger-router-controller: echo
      operationId: test_get
      parameters:
        - in: query
          name: param
          type: string
      responses:
        200:
          description: Success
          schema:
            type: object
      summary: test_get API

こちらの、

host: <今回のNode-REDのURL>:1880

を、今回のNode-REDのURLに変更しておきましょう。

このSwagger YAMLを Swagger Editor でJSON変換

Swagger Editor に移動します。

image

Swagger YAMLをコピーアンドペーストします。

image

この操作でJSONに変換して、 swagger.json というファイル名で手元に保存しておきます。

Node-REDで簡単なAPIを作る

Swaggerに合わせたAPIをNode-REDで作ります。

image

このようなフローです。

[{"id":"6b62b5a6.d4f04c","type":"http in","z":"b0cabdd3.d4f0b","name":"","url":"test_post","method":"post","upload":false,"swaggerDoc":"","x":580,"y":240,"wires":[["220a42b3.ef807e","21e53c23.3c33a4"]]},{"id":"220a42b3.ef807e","type":"debug","z":"b0cabdd3.d4f0b","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":770,"y":220,"wires":[]},{"id":"98514748.5974f8","type":"http response","z":"b0cabdd3.d4f0b","name":"","statusCode":"","headers":{},"x":930,"y":260,"wires":[]},{"id":"9c65d03b.91f37","type":"http in","z":"b0cabdd3.d4f0b","name":"","url":"test_get","method":"get","upload":false,"swaggerDoc":"","x":570,"y":340,"wires":[["543eb0a0.c00d1","922da619.43cea8"]]},{"id":"543eb0a0.c00d1","type":"debug","z":"b0cabdd3.d4f0b","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":770,"y":320,"wires":[]},{"id":"444e7318.e6a0fc","type":"http response","z":"b0cabdd3.d4f0b","name":"","statusCode":"","headers":{},"x":930,"y":360,"wires":[]},{"id":"21e53c23.3c33a4","type":"change","z":"b0cabdd3.d4f0b","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"australia\":[\"wombat\",\"wallaby\",\"kangaroo\",\"koala\"]}","tot":"json"}],"action":"","property":"","from":"","to":"","reg":false,"x":780,"y":260,"wires":[["98514748.5974f8"]]},{"id":"922da619.43cea8","type":"change","z":"b0cabdd3.d4f0b","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"message\":\"Hello!\"}","tot":"json"}],"action":"","property":"","from":"","to":"","reg":false,"x":780,"y":360,"wires":[["444e7318.e6a0fc"]]}]

このフローJSONデータでインポートできます。

test_post

image

こちらの返答するデータは以下の通りです。

image

change ノードでこのようなJSONオブジェクトを返答しています。

test_get

image

こちらの返答するデータは以下の通りです。

image

change ノードでこのようなJSONオブジェクトを返答しています。

PowerAppsに Swagger JSON データを読み込む

image

PowerAppsに行きます。

image

カスタムコネクタを選択。

image

カスタムコネクタの一覧ページで、

image

「Open API ファイルをインポートします」を選択して、カスタムコネクタの新規作成を行います。

image

コネクタ名はわかりやすい名前で。Open API ファイルは先ほどのダウンロードしておいた swagger.json ファイルを指定します。

続行をクリックして読み込みましょう。

設定の確認

読み込まれれば、基本大丈夫なはずですが、確認しておきましょう。

image

はじめに、全般の設定。

image

セキュリティ設定は認証なし。このあたりもSwaggerで反映できるのがいいですね。

image

定義も設定されているはず。

image

これでコネクタの作成を押して、今回のSwaggerで作られたカスタムコネクタを保存します。

テストしてみる

早速テストしてみましょう。再度、テストのところまで行って、コネクタの作成をします。

image

新しい接続をクリックします。

image

作成ボタンを押します。

image

再度、テストのページに戻ってくると無事、接続が登録できました。

test_post のテスト

image

このようにやり取りがテストできて疎通成功です。

image

paramに body に test という文字を入れていますが、Node-RED側でデータを受け取れています。

test_get のテスト

image

このようにやり取りがテストできて疎通成功です。

image

paramに sample という文字を入れていますが、Node-RED側でデータを受け取れています。