IBM API Connect 関連メモ - (4)各種APIの管理

# はじめに

IBM Cloud上のAPI Connectを試してみた時の作業ログです。
今回はAPI Connect上に登録されたAPIの管理操作について実施してみます。

## 関連記事

[IBM API Connect 関連メモ - (1)既存REST APIの取り込み](https://qiita.com/tomotagwork/private/d02f8e6092740b0e782f)
[IBM API Connect 関連メモ - (2)API Connectツールキットを使用したNode.jsアプリ作成(Loopback)](https://qiita.com/tomotagwork/private/7872ec8f99de57d7819a)
[IBM API Connect 関連メモ - (3)カタログ、開発者ポータルの構成](https://qiita.com/tomotagwork/private/da577551d7f4c50c4fd2)
[IBM API Connect 関連メモ - (4)各種APIの管理](https://qiita.com/tomotagwork/private/99e9b35227a0f80b2a91)
[IBM API Connect 関連メモ - (5)Secure Gateway経由でのz/OS Connectとの連携](https://qiita.com/tomotagwork/private/59e88b782bb72f1d0c1a)
[IBM API Connect 関連メモ - (6)API Connect-z/OS Connect間TLS接続](https://qiita.com/tomotagwork/private/c70b8566129e51c92423)
[IBM API Connect 関連メモ - (7)z/OS Connect 基本認証 + ID伝播](https://qiita.com/tomotagwork/private/38d41cbc01f92352f649)
[IBM API Connect 関連メモ - (8)z/OS Connect 連携におけるインターフェースの浄化](https://qiita.com/tomotagwork/private/0ec8d2224ad141756510)
[IBM API Connect 関連メモ - (9)z/OS Connect 連携まとめ](https://qiita.com/tomotagwork/private/a9fae53f02773a0c67b1)

# チュートリアル実施

## クライアント ID とクライアント秘密鍵による API の保護
参考: [クライアント ID とクライアント秘密鍵による API の保護 (IBM Cloud を使用する場合)](https://cloud.ibm.com/docs/apiconnect/tutorials?topic=apiconnect-tut_secure_id_secret_bm&locale=ja)

### セキュリティーの定義
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/452b2288-2e25-7036-4bea-0e7dead5c87a.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/c6c1b4ac-ef66-89c9-5e1a-fa5182669007.png)

以下のように2つのAPIキーの定義を追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/f5c4ce74-0083-a24d-a05a-c30c9aaa17a0.png)

セキュリティのセクションでも以下のように定義を追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/9d7431c3-9078-7445-6699-a7b97cdda625.png)

変更を保存します。

### アセンブルからテスト

アセンブルタブでテストアイコンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/7611871f-6d8f-518b-b7b9-9727d0cd96a4.png)

製品の再公開をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/1672b275-eeea-543d-17df-5de9bf9b338a.png)

呼び出し => OK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/b3d9b35e-09f1-7883-5bd0-d2e56e4d8581.png)

クライアントID, 秘密鍵を変更すると、401(Unauthorized)の応答が返ります。

### カタログ(Sandbox)からテスト
探索 - Sandboxを選択
Client ID, Client secret指定でcurrentをテスト => OK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/7e9d981b-1a34-3a55-5cb1-b40fbaf320d7.png)

Client ID, Client secretを無効なものに変更した場合は401(Unauthorized)の応答が返ることを確認

### Client ID, Secretの確認
テスト時には勝手に引っ張ってきてくれたけど、こちらから確認可能です。
ダッシュボード - カタログ(Sandbox) - 設定 - 概要から確認可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/bd4b3434-04fd-72d1-636e-bd9227113598.png)



## レート制限のセットアップ
参考: [レート制限のセットアップ](https://cloud.ibm.com/docs/apiconnect?topic=apiconnect-tut_rate_limit)

### デフォルトプランの確認

ドラフト - 製品 - Weather Provider API product (weather-provider-api-product) 1.0.0 を選択
プランの項目を確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/e1a00ed6-95e4-652d-3737-c2580ae42e52.png)

デフォルトのプランでは、1時間あたり100回の制限が設けられています。

### 新しいプランの作成

以下のようなプランを作成します。1分あたり10回の制限を指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/f9f82405-2c8e-42b9-7b47-9d18c8d5235a.png)

### カタログへのステージングと公開
変更を保存して、カタログ"Sandbox"にステージングします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/c5e59c1c-63d6-3668-826c-7acc9715839d.png)

ダッシュボード - カタログ"Sandbox"を選択し、先ほどステージングされた製品を公開します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/ce602710-9ccf-7d5c-61ba-cfa4b55ea4e9.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/d71ee363-7a6e-b9e7-a381-e8a11fa1c342.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/8c8e9e6a-1b41-aeaa-1bff-c67217998919.png)


