#PowerAutomate を使って、簡単なAPIをローコードで作ってみよう

クラウド利用する上で欠かせない Web API
Microsoft のローコード開発プラットフォームである Power Platform では、それらを簡易的に利用できるように、コネクタという形にすることで、市民開発者でも簡単に Web API を利用して、様々なクラウドサービスと連携した業務アプリを作ったり、自動化を行ったりすることができるようになります。
ただし、利用はあくまで会社内のみ。社外の人が利用することができません。

それでも十分ではありますが、他のクラウドサービス上やクライアントから、社内の情報を参照させたいとかそういうこともあるんじゃないかと思います。

そこで、Power Automate の機能を使って、簡単なAPIを本記事では作っていこうかと思います。

# 注意

この記事の内容を利用するためには、Power Automate の有償プランか [Power Apps 開発者プラン](https://powerapps.microsoft.com/ja-jp/developerplan/)が必要です。

# トリガーの指定

まず、新しいフローから、インスタントクラウドフローを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/1a3a66da-3eee-10e6-06cc-c9e8c9e86e95.png)

フロー名を入力して

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/3a83d73e-155e-53a1-5b82-dd6bb4b6c514.png)

HTTP 要求の受信時を選択して

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/745c4cc7-6380-055f-1d9d-fa4efd112ede.png)

作成をクリックします。

そうするとこのように、トリガーを作成することができました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/2d9ba923-ea7c-acdc-06b8-5d1e39d742e4.png)

HTTP 要求の受信時を開くと、このようにURLやスキーマといった項目が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/7d4ed6ad-0ce3-fb69-1e5d-48a093594aee.png)

URLは、フローが保存されたときに初めて生成されます。

詳細オプションを表示するとクリックすると、メソッド や relativePath を指定できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/dc62991f-89fc-a123-4093-578d64183968.png)

## メソッド

全部で5種類指定することが可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/48b8b91f-bc04-f215-a081-cf6ddd2ca9df.png)

デフォルトのメソッドは POST です。
他のメソッドも選ぶことはできます。
ただし、GETメソッドについては、要求本文になにも指定しないことが条件みたいですのでお気を付けくださいまし。

## relativePath

生成されるURLパスに相対パスを付与することができます。

指定しない場合は・・・

```
https://<region>.logic.azure.com:443/workflows/<ID>/triggers/manual/paths/invoke?api-version=2016-06-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=<Signature>
```
指定した場合は

```
https://<region>.logic.azure.com/workflows/<ID>/triggers/manual/paths/invoke/weather?api-version=2016-06-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=<Signature>
```
という形で、invokeの後に、指定した相対パスが付与されています（この場合は weather）

## 要求本文のJSONスキーマ

API を送信する側の body句 に指定するべきJSONパラメータのスキーマを入力します。

例えば

```json
{"city":"Tokyo"}
```
というデータを受け付ける場合は

```json
{
    "type": "object",
    "properties": {
        "city": {
            "type": "string"
        }
    }
}
```

という形で入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/eccd7ffc-3083-7002-270f-d176f18ad7ad.png)

ただし、スキーマを書くのは非常にめんどくさいので、データからスキーマを自動的に生成することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/412d8736-529e-7850-245a-0f74f992e5c8.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/eca716b2-4413-9ace-6404-bd312d0f4fa7.png)

そうすると、以降のアクションで、生成したスキーマの内容を、動的アクションとして使用することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/9b1d4115-bb9f-f670-4f0a-b1d06021589f.png)

# 処理結果を戻す

要求を投げて、結果が返ってこないのでは意味がないですよね・・・
なので、結果を返してあげるように宣言します。

要求コネクタから

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/f8d3c80e-9ec8-bebb-c6e8-1c53e6c9800f.png)

応答アクションを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/3e34a74d-8118-44c4-0902-c502423a4c86.png)

そうすると、このような応答アクションが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/476ad428-cc90-f438-a804-e030014d06b6.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/a2564ea9-bd75-709e-3781-bd2389d4c578.png)


## 状態コード

HTTP のコードですね。
正常なら200、エラーが起きた場合は、起きた内容によって適宜変更しましょう。

## ヘッダー

Headerデータとして送信する内容を指定します。
本文データの内容に合わせて、Content-Typeを指定する場合などに使用しましょう。

## 本文

Bodyデータとして送信する内容を指定します。

html 文を送信してもよいですし、JSONを返してあげてもよいです。

## 応答本文のJSONスキーマ

本文をJSONとして送信する場合は、スキーマも併せて定義してあげましょう。


# 実際に動かしてみる

Postman を使って動かしてみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/836bee2f-477d-5a34-8255-737187205d4d.png)

データがきちんと返ってきました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/6dfebc8d-ae81-5a8b-57d9-177593709ff0.png)

# まとめ

このような形で、HTTP要求トリガーと応答アクションを使えば、ローコードでAPIを作ることができます！
外部からのメッセージをTeams Bot として通知することができたり、Microsoft Dataverse や SharePoint などの情報をWebに公開するといったこともできるかもしれません。

是非皆さん、いろんなアクションを組み合わせて、オリジナルのAPIをローコードで作ってみてください＼( 'ω')／