Morning Girl

Web API, Windows, C#, .NET, Dynamics 365/CRM etc..

LogicAppsでHTTPコネクタを使う時、SwaggerSpec(OpenAPI)を挟むと楽ができるよというお話

SwaggerってなんとなくAPIを開発する側やAPIを使ってプログラミングする側が嬉しいよねー、っていうシチュエーションで語られることが多いと思うんですが、今ローコードな界隈でも結構役立ちます。

Swagger なにそれ? みたいな方は以下の記事をどうぞ。

bit.ly

その一例がMicrosoftが提供している「LogicApps」での活用です。

https://azure.microsoft.com/ja-jp/services/logic-apps/

f:id:sugimomoto:20190524232549p:plain

LogicAppsではフローチャートを描くようにGUIベースでデータ統合処理を開発することができる、PaaS基盤です。

標準のHTTPコネクタはこんな感じ

LogicAppsは標準でも数多くのSaaSクラウドサービス・DBに接続するためのコネクタが提供されていますが、標準提供以外のWeb APIなどと連携するために「HTTP」コネクタが用意されています。

コネクタを開くと、おそらくPostmanなどを普段使う人にとっては馴染み深い画面が表示されます。 「あー、Method選んで、URI書いて、ヘッダー書いて、URLパラメータとしてクエリ書けばいいのね。ふむふむ」みたいな人はこれで済みますが、そういったことに馴染みが薄い人はなかなか大変です。

(知っている人でもちまちまドキュメントからコピペしてくるのは面倒だと思う)

f:id:sugimomoto:20190524232558p:plain

せっかくなのでこのAPIを通じてCustomer情報を取得して、Dynamics 365 に取引先担当者を作るための処理をGIF動画に撮ってみました。

https://s3-ap-northeast-1.amazonaws.com/cdatajbuilds/sugimototest/LogicApps/NormalHTTPRequest.gif

URLやヘッダー、パラメータを手打ちしなければいけず、また取得した本文も一度JSON解析をしなければいけないのが若干面倒ですね。(慣れてしまえばそんなことも無いかもだけど)

そこで HTTP + Swagger を使おう

そこで、Swagger ベースで公開されている API であればさくっとHTTPリクエストが使えるようになる「HTTP + Swagger」を使ってみます。

f:id:sugimomoto:20190524232616p:plain

https://s3-ap-northeast-1.amazonaws.com/cdatajbuilds/sugimototest/LogicApps/SwaggerHTTPRequest.gif

今回使うAPIは以下のとおりです。顧客情報であるCustomerリソースを取得・作成・更新・削除するエンドポイントを備えています。

https://decodeapiserverdemo.azurewebsites.net/api.rst

f:id:sugimomoto:20190524232624p:plain

このAPIの作り方は、以下のURLから。

kageura.hatenadiary.jp

このAPIではSwaggerで作られているのと同時にSwagger Specを取得するためのエンドポイントもサポートしています。以下のURLでアクセス可能。

https://decodeapiserverdemo.azurewebsites.net/api.rsc/@1q0E5n7v8V1k4r1U5g0e/$swagger

f:id:sugimomoto:20190524232711p:plain

これを「HTTP+Swagger」に取り込むと

f:id:sugimomoto:20190524232717p:plain

こんな感じで、APIの機能をリストアップ

f:id:sugimomoto:20190524232725p:plain

URLパラメータや認証処理なんかもさくっと選択して入力することができます。

f:id:sugimomoto:20190524232745p:plain

また予めレスポンスオブジェクトのフォーマットがわかっているのでそのままValueを取り出して、値を設定することができます。

f:id:sugimomoto:20190524232753p:plain

注意点

Swaggerを取り込むためのURLはCORSが許可されていないとLogicAppsがアクセスできないです。

もし、CORSが許可されていない場合は、Azure Storeageに配置してCORSを許可する方法があります。(ただちょっと面倒か)

Reference

docs.microsoft.com