miso_soup3 Blog

主に ASP.NET 関連について書いています。

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 のレスポンスをツイートさせます。

f:id:miso_soup3:20150325115640p:plain


始めに、Azure SDK 2.5.1 をインストールしておきます。

Visual Studio で、ファイル>新規>プロジェクト、「ASP.NET Web アプリケーション」を選択。

f:id:miso_soup3:20150325115727p:plain

テンプレートは「Azure API App」を選択。

f:id:miso_soup3:20150325115752p:plain

作成後のプロジェクト構成はこのようになっています。

f:id:miso_soup3:20150325115822p:plain

ASP.NET Web API 関連のファイルの他、「apiapp.json」「apiappconfig.azureresource.json」「SwaggerConfig.cs」等があります。
「apiapp.json」については Convert an existing API to an API app

定義されている NuGet パッケージは以下の通り。

f:id:miso_soup3:20150325115928p:plain

Swashbuckle は Swagger を生成するライブラリ。WebActivatorEx は Application の Startup 時に SwaggerConfig.cs の呼び出しのために必要。
(Swagger の設定は HttpConfiguration に登録すればいいはずなんだけど、何故 WebActivatorEx を使ってるんだろう?)

ApiController を定義します。
Book クラス:
f:id:miso_soup3:20150325120008p:plain
Books コントローラー:
f:id:miso_soup3:20150325120034p:plain
後でこのレスポンスの値をツイートさせます。

プロジェクトの右クリックから、発行>Microsoft Azure API App を選択(画像は色が変なのだけど)。
f:id:miso_soup3:20150325120121p:plain

API App を新規に作成するか既存のものを選択します。

f:id:miso_soup3:20150325120155p:plain
f:id:miso_soup3:20150325120237p:plain

その後、発行プロファイルがダウンロードされるので、再度発行します。(新規インスタンス作成の場合は再度行う必要があります。)

f:id:miso_soup3:20150325120308p:plain

f:id:miso_soup3:20150325120332p:plain

Visual Studio を離れ Azure のプレビューポータルから、「Marketplace」>「API アプリケーション」にて「Twitter Connector」を選択。
この時、リソースグループは先ほどの API App と同じものにします。

f:id:miso_soup3:20150325120413p:plain

f:id:miso_soup3:20150325120442p:plain


次に「Logic App」のインスタンスを作成。
リソースグループは、先ほどの API App と同じものにします。

f:id:miso_soup3:20150325120511p:plain

Logic App の管理画面(ブレード)を表示。
トリガーとして右側のパネルから「Recurrence」を選択。1時間に1回を設定。

f:id:miso_soup3:20150325120552p:plain

次に「Microsoft.ApiApp」というものを選択。これが先ほど発行した ASP.NET Web API の API App。
「Books_Get」メソッドを選択し、パラメーターは適当に「1」を設定。

f:id:miso_soup3:20150325120625p:plain

f:id:miso_soup3:20150325120659p:plain

次に右側のパネルから「Twitter Connector」を選択。Authorize ボタンが表示されているのでツイートしたいアカウントを認証。

f:id:miso_soup3:20150325120730p:plain

メソッドは、「Tweet」を選択し、パラメーターに「@body('webapplication6').Title」を入力。これは、前の API App のレスポンスの Title プロパティに値する(恐らく)。webapplication6 は API App の名前となる。
Create a Logic App

f:id:miso_soup3:20150325120815p:plain

最終的にはこんな形に。

f:id:miso_soup3:20150325120851p:plain

真ん中―ASP.NET Web API の API App の下半分に Books のメタ情報が表示されてもいいはずなのに、表示されないのは何か設定が足りないのだろうか?(Swagger を使ってるのだから読み込んでいいはずだけど)
あと、右端―Twitter Connector で Tweet Text に入力する際も Books のインテリセンスが出ていいはず。

設定後、「Run Now」をクリック。

f:id:miso_soup3:20150325120954p:plain

すると、ASP.NET Web API のメソッドが呼ばれ、レスポンスの値がツイートされます。


f:id:miso_soup3:20150325121021p:plain

Unicode でツイートされた…。
今日はここまで。