ASP.NET Web API を Azure の API App として動かす
3/25 に発表された Azure App Service の Logic App と API App の組み合わせを試してみました。詳細は ブチザッキ Azure App Service | ブチザッキ、
MSDN Blogs などをどうぞ。
気になった内容は以下の通り。
- Visual Studio にて Swagger のクライアントコード生成が可能に(Swagger のファイル、または Azure API App から)。
- Portable Class Library 対応。
- API App のプロジェクトテンプレートは、Swagger の追加のために Swashbuckle ライブラリを使用。
サンプル
ここでは、ASP.NET Web API で自分のロジックを記述した API App と、Azure のマーケットプレイスにある Twitter Connector という API App を組み合わせて、Twitter にツイートする処理を Logic App で構築したいと思います。
ASP.NET Web API で呼び出した API のレスポンスをツイートさせます。
始めに、Azure SDK 2.5.1 をインストールしておきます。
Visual Studio で、ファイル>新規>プロジェクト、「ASP.NET Web アプリケーション」を選択。
テンプレートは「Azure API App」を選択。
作成後のプロジェクト構成はこのようになっています。
ASP.NET Web API 関連のファイルの他、「apiapp.json」「apiappconfig.azureresource.json」「SwaggerConfig.cs」等があります。
「apiapp.json」については Convert an existing API to an API app
定義されている NuGet パッケージは以下の通り。
Swashbuckle は Swagger を生成するライブラリ。WebActivatorEx は Application の Startup 時に SwaggerConfig.cs の呼び出しのために必要。
(Swagger の設定は HttpConfiguration に登録すればいいはずなんだけど、何故 WebActivatorEx を使ってるんだろう?)
ApiController を定義します。
Book クラス:
Books コントローラー:
後でこのレスポンスの値をツイートさせます。
プロジェクトの右クリックから、発行>Microsoft Azure API App を選択(画像は色が変なのだけど)。
API App を新規に作成するか既存のものを選択します。
その後、発行プロファイルがダウンロードされるので、再度発行します。(新規インスタンス作成の場合は再度行う必要があります。)
Visual Studio を離れ Azure のプレビューポータルから、「Marketplace」>「API アプリケーション」にて「Twitter Connector」を選択。
この時、リソースグループは先ほどの API App と同じものにします。
次に「Logic App」のインスタンスを作成。
リソースグループは、先ほどの API App と同じものにします。
Logic App の管理画面(ブレード)を表示。
トリガーとして右側のパネルから「Recurrence」を選択。1時間に1回を設定。
次に「Microsoft.ApiApp」というものを選択。これが先ほど発行した ASP.NET Web API の API App。
「Books_Get」メソッドを選択し、パラメーターは適当に「1」を設定。
次に右側のパネルから「Twitter Connector」を選択。Authorize ボタンが表示されているのでツイートしたいアカウントを認証。
メソッドは、「Tweet」を選択し、パラメーターに「@body('webapplication6').Title」を入力。これは、前の API App のレスポンスの Title プロパティに値する(恐らく)。webapplication6 は API App の名前となる。
Create a Logic App
最終的にはこんな形に。
真ん中―ASP.NET Web API の API App の下半分に Books のメタ情報が表示されてもいいはずなのに、表示されないのは何か設定が足りないのだろうか?(Swagger を使ってるのだから読み込んでいいはずだけど)
あと、右端―Twitter Connector で Tweet Text に入力する際も Books のインテリセンスが出ていいはず。
設定後、「Run Now」をクリック。
すると、ASP.NET Web API のメソッドが呼ばれ、レスポンスの値がツイートされます。
Unicode でツイートされた…。
今日はここまで。