AzureLogicAppsでAPI wrapper その2

GYAOのtsです。
我々のチームは、オールパブリッククラウドで、[Microservice Architecture](http://microservices.io/patterns/microservices.html)を採用した次期バックエンドを設計中です。


# 経緯
[前回の投稿](http://qiita.com/tstakano-yj/items/967edafec3a2be83e67f)でAzure LogicAppsとCognitive Services であるEmotionAPIを使用してAPIWrapperを作ってみたが、
テスト用にモックAPIを提供したりAPIのimplementationを切り替えたり、APIのキー発行したり、中央集権的にマイクロサービスを管理するためにはAPIGatewayがあったほうがいいかなと思っている。
候補としては下記

- [Amazon API Gateway](http://qiita.com/tstakano-yj/items/da0542c83a4d784de932)（Amazon）
- [Apigee](http://qiita.com/tstakano-yj/items/2a6c672990333795fcda)（GoogleCloud）
- APIManagement（Microsoft）（この投稿）

PaaSでは上記くらいがチームとして候補に上がったので実際に[前回](http://qiita.com/tstakano-yj/items/967edafec3a2be83e67f)作成したAPIWrapperと繋いでみることにする。

# 前段

今回つなぐAPIは、LogicAppsで作成したwebservice。
リクエストヘッダーで[EmotionAPI](https://www.microsoft.com/cognitive-services/en-us/emotion-api)、[FaceAPI](https://www.microsoft.com/cognitive-services/en-us/face-api)を切り替えられるように作成してある。LogicAppsは個人的にはパフォーマンス面が少し心配だが、そもそもEmotionAPI等に高いスループットを期待するケースはあまりないかと思うので今のところはよしとする。
デザイナ上は以下のような形になる。

<img width="1079" alt="スクリーンショット 2017-01-25 19.48.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/114329/0c6c3dc1-90b3-5659-69a2-61e5fc13fd13.png">

ヘッダーをdoactionというキーで探し、emotion,faceが入っていればそれぞれのAPIを実行して結果を返す。

# API Management

AzurePortalから

新規→APIManagementを選択

<img width="311" alt="スクリーンショット 2017-01-25 19.54.11.png" src="https://qiita-image-store.s3.amazonaws.com/0/114329/13ee23f1-15cd-f101-fe6f-500d33bfd421.png">

必要事項を入力したら、1つAPIが作成されるので、そのAPIのAPIプレビューを選択する。
<img width="245" alt="スクリーンショット 2017-01-25 19.58.21.png" src="https://qiita-image-store.s3.amazonaws.com/0/114329/4edd1c08-2bc6-c1e2-daf8-eab8e2bacc90.png">

ここにリストされているサービスに結合可能。なんでもできますね。
<img width="1114" alt="スクリーンショット 2017-01-25 20.00.54.png" src="https://qiita-image-store.s3.amazonaws.com/0/114329/3e1adbb5-9e74-1b91-516c-f20b93f58bab.png">

今回はLogicAppsを選択。Functionsもつながる予定ですね。確かにそうなったら楽しいな。
WADLってここまで知名度あったんですね。微妙な感じかと思っていました。今は皆Swaggerかと。

以下のような感じで作成。
<img width="875" alt="スクリーンショット 2017-01-25 20.09.09.png" src="https://qiita-image-store.s3.amazonaws.com/0/114329/acfb1247-5568-fe46-05d1-5f00561399e5.png">
※Browseからロジックアプリを選択すればほぼ補完されます。

下記のようにAPIManagementのデザイナが見れるようになると思う。今回はリクエストヘッダのdoactionにemotionかfaceという文字列が入るようにしたいのでFrontendの鉛筆マークを押して編集する。
<img width="1118" alt="スクリーンショット 2017-01-25 20.12.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/114329/ca0e12a3-1e4b-638c-e040-70f0464be91a.png">

headerのdoactionを追加して、save。「+ Add Value」を選択してemotionとfaceを入力する
<img width="881" alt="スクリーンショット 2017-01-25 20.19.09.png" src="https://qiita-image-store.s3.amazonaws.com/0/114329/4bf61296-c937-453c-3bbf-fc48f32fd3f4.png">
作業的には以上。

ドキュメントportalや、userの追加等の機能もあるので相当便利。
まずは発行者ポータルに行ってみる。
<img width="406" alt="スクリーンショット 2017-01-25 20.20.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/114329/d666ecf7-097d-9d49-2651-881e3c504ca1.png">
発行者ポータルではユーザーの管理やAPIのドキュメンテーションやその他もろもろができる。今回は割愛。そのまま右上のリンクからDeveloperPortalへ
<img width="431" alt="スクリーンショット 2017-01-25 20.36.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/114329/56a466ba-8c93-378b-c004-5a82eace708b.png">

APIsから自分の作ったAPIへ行ってみると、ドキュメントが作成されている。使用側にはこれを配布すれば良い。
<img width="786" alt="スクリーンショット 2017-01-25 20.37.36.png" src="https://qiita-image-store.s3.amazonaws.com/0/114329/46cd0692-0d0d-d2f1-2ed0-0c5fb46b85f1.png">
使用側がこれを使いたいときにはオーダーを発行できる。発行者側がオーダーを許可してキーが発行されるようなイメージ。許可は先程の発行者ポータルでできる。

このままDeveloperPotalからAPIを実行する事ができるので、Try it を押して見る。
<img width="720" alt="スクリーンショット 2017-01-25 20.42.18.png" src="https://qiita-image-store.s3.amazonaws.com/0/114329/502868c6-c4b5-c1d7-50e7-2118db113cbc.png">
ちゃんとdoactionが2択になっている。要求本文にEmotionAPIと同じようにjsonで画像URLを入力すれば普通に結果が返ってくる。

# 所感

APIManagement自体はまだほとんど試せていませんが、とても高機能で直感的です。
今後更に他のAzureのサービスと連携していくでしょうし、マイクロサービスの屋台骨になりそうな気がします。
お金とも相談ですが我々のチームでは採用は確定でしょうね。

ちなみにこの作業は[ベトナム出張中](http://qiita.com/tstakano-yj/items/505a664d4e2b1e0643d9)にカフェで違うPCで行いました。
![4635086464567134848-account_id=1.jpg](https://qiita-image-store.s3.amazonaws.com/0/114329/6a2a7ca7-1368-6eed-4005-230adc61c502.jpeg)

いろいろ問題もあると思いますが、時代は進化してますね。身一つあれば仕事ができる時代ですね。