API Management (APIM) で Open API 仕様の API をインポートする方法

# はじめに
Azure API Management についてのメモ。
とりあえず、チュートリアルをやってみる。

- [API Management チュートリアル | MS 公式 Docs](https://docs.microsoft.com/ja-jp/azure/api-management/import-and-publish)

# 手順
## API のインポートと発行
### API Management (APIM) インスタンス作成

OpenAPI 仕様のバックエンド API を JSON 形式で Azure API Management に
インポートする方法について Azure Portal を使った実際の手順を進めていきます。

バックエンド API (JSON) を API Management にインポートした後は、
API Management API が バックエンド API の ファサード (Facad) になります。
この ファサード は、API Management でニーズに応じてカスタマイズ可能であり、
バックエンド API に触れずに作業を実行することができます。

Swagger Editor で JSON を開くと、今回インポートする予定の
 ``Demo Conference API`` を確認することができます。

<img width="1422" alt="image.png (236.9 kB)" src="https://img.esa.io/uploads/production/attachments/3505/2022/01/28/10862/e25e697a-d6d0-40d4-9b16-678264689515.png">

※ OpenAPI は RESTful API を記述するための仕様の１つ。
※ Facad (ファサード) : 「建物の正面」という意味を持つ英単語。
複雑な内部処理を隠蔽し、ユーザーにシンプルなUIを提供する目的を持つ。

1.Azure Portal で API Management サービスを検索、選択します。

<img width="900" alt="image.png (142.7 kB)" src="https://img.esa.io/uploads/production/attachments/3505/2022/01/28/10862/f7b19cd6-6e58-4908-98fa-ffe85997ad2c.png">

2.API Management サービスの作成を行います。

<img width="959.9999999999999" alt="image.png (224.0 kB)" src="https://img.esa.io/uploads/production/attachments/3505/2022/01/28/10862/84e14623-733f-4c06-b364-9464aa2ec110.png">

作成画面では、リソースグループの選択、API Management インスタンスを配置する リージョン、リソース名等を入力します。

<img width="778.56" alt="image.png (177.2 kB)" src="https://img.esa.io/uploads/production/attachments/3505/2022/01/28/10862/d33c77d2-a7e2-418b-abad-7863b4aea7da.png">

| 項目 | 入力値 |
| --- | --- |
| **プロジェクト詳細** | 
| サブスクリプション | 自動選択 (プルダウンで変更可) |
| リソースグループ | APIMTutorialRG (任意) |
| **インスタンスの詳細** | 
| リージョン |  Japan West (任意) |
| リソース名 | tutorial-apim (任意) |
| 組織名 | XXXXXXX (任意) |
| メールアドレス | XXXXXX (任意) |
| **Pricing tier** | 
| Pricing tier | Developer (no SLA) |

入力が完了したら、画面最下部の「確認および作成」ボタンを押します。
<font color="red">※ API Management インスタンスをデプロイ、アクティブにするまでに
　 30~40 分程度かかる場合があります。</font>

<img width="959.9999999999999" alt="image.png (259.8 kB)" src="https://img.esa.io/uploads/production/attachments/3505/2022/01/28/10862/08151f1c-222f-4d58-99e7-5adeb4e1cc13.png">

APIM インスタンスのデプロイが完了すると、概要を確認することができます。

### バックエンド API のインポートと発行

1.作成した API Management インスタンスページのメニューより、
「API」 を選択します。

<img width="244.79999999999998" alt="image.png (96.7 kB)" src="https://img.esa.io/uploads/production/attachments/3505/2022/01/28/10862/782cbe14-4e56-4696-b0b9-ccc144a60bbc.png">

2.[OpenAPI] を選択します。

<img width="936.9599999999999" alt="image.png (272.9 kB)" src="https://img.esa.io/uploads/production/attachments/3505/2022/01/28/10862/7152682a-dad4-4888-a119-80ab5f377c8b.png">

3.[Full] を選択します。

<img width="959.9999999999999" alt="image.png (252.5 kB)" src="https://img.esa.io/uploads/production/attachments/3505/2022/01/28/10862/d2bd4ba4-38f2-43ea-b0da-7e4c33c13a00.png">

4.各項目の値を入力して、[作成]ボタンを押します。

| 項目 | 入力値 |
| --- | --- |
| OpenAPI specification : Open API の仕様 | ``https://conferenceapi.azurewebsites.net?format=json``  |
| Display name : 表示名 |  開発者ポータルに表示される名前 (任意) |
| Name : 名前 |  API の名前 (任意) |
| Description : 説明文| API の説明文 (省略可) |
| URL scheme | HTTPS (API にアクセスできるプロトコル) |
| API URL suffix | API Management サービスのベースURL に付与されるサフィックス  |
| Tags | 検索、グループ、フィルターなどに使用するタグ |
| Products | Unlimited  |
| Gateways | Managed (API を公開する API ゲートウェイ) |

※ これらの項目は、Open API の仕様 (JSON) を読み込むと自動入力されます。

### Azure Portal を使って新しい API をテストする

1.API Management インスタンスページのメニューより、[API][Demo][Conference API] を選択
2.[Test] タブを選択後、[GetSpeakers] を選択します。

<img width="959.9999999999999" alt="image.png (297.8 kB)" src="https://img.esa.io/uploads/production/attachments/3505/2022/01/28/10862/9730a475-79c2-49ee-ae39-e831f1fb8d8e.png">

※ Ocp-Apim-Subscription-key には、この API が紐付けられているサブスクリプションキーの値が自動的に入力されます。

3.Template parameters > id の値に 1 を入力し、[Send] ボタンを押します。

<img width="956.16" alt="image.png (267.5 kB)" src="https://img.esa.io/uploads/production/attachments/3505/2022/01/28/10862/c47324f8-f531-4869-aed3-c76c8a17f207.png">

HTTP レスポンス値を確認すると、Status Code 200 が返ってきていて、
Microsoft の Scott Guthrie (スコット・ガスリー) さんの名前と紹介文が返ってきました。

<img width="1731.75" alt="image.png (170.3 kB)" src="https://img.esa.io/uploads/production/attachments/3505/2022/01/28/10862/204f9910-aec1-4712-88f1-094dae10f901.png">

ということで、Open API の仕様 (JSON) を読み込んで、API を発行することができました。