## 開発ユーザーからのAPIの利用
管理者とは別のメールIDを使用して開発ユーザー(APIコンシューマー)を作成し、API利用の流れを確認してみます。
参考: [API の検出](https://cloud.ibm.com/docs/apiconnect/tutorials?topic=apiconnect-tut_discover_apis&locale=ja)

### 開発ユーザーの作成
Sandboxの開発者ポータルに接続して、Create an accountをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/f6e4b8a8-2702-9698-a56a-4cd096074f81.png)

管理者ユーザーとは別のメールIDを指定して作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/06d0cec1-c09a-a5dc-2d51-6ca33f77a4e6.png)

指定した開発者ユーザーとしてのメールアドレスにメールが飛ぶので、そこに指定されているURLをクリックしてユーザーを有効化すると、開発者ポータルに開発ユーザーとしてログインすることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/2e698349-cb38-0269-a211-42b0c3100772.png)

### 開発者ポータルでのアプリケーション作成
アプリケーションのメニューで、新しいアプリケーションの作成をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/a4611088-52ae-d0d6-e0c3-e65b40a53a4d.png)

タイトルを指定して送信
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/da2c354e-7935-96f9-fb4f-9ed696670bc1.png)

Client IDとSecretが作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/ba79a58f-77a2-8c99-ad7e-4979bc9abb9f.png)

この内容をコピーしておきます。

### APIのサブスクライブ

API製品から Weather Provider API productを選択し、上で作成したDemoプランの配信登録をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/3723025b-5ad5-0751-4d1b-9e66b4ef8ee4.png)

先ほど作成したアプリケーションを選択して登録
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/23448ee3-4a60-7453-14d0-e3e72d3b42b9.png)

メッセージを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/238a622b-7a35-8c40-f42b-be6d403ed197.png)

### API呼び出しテスト

左側のメニューからWeather Provider APIを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/f50289cd-0d2a-5c42-9070-1482b40666bc.png)

GET/currentのこの操作を試してみるの下にある、クライアントIDにMy Mobile App, クライアントシークレットに上でメモったSecretを指定し、zipcodeに90201を指定して、操作の呼び出しをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/5af97e04-2472-8606-9896-23e129af82d2.png)

レスポンスが正常に返ることを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/54da440c-dcf4-6a69-4fd0-be8352dee260.png)



### 汎用的なREST Clientツールからテスト

上で設定したセキュリティーとレート制限を、汎用的なREST APIテストツールを使って試してみたいと思います。

Chromeの[Talend API Tester](https://chrome.google.com/webstore/detail/talend-api-tester-free-ed/aejoelaoggembcahagimdiliamlcdmfm)というテストツールからAPIを発行してみます。

単発実行 => OK!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/c6437587-7a98-2118-7498-fc3fc151dedb.png)

Client ID, Secretを適当な値にすると401(Unauthorized)が返るので、きちんとセキュリティーの設定が効いていることが確認できました。

次に、立て続けに実行して、1分以内に10回以上実行してみます。
プランで指定された流量制御の制限にひっかかると、HTTPレスポンスコードとして429(Too Many Requests)が返されました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/599a5d99-d25d-be40-4074-605da351dd8e.png)



## APIのバージョン管理
APIを変更した場合にその変更を反映させる操作として、置換(Replace)と取り替え(Supersede)という2種類があるようです。
それぞれのチュートリアルの内容を見ると、前者がサブスクリプションのマイグレーションまで自動で実行される、後者がサブスクリプションのマイグレーションは手動で実行しなければならないっぽい。


|操作               | 旧バージョンの製品ステータス | 新バージョンの製品ステータス |サブスクリプションのマイグレーション|
|------------------|-------------------------- |--------------------------|-------------------------------|
|置換(Replace)      | 廃棄                      | 公開                     |強制的に自動実行される            |
|取り替え(Supersede)| 非推奨                     | 公開                     |手動で実行する必要あり            |

"置換"の方はあるタイミングで新しいAPIに完全に移行、"取り替え"の方は旧APIと新APIが共存しながら適宜移行していくような使い分けのようです。


### API製品の置換(Replace)
参考: [API 製品の置換](https://cloud.ibm.com/docs/apiconnect?topic=apiconnect-tut_manage_replace)

#### APIのバージョン変更
ドラフトからAPI - Weather Provider APIを選択し、バージョン情報を1.0.0 => 2.0.0に変更し、保存
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/01dbcd57-27d0-d2ea-1c9b-67a8012f957c.png)

#### 製品のバージョン変更
ドラフトから製品 - Weather Provider API productを選択し、バージョン情報を1.0.0 => 2.0.0に変更し、保存
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/9d1a19f1-3d8e-d47c-0984-2eb0008148c4.png)

#### 置換(Replace)実行

バージョンを変更した製品をカタログ"Sandbox"にステージング
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/62220f61-a873-2749-3b2b-87b2b1b44fee.png)

ダッシュボードからカタログ"Sandbox"を選択し、ステージングされたV2.0.0の製品のメニューから「既存の製品の置換」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/ab89cd25-423f-6ce1-d914-15f4186edf33.png)

v1.0.0の製品を選択して次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/914d7716-b5be-8fb6-f653-5c0ec74a1789.png)

プランごとに置き換え対象プランを指定して置換
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/d6afc799-d806-8000-b068-2aefc87f49ec.png)

旧バージョンの製品が廃棄済みとなり、新バージョンの製品が公開済みとなりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/c8df6f25-c8d9-ae80-8df3-9647883f359a.png)


#### 開発者ポータルでの確認
開発ユーザーで開発者ポータルにログインしてみると、製品、APIともに2.0.0になっていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/bf10247c-3121-ea1d-e6fb-7d733dce6661.png)

### API製品の取り替え(Supersede)
参考: [API 製品の取り替え](https://cloud.ibm.com/docs/apiconnect?topic=apiconnect-tut_manage_supercede)

#### APIのバージョン変更
ドラフトからAPI - Weather Provider APIを選択し、バージョン情報を2.0.0 => 3.0.0に変更し、保存
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/655cc3e6-2004-6233-cb6d-758c3e4238f4.png)

#### 製品のバージョン変更
ドラフトから製品 - Weather Provider API productを選択し、バージョン情報を2.0.0 => 3.0.0に変更し、保存
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/88b07d3a-19f2-a424-ec77-41d37d333f96.png)

#### 取り替え(Supersede)実行
バージョンを変更した製品をカタログ"Sandbox"にステージング
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/a2dae509-090d-17ef-d9ea-e66e2be19e1b.png)

ダッシュボードからカタログ"Sandbox"を選択し、ステージングされたV3.0.0の製品のメニューから「既存の製品の取り替え」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/30335c3c-c027-b574-60d8-ceca5b68bd70.png)

v2.0.0の製品を選択して次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/16299fad-8229-b3e6-ff85-603ccb2ebaa0.png)

プランごとに置き換え対象プランを指定して取り替え
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/cb0de425-5a5d-f30d-568c-ce65a24c9940.png)

旧バージョンの製品が非推奨となり、新バージョンの製品が公開済みとなりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/df1577c4-6f93-d943-b183-4561317c1fed.png)

#### 開発者ポータルでの確認(1)
この時点で、開発ユーザーで開発者ポータル画面を確認すると...
アプリケーションの項目を見ると、"新しいバージョンが公開されています"というメッセージが出ています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/9e27f02e-8f3b-9edd-a0b3-860ac5ad0025.png)
マイグレーションのボタンもあるので、開発者側が手動でマイグレーションすることもできそうです。

API製品を見ると、V2.0.0, V3.0.0両方表示され、V2.0.0は非推奨と記載されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/dc25ae00-e5c1-11d8-5303-2bd3b6950ec8.png)


#### サブスクリプションのマイグレーション
管理者側のIBM Cloudの画面に戻って、ダッシュボードからカタログ"Sandbox"を選択し、コミュニティーのメニューを選択します。
サブスクリプションから、Weather Provider API product 2.0.0, Demoの右側のメニューから管理を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/94764678-29ef-c6b6-e636-a1cea15bec9e.png)

マイグレーション先の3.0.0を選択して次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/7ac5d96e-159e-a72c-92ce-2efcd9b339a8.png)

プランを選択してマイグレーション
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/63ffb233-9a72-9844-cc20-410d1c468e8b.png)

マイグレーションされました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/22afa656-2457-2f05-75f0-a1e1538761db.png)


#### 開発者ポータルでの確認(2)
再度、開発ユーザーで開発者ポータルを確認してみます。
アプリケーションには新しい製品のプランが紐づいています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/edbd1b0e-1af0-2728-fa5d-8bc05f1a6b4f.png)

API製品には新バージョンの製品のみ表示されるようになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/495f85b2-a284-1a50-293b-6de046077827.png)


## 分析

参考: [基本的な分析を行って洞察を深める](https://cloud.ibm.com/docs/apiconnect?topic=apiconnect-tut_insights_analytics)

ダッシュボードからカタログ"Sandbox"を選択し、分析を選択します。
右上のTimepickerアイコンから参照範囲を指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/25609145-1f62-9bbd-954d-8febc5bd1e79.png)

デフォルトでは、利用頻度上位5つの製品、APIがグラフ表示されます。

検索窓の右側のLoad Saved Dashboardアイコンから、api_defaultを選択してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/8c155eab-c21e-bf49-1f9c-3f29480e7b3f.png)

各種API実行状況を表すグラフが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/bbf9cf4d-da3e-75dd-d71d-e2c4acc7f9f4.png)