Zoom APIへお試しリクエストを送る方法 (JWT・OAuth)

[XTechグループ Advent Calendar 2020](https://qiita.com/advent-calendar/2020/xtech-group)の7日目は、エキサイト株式会社 エンジニアの@aharenchiがお送りします。

# はじめに
オンライン会議やオンライン授業、オンライン飲み会など、人とのコミュニケーションはオンライン上が多くなってきました。
そんなオンラインコミュニケーションを楽しくするアプリを開発できるのだったらやってみたいと思うでしょう。
オンライン会議サービスのZoomでは無料でAPIを提供しており、APIを利用してMeetingの作成、ユーザ情報の作成、取得等様々なことを行うことが可能です。

「Zoom APIを使って面白いアプリを開発したい〜」と思い、次に[Zoom APIリファレンスページ](https://marketplace.zoom.us/docs/api-reference/zoom-api/meetings/meetings)を閲覧すると、ドキュメントと「Send a Test Request」と書かれたツールを見つけるでしょう。

![スクリーンショット 2020-12-06 6.27.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313327/cfe2b294-9fd6-04b0-bd3d-fc54fcfaa766.png)

「Send a Test Request」では、Zoom APIにリクエストを実際に送信できミーティングの作成等ができます。
つまり、Zoom APIのリファレンスページ内でドキュメントを読む事とAPIの機能の応答を確認する事の両方ができるのです。便利ですね。

そこで今回は、Zoom APIをすぐに試せるようになることを目的に、ZoomのAPI認可の種類と、リファレンスページ内の「Send a Test Request」の使い方について説明します。

# Zoom APIの利用準備

Zoomアカウント登録とアプリを作成する必要があります。

[Zoomの公式サイト](https://zoom.us/)でZoomアカウントを新規作成してください。
すでにアカウントがある方はZoomアカウントでログインし、[Zoom Developer Platform](https://marketplace.zoom.us/docs/guides)にアクセスしてください。

[Create an App](https://marketplace.zoom.us/develop/create)というボタンがあるのでクリックしてアプリを作成します。
Create Appページでは、アプリの種類を選択することができます。
Zoom APIを利用する場合は、JWTとOAuthどちらかを選択します。

![スクリーンショット 2020-12-06 3.44.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313327/d2d25aa2-e44f-8e18-fe20-c92ec468f968.png)

## Zoom APIの認可について

JWTとOAuthとはZoom APIの認可の種類です。
認可とは、Zoom APIがAPI利用者に該当ユーザのZoom情報を操作する権限(例：ユーザの代わりにmeeting作成する権限/ユーザ情報を取得する権限)があるかを確認することです。

では、JWTとOAuthについてざっくり説明します。

### JWT
アプリ作成時に発行されるAPI KeyとAPI Secretという鍵を使って認可を受けます。
操作できるZoomの情報は、そのアプリを作成したアカウントに所属するユーザの情報のみです。
Zoomでは1つのアカウントに複数のユーザを作成することができるのですが、そのアカウントに属するユーザの情報は操作することができます。
アプリを作成したアカウント以外のユーザに関してはZoom APIから操作できません。
個人用や1つの会社アカウントに属するユーザアカウントが利用するアプリをつくる場合は、JWTを選択するといいでしょう。

### OAuth
ユーザにブラウザログインしてもらい、Zoomの情報を操作することを認可してもらうことで実現します。
操作できるZoomの情報は、ブウザログインして認可をしたユーザの情報です。
不特定多数のZoomアカウントが利用するアプリをつくる場合は、OAuthを選択するといいでしょう。

![zoom jwt_oauth.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313327/72ece30f-4162-eb7d-245b-e8fac56325f1.png)

ざっくりJWTとOAuthについて分かったと思いますので、次はそれぞれのアプリの作成手順とTest Requestを実行する方法を説明します。

# JWTでのアプリ作成とTest Requestを実行する方法

JWT認可アプリを作成し、Zoom APIを利用してミーティング作成までを行います。

### 1. アプリ作成ページで、JWTを選択
[アプリ作成ページ](https://marketplace.zoom.us/develop/create)で、JWTを選択します。
### 2. 必要な情報を記入
以下の情報が入力必須なので記入していきます。
- アプリ名
- 会社名
- 開発者名
- 開発者のメールアドレス
### 3. App Credentialsページのデータを参照
通常は、API KeyとAPI Secretを使ってJWT Tokenを生成し認可を行いますが、すでに生成されたJWT Tokenも表示されています。
今回はすぐに試すことが目的なので、生成済みのJWT Tokenを使います。( ※ このJWT Tokenは本番アプリでは使用しないでください。)
API KeyとAPI Secretを使ったJWT Tokenを生成方法は[Zoomドキュメント](https://marketplace.zoom.us/docs/guides/auth/jwt)を参照ください。

![スクリーンショット 2020-12-06 5.38.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313327/ab2470b4-fe06-3d44-30b7-6d22ba9c1d2d.png)

### 4. Feature設定
Webhook通知を設定することができます。今回は設定しません。
### 5. Activation設定
アプリがアクティブになってることを確認できたら、App作成終了です。
### 6. Zoomミーティング作成
今回は、エンドポイント「/users/{userId}/meetings」を使って、インスタントミーティングを作成します。
[「/users/{userId}/meetings」のページ](https://marketplace.zoom.us/docs/api-reference/zoom-api/meetings/meetingcreate)にアクセスし、oauth_access_tokenにJWT Token、userIdにZoomアカウントのメールアドレスを記入します。Bodyにはミーティングの種類をインスタントとして記入します。

![スクリーンショット 2020-12-06 5.56.06のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313327/10c972a0-5c04-e219-c4d6-efbbce85d9e0.png)

![スクリーンショット 2020-12-06 5.56.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313327/870af0b4-4dfa-b63b-5f43-78bbc5214d1e.png)

Sendボタンをクリックするとレスポンスが返ってきます。レスポンスの中身にZoomURLが含まれており、そのURLにアクセスするとZoomミーティングを開始することができます！Zoomミーティング作成完了です！ぱちぱち👏

![スクリーンショット 2020-12-06 5.56.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313327/aa89973e-49ec-e956-767b-3913fa9b9684.png)

# OAuthでのアプリ作成とTest Requestを実行する方法
OAuth認可アプリを作成し、Zoom APIを利用してミーティング作成までを行います。

### 1. アプリ作成ページで、OAuthを選択
[アプリ作成ページ](https://marketplace.zoom.us/develop/create)で、OAuthを選択します。

### 2. OAuthアプリの設定
「Choose app type」ではZoom情報のアクセス範囲を設定できます。エンドポイントごとに、「Account-level app」か「User-managed app」か決まっているのでそれを確認して設定しましょう。「/users/{userId}/meetings」は「Account-level app」である必要があるので、それを設定します。

作成したアプリはマーケットプレイスに公開することができます。今回はお試し実行なので、公開設定はOFFにします。

![スクリーンショット 2020-12-06 6.26.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313327/22469495-7d09-b4d8-d5f0-eb5442a216ab.png)


### 3.リダイレクトURL、ホワイトリストURLを設定
通常はOAuthアクセストークンを受け取るURLを作成し、そのURLをリダイレクトURLとホワイトリストURLに設定します。今回はリファレンスページ内で実行するので、ZoomのURLを設定します。

App Credentialsページに記載されているClient IDとClient SecretはOAuthトークンを生成するために使います。今回はリファレンスページ内の「Send a Test Request」に貼り付けて使います。詳しいやり方はあとで説明します。

![スクリーンショット 2020-12-06 7.20.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313327/db02f69b-f782-d4b5-306f-d5262bc2e7f4.png)

### 4. 必要な情報を記入
以下の情報が入力必須なので記入していきます。
- アプリの短い説明
- アプリの説明詳細
- 開発者の名前
- 開発者の連絡

### 5. Feature設定
Webhook通知を設定することができます。今回は設定しません。

### 6. OAuth認可によってアクセスできる権限を設定
「+ Add Scopes」ボタンをクリックし、アクセス権限を設定しています。今回はミーティング作成をするので、ミーティングに関するアクセス権限を設定します。

![スクリーンショット 2020-12-06 6.47.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313327/6b1e5253-a58f-d037-2974-d26f2a75fb2a.png)

### 7. Activation設定
アプリがアクティブになってることを確認できたら、App作成終了です。

### 8. Zoomミーティング作成
今回は、エンドポイント「/users/{userId}/meetings」を使って、インスタントミーティングを作成します。
[「/users/{userId}/meetings」のページ](https://marketplace.zoom.us/docs/api-reference/zoom-api/meetings/meetingcreate)にアクセスし、「Get Access Token」をクリックします。

![スクリーンショット 2020-12-06 7.01.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313327/a3d91546-cddc-82ff-f1be-f6f4b10f2f13.png)

クリック後、下記の画像のようなモーダルが出てきます。App Credentialsページに記載されていたClient IDとClient Secretを記入して「Get Access Token」をクリックします。

![スクリーンショット 2020-12-06 7.00.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313327/94d6192c-b359-dacc-bae4-e6d97732956b.png)

そうすると新しいページが開き、認可を求めてくるのでクリックします。

![スクリーンショット 2020-12-06 7.07.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313327/a9b0b45b-d02c-c52d-7296-5aa1411ac143.png)

認可をしてリファレンスページに戻ると、oauth_access_tokenにOAuthアクセストークンが記入された状態になっています。
userIdにZoomアカウントのメールアドレス、Bodyにはミーティングの種類をインスタントとして記入します。

![スクリーンショット 2020-12-06 7.08.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313327/c6205ec3-8dc0-5641-dee5-a30d15fe68d7.png)

![スクリーンショット 2020-12-06 5.56.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313327/870af0b4-4dfa-b63b-5f43-78bbc5214d1e.png)

Sendボタンをクリックするとレスポンスが返ってきます。レスポンスの中身にZoomURLが含まれており、そのURLにアクセスするとZoomミーティングを開始することができます！Zoomミーティング作成完了です！ぱちぱち👏

![スクリーンショット 2020-12-06 7.16.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313327/4f5c09f2-0433-240e-0f09-610c78e6c1af.png)

# コード実装方法を知りたい方へ
今回はZoom APIリファレンスページ内にあるツールでの認可、実行方法について説明しました。
Zoom API認可・実行をコードで実装する方法を知りたい方は、それぞれサンプルコードが公式で用意されていますのでそちらをご覧ください。

OAut認可の実装方法
https://github.com/zoom/zoom-oauth-sample-app

JWT認可の実装方法
https://github.com/zoom/zoom-api-jwt

# おわりに

私がZoom APIを試しに利用する際に、どちらの認可を選んだほうがいいか悩んだり、すぐに試せるリファレンスページ内のテストツールの使い方を理解したのが時間をかけてドキュメントの読み込みをしたりコードを書いた後だったのでもっと早めに知りたかったと思いがあり、今回の記事を作成しました。

Zoom APIをこれから利用してみる方のお役に少しでもなれたらと思います。

XTechグループのアドベントカレンダーはまだまだ続きます。
明日の執筆担当は@ebi_さんです。引き続きお楽しみください。

採用情報はこちら↓
https://www.wantedly.com/companies/excite

# 参考文献
https://marketplace.zoom.us/docs/api-reference/using-zoom-apis
https://marketplace.zoom.us/docs/api-reference/testing-zoom-apis
https://www.cdatablog.jp/entry/2020/08/17/085924