Web APIという仕組みを使うとPower Automate for Desktop(以下:PAD)を外部のサービスと簡単に連携することができます。
PAD単体ではできないことができるようになるのでより強力な自動化フローが作成できるようになるかもしれないよ!
この記事では、PADでWeb APIを使って外部サービスと連携するための基礎知識を、フローを作成しながら学習するための記事です!
この記事でわかること!
- Web APIとは何かがざっくりとわかる。
- REST APIドキュメントの読み方がわかる。
- REST APIが公開されている外部サービスとPADを連携させるための基礎知識がわかる。
- PADでREST APIを使ったフローを作成できるようになる。
外部サービスと連携するためのしくみ
まず、PADで外部サービスと連携する方法について確認しましょう!PADで外部サービスと連携する方法には以下の3つの方法のいずれかを使って実装することになるかと思います。
Power Automate for Desktopで外部サービスと連携する3つの方法
- PADに用意された専用のアクションを使う。
- アクションを組み合わせて処理を自作する。
- Web APIを利用する。
- 方法① 専用のアクションを使う。
-
専用のアクションは専用に作られているので、もし利用したい外部サービスの専用のアクションがあればそれを一番簡単です。PADには、AWSやAzureやGoogleなどの一部の外部サービスには専用のアクションがあります。
専用のアクションが無い場合、②か③の方法を検討しましょう。
- 方法② アクションを組み合わせて処理を自作する。
-
例えば外部サービスの例として「LINEにメッセージを送信する」場合を例にしますと、マウス操作やキーボード操作をコントロールするアクションを使ってLINEのデスクトップアプリケーションを操作する処理を1から作る方法があります。この方法はアクションの数も増え、作成に時間がかかり、安定性も担保されません。
- 方法③ Web APIを利用する。
-
利用したい外部サービスにAPIが公開されている場合、APIを利用すれば、たった二つのアクションで簡単にデータ連携ができます。
以上の理由で、PADに利用したい外部サービスの専用アクションが無い場合は、APIが公開されていないかを確認してみると良いかなと思います。
APIとは?
API(Application Programming Interface)とは?
APIとは、企業が提供するサービスの一部の機能をAPIとして公開してくれている場合、私たちがそのAPIを自分の作成したプログラム(たとえばPADフロー)の中で簡単に利用することができる仕組みです。
APIは、公開する側、利用する側に下記のようなメリットがあります。
- 私たち(APIを利用するユーザー)のメリット
-
既に公開済みのサービスを借りて利用することで、労力をかけずに手早く自分が作成したプログラムの機能を拡張できるというメリットがあります。
- 企業(API公開者)のメリット
-
企業としては、サービスの技術を隠したまま機能の一部を公開することによって、API利用料による収益拡大を生んだり、そのサービスをより使ってもらいやすくなる、といったようなメリットがあります。
公開する側にもメリットがあるため、APIを公開してくれているサービスがあるわけですね。
もちろんAPIを公開していないサービスもありますのでサービスのWebサイトで確認してみてください。
APIの2つの種類(Web APIかそれ以外)
APIには、Web APIとWeb APIじゃないAPIの2種類があります。近年のほとんどのAPIはWeb APIとなります。おそらくこの記事を読んでいただいているあなたが「あのサービスの機能を利用したいなぁ」と考えているサービスのAPIもおそらくWeb APIかなぁと思います。
APIの種類
- Web API
- Web APIじゃないAPI
- Web APIとは?
-
インターネットを介して(HTTP/HTTPSを使って)データのやりとりをします。
- 例
- Google Sheets API
- LINE Notify API
- Amazon、楽天など。
- 例
- Web APIじゃないAPIとは?
-
インターネットを介さずデータのやりとりをします。
- 例
- Windowsの操作をするWin32 APIなど。
- 例
この記事では、一般的に利用頻度の高いWeb APIの方を解説しています。
Web APIの2つの種類(RESTかSOAPか)
Web APIは、RESTかSOAPのどちらかの実装方式で公開されています。近年では公開しやすさ、利用しやすさのメリットがあるため、多くの企業がRESTを採用してAPIを公開しています。
PADでは、REST API・SOAP APIどちらのAPIも使うことができます。
ただし、APIがどちらの種類で実装されているかによって、使用するアクションが異なりますのでAPIのドキュメントなどで事前に確認してください。
この記事は、REST APIの外部サービスとの連携について解説しています。
Web APIの実装方式の2つの種類
- REST API
- SOAP API
- REST APIとは?
-
公開しやすい、利用しやすい。JSONやXMLを使ってデータのやり取りを行う。近年の主流。
- SOAP APIとは?
-
XMLを使ってデータのやり取りを行う。
「APIをたたく」とは?
APIを実行して結果を取得することを何故か「APIをたたく」というように表現されることが多くあります。
語源はよくわかりませんが、システムエンジニアがコマンドを実行することを叩く(hit)と言うことがありますのでそこから由来しているのかもしれません。
IT界隈の人達の間では良く使われる言葉ですので「この処理の中でGoogle Drive APIを叩いて・・・」というような言葉がでてきたら『なんかしらのAPIを実行しているんだなぁ』というように理解すればよいかと思います。
JSONとは?
REST APIではJSONというデータフォーマットでデータのやり取りを行います(※XMLもたまにあります)。このため、REST APIを使用する前にJSONについて少しだけ確認しておきましょう。
JSONは、下記のようにキー(鍵)とバリュー(値)をコロンでペアにしてデータを保持します。下記の例では、”名前”というキーに”太郎”というバリューが格納されていることがわかります。
{ "名前": "太郎", "苗字": "山田", "好きな食べ物": [ "ラーメン","ハンバーガー" ], "登録日": "2021/12/01" }
ここではJSONについての深い解説は行いませんので、JSONがわからない方は下記のドキュメントをご参考ください。
JSONとは何か – MDN Web Docs
https://developer.mozilla.org/ja/docs/Learn/JavaScript/Objects/JSON
JSONのキーとバリューは必ずダブルクォーテーションで囲みます。
Power Automate for Desktopで『REST API』を利用する時の流れ
PADでREST APIを利用するには下記の流れで行います。
REST APIを利用するには、JSONデータをやり取りする上でいくつか下記のように必要な情報があります。
必要な情報は、利用するAPIのドキュメントに記載されているはずです。利用する前に必ずAPIドキュメントを読んで下記の必要な情報を集めていきます。
- エンドポイント
-
HTTP/HTTPSを送る宛先URIです。必須の情報です。
- メソッド(HTTP Method)
-
送信するHTTPメソッドです。GET/POSTなどを良く使います。
- ボディ(Body)
-
実際にAPIに送信するJSONです。データの本文です。
- 受信するコンテンツタイプ
-
外部サービスからPADで受信するとき(Response)のコンテンツタイプです。MIMEタイプと呼ぶこともあります。例:application/json
- 送信するコンテンツタイプ
-
PADから外部サービスに送信するとき(Request)のコンテンツタイプです。 MIMEタイプと呼ぶこともあります。 例:application/json
- ヘッダー(Header)
-
上記以外にヘッダーに含めるべき情報です。認証が必要なAPIはここに認証情報を含めます。
「Webサービスを呼び出します」アクションを使ってHTTP/HTTPSを送信します。
PADでREST APIをたたくには、「Webサービスを呼び出します」アクションを使います。このアクションは「HTTP」グループの中にあるアクションです。
下表は、よく使う入力パラメータです。
引数 | 省略可能 | 承認 | 既定 | 内容 |
---|---|---|---|---|
URL | 無効 | テキスト値 | Web サービスの URL です | |
メソッド(Method) | N/A | GET、POST、CONNECT、HEAD、PUT、DELETE、OPTIONS、TRACE、PATCH | 取得 | Web サービスを呼び出すために使用される HTTP メソッドです |
受け入れる(Accept) | 有効 | テキスト値 | application/xml | Web サービスの応答で受け入れられるコンテンツ タイプです |
コンテンツタイプ(Content type) | 有効 | テキスト値 | application/xml | Web サービスに送信される要求のコンテンツ タイプです |
カスタムヘッダー(Custom headers) | 有効 | テキスト値 | Web サービスに送信される要求に含まれるカスタム ヘッダーです | |
要求本文 (Request body) | 有効 | テキスト値 | Web サービスに送信される要求の本文です |
下表は、実行後に生成され結果が格納される変数です。
引数 | 型 | 内容 |
---|---|---|
WebServiceResponseHeaders | テキスト値の一覧 | 応答の HTTP ヘッダーです |
DownloadedFile | ファイル | ダウンロードされたファイルです。ファイルの受信が無い場合省略されます。 |
WebServiceResponse | テキスト値 | Web サービスの応答テキストです |
StatusCode | 数値 | 返された状態コードです |
詳細は、リファレンスを参照してください。
Power Automate for DesktopでREST APIをたたくには「HTTP」グループの中の「Webサービスを呼び出します」アクションを使います。
「JSONをカスタムオブジェクトに変換」アクションを使ってデータを取り出しやすくします。
「Webサービスを呼び出します」アクションを実行するとPADにJSONが返却されます。
PADの場合、受け取ったJSONは「JSONをカスタムオブジェクトに変換」アクションを使ってオブジェクト型に変換するのが一般的かと思います。なぜかというと、PADは受け取ったJSONをただの文字列のカタマリとしてか認識してくれないため、このままでは扱いづらいのです。オブジェクト型に変換することで後続のアクションで扱いやすくなります。
たとえば下記のサンプルJSONから苗字を取り出す場合を例に考えてみます。PADにとってはJSONはただの文字列ですので、JSONの中から「文字列切り出し」アクションと「文字列検索」アクションを組み合わせて、苗字の” 山田”の前後にある余分な文字列を切り取る必要があります。これは結構面倒です。
ところがオブジェクト型に変換すれば、後続のアクションの中で%JSONのサンプル[“苗字”]%と指定するだけで簡単に苗字を取り出すことが可能です。
{ "名前": "太郎", "苗字": "山田", "好きな食べ物": [ "ラーメン","ハンバーガー" ], "登録日": "2021/12/01" }
このため、APIから受け取ったJSONはカスタムオブジェクト型に変換しましょう。
Power Automate for DesktopでJSONをオブジェクト型に変換するには「変数」グループの中の「JSONをカスタムオブジェクトに変換」アクションを使用します。
【実践】PADでWeb APIを実行しよう!
それでは、前置きが長くなってしまいましたがPower Automate for Desktopを使ってWeb APIをたたいてみたいと思います。今回は練習として『すぐ呼び出し可能なWebAPI』というサービスを利用させていただきました。
『すぐ呼び出し可能なWebAPI』は、テストや学習を目的とした方を対象に有志の方が公開してくださっているREST APIです。通常、多くのAPIはユーザ登録をして認証キーを取得する必要とすることが多いのですが、こちらのAPIはユーザ登録不要で無料で利用することができます。
『すぐ呼び出し可能なWebAPI』
https://www.umayadia.com/Note/Note028WebAPISample.htm
このサービスは架空の人物名簿で、人物を取得したり、追加、更新、削除ができます。プログラムの練習やお試しに使用することを想定しています。
引用:すぐ呼び出し可能なWebAPIのサンプル – 概要 https://www.umayadia.com/Note/Note028WebAPISample.htm
APIを利用する際は、必ずドキュメントに記載された利用条件を読み、条件の範囲で節度を持って利用するようにしましょう!
こちらのAPIには下記のようないくつかの機能があるようです。今回はこのAPIの機能の一つGET Personsという機能を使って、こちらのサービスに登録された全人物の一覧を取得することをゴールとします。(図の赤枠の機能)
GET personsという機能を利用する前にドキュメントを確認してみましょう。
先の説明で、REST APIを利用するには6つの必要な情報(エンドポイント・メソッド・ヘッダー・ボディ・送信コンテンツタイプ・受信コンテンツタイプ)があるとお伝えしました。これら6つの情報をAPIドキュメントから探します。
▲上図の情報から、下記のような情報が必要であることがわかりました。
項目 | パラメータ |
---|---|
エンドポイント | https://umayadia-apisample.azurewebsites.net/api/persons |
メソッド | GETを使うようです。 |
ヘッダー | 認証がありませんし、特に記述がないため不要のようです。 |
ボディ | 不要のようです。 |
受信コンテンツタイプ | JSONで返却されるようなので、application/jsonとします。 |
送信コンテンツタイプ | application/json(ドキュメントの共通仕様の項に記載があります。) |
新規フローを作成して「Webサービスを呼び出します」アクションを追加します。追加したら先ほど集めた「APIに必要な情報」を図のように入力しましょう。
「Webサービスを呼び出します」アクションの入力値
- URL:エンドポイントを入力します。https://umayadia-apisample.azurewebsites.net/api/persons
- メソッド:GET
- 受け入れる:受信時のコンテンツタイプを入力します。application/json
- コンテンツタイプ:送信時のコンテンツタイプを入力します。application/json
- カスタムヘッダー:ヘッダーに含める追加情報を入力します。今回は必要ないので空白にします。
- 要求本文:ボディに含める情報をJSONで入力します。今回は必要ないので空白にします。
返却されたJSONは、「JSONをカスタムオブジェクト」アクションを使って扱いやすくします。
JSONの項目に「%WebServiceResponse%」を渡します。
フローを実行します。
▲フローを実行したらフロー変数の中の「StatusCode」変数を確認します。200番は成功を表すステータスコードですので無事にAPIを実行できたということになります。エラーが起きた場合は、それ以外の数字が入っているはずです。ステータスコードの意味はAPIによって異なりますのでAPIドキュメントを確認して対処してください。
▲正常なステータスコードが確認できたら、返却されたJSONを確認します。フロー変数の中の「JsonAsCustomObject」変数をダブルクリックして中身を確認します。
▲dataのところにある「詳細表示」をクリックします。
▲アイテムの一覧の中に、今回のゴールである「登録されている全人物の一覧」が取得できたことが確認できました!
こちらのJSONには、name(人物名)、note(人物についての一言)、age、registerDateなどがあるようです。受け取るJSONの仕様はAPIによって異なります。こちらも必ずAPIドキュメントで確認するようにしましょう。
【テストにおすすめ】気軽に扱えるWeb API
下記は認証不要で無料で利用できるWeb APIです。気軽に使えるのでPADでのAPI連携の練習をもう少ししたい方におすすめのサービスです。
サービス名とリンク | サービスの概要 |
---|---|
{JSON} Placeholder | ブログのようなダミーデータを取り出したり更新できるAPI。API連携の練習やテスト向けに公開されている。 |
Dog API | 犬の画像のURLを取得できるAPI |
CAT API | 猫の画像のURLを取得できるAPI |
まとめ
以上、PADでWeb APIのしくみを使って外部サービスと連携する方法について解説しました。
次の記事では、認証が必要なWeb APIの例として、LINE Notifyを使ってLINEメッセージを送信する方法について解説しています。宜しければご覧ください!