この記事は Web API Advent Calendar 2021 の6日目の記事です。
5日目は @SatohJohn さんの記事でした。
Microsoft 365 の契約で、追加費用なしで利用できる for Office 365 のライセンスにて Power Apps や、Power Automate を利用されてい方は多いと思います。
この範囲で利用されるとき、Power Platform には、(既定)名前の付いた環境が作成され、その中でキャンバスアプリだったり、クラウドフローだったりを利用することができますが、この時のマイフローに表示されるクラウドフローを操作するための Web API は現在公開されていません。
今回は、公式に公開、サポートはされていませんが、この(既定)の環境の、マイフローに表示されるクラウドフローは、Logic Apps と似たような API を使って(無理やり)操作できるようなので、触ってみた結果を記事にしたいと思います。
※利用は自己責任でお願いします。
※ちなみに古いですがサポートされている方法としては、以下のような iframe 経由で操作する方法がありますが、これは使いやすいとは言いにくいものでした。
参考にしたブログなど
Mohamed Ashiq Faleel さんのブログ
https://ashiqf.com/2021/05/09/everything-to-know-about-power-automate-rest-api-to-manage-and-administer-your-flows/
からめも さんのブログ
Power Automate の承認ワークフローを API から取得する
https://blog.karamem0.dev/entry/2021/11/17/120000
Dataverse Web API を利用する
https://docs.microsoft.com/ja-jp/learn/modules/common-data-service-web-api/
やってみたこと
作業の流れとしては、以下の通りです。
- Azure AD へアプリ登録する
- Postman を設定して API を使用する
- いくつか API を使ってみる
Azure AD へアプリ登録する
以下の記事の作業を参考にしています。
OAuth を使用して Microsoft Dataverse に対する認証を実行する
https://docs.microsoft.com/ja-jp/learn/modules/common-data-service-web-api/2-authenticate
Azure AD へアプリを登録
以下のように Azure AD のアプリケーションを登録します。
マニフェストの更新
マニフェストから、以下の3つを true にします。(今回は Postman から実行するため)
項目 | 値 |
---|---|
allowPublicClient | true |
oauth2AllowIdTokenImplicitFlow | true |
oauth2AllowImplicitFlow | true |
アクセス許可の追加
API のアクセス許可から、Flows.Manage.All
のアクセス許可を追加します。
これで、Azure AD の設定は完了です。
Postman を設定して API を使用する
以下の記事の作業を参考にしています。
Postman を 使用して Microsoft Dataverse Web API を操作する
https://docs.microsoft.com/ja-jp/learn/modules/common-data-service-web-api/3-postman
環境変数の設定
以下のように環境変数を設定します
項目 | 値 |
---|---|
baseurl | https://api.flow.microsoft.com |
env | Default-{Power Platform の環境のID} |
url | {{baseurl}}/providers/Microsoft.ProcessSimple/environments/{{env}} |
clientid | {Azure AD のアプリケーションID} |
callback | https://callbackurl |
authurl | https://login.microsoftonline.com/common/oauth2/authorize?resource={{resourceurl}} |
resourceurl | https://service.flow.microsoft.com |
トークンの取得
Authorization タブで、以下のような値を設定します。
項目 | 値 |
---|---|
Access Token | Available Tokens |
Header Prefix | Bearer |
Token Name | {自由な値} |
Grant Type | Implicit |
Callback URL | {{callback}} |
Auth URL | {{authurl}} |
Client Authentication | Send as Basic Auth header |
設定できたら、アクセストークンを取得します。
これで設定は完了です。
API の呼び出しテスト
さっそく動かしてみます。
{{url}}/flows?api-version=2016-11-01
なーんかレスポンスが返ってきて、フロー名っぽいものが取れてます。やった!!!
いくつか API を使ってみる
では、Logic Apps の API を参考にいくつか API を実行してみたいと思います。
自分の作ったフローの一覧を取得する
{{url}}/flows?api-version=2016-11-01
フローの詳細を取得する
{{url}}/flows/{flows で取得できる name }?api-version=2016-11-01
フローの実行履歴を取得する
{{url}}/flows/{flows で取得できる name }/runs?api-version=2016-11-01
フローのトリガーの履歴を取得する
{{url}}/flows/{flows で取得できる name }/triggers/{triggers で取得できる name}/histories?api-version=2016-11-01
フローのトリガーを再実行する
{{url}}/flows/{flows で取得できる name }/triggers/{triggers で取得できる name}/histories/{histories で取得できる name}/resubmit?api-version=2016-11-01
感想
無事、動作させることができました。
今後、どれくらいサポートされたり公開されたりするのかわかりませんが、実行履歴の取得とかは使いどころありそうかなと思いました。
また、再実行が可能だったので、かなり無理やりですが、HTTP コネクタもどきを作り出すこともできるかもしれません。
普通にフローを実行するとか、他人のフローを含めた一覧を取得するとかは、できれば便利そうなのですがおそらくできなそうでした。
興味があれば、ぜひいろいろ試してみてください。