Swagger StudioでAPI仕様書の作成とモックサーバー利用してみた

# フロントエンド開発のためにモックサーバーを使いたかった

フロントエンドのAPI実装をするにあたって、モックサーバーを作るためのツールを検索していたら、API仕様書作成ツールのSwaggerのサードパーティ製ライブラリのSwagger Studioで作成した仕様書のモックサーバーを簡単に利用できることを知った。
元々モックサーバー用のライブラリであるPrismが統合されているらしい。
## GUIで直感的にAPI定義できる

SwaggerではAPI仕様書をyamlファイルを書いて作成していくが、Swagger Studioを利用するとGUIで直感的に操作して定義を作成しそのコードを出力することができる。

### 実際に操作してみる

まずアカウントを作成ます。
[API Design & Documentation Management | Designing & Building OpenAPIs](https://stoplight.io/)
自分のワークスペースを作成したらプラスアイコンから新規プロジェクトを立ち上げる。
![Untitled.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1614172/ffd14e95-bbac-d034-af93-7e1920ba2fd8.png)
![Untitled2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1614172/9b839afb-295f-331e-abf7-d21b0d9fd31e.png)

今回はSampleAPIという名前で作成。
左上のプラスアイコンからメニューを開きAPIを選んで、APIを作成していく。
途中プレビューを押すと仕様書のフォーマットで確認することができる。
![Untitled 3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1614172/faab2b13-30a8-c072-3377-55f5c1469633.png)


### Modelを作成する

上記と同じプラスアイコンからModelを選んで作成します。
![Untitled 4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1614172/7eb8aec5-7449-f1e2-e555-1f01e5e370de.png)

GUIで直感的に定義していくことができます。
今回はオブジェクトの配列を返すAPIを定義しました。オブジェクトの中身はnumber型とstring型で定義します。
![Untitled 5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1614172/c45dcdb0-52bb-3db2-d3d9-784fd5078255.png)

### Responseを作成
プロジェクト作成時にデフォルトでエンドポイントが作成されているのですが、それを編集しました。エンドポイントのURLも自分の好きなものに変えられます。
今回試しにGetAPIのみ作成するので、GetでResponseを作っていきます。
Schemaで$refを選び、targetに先ほど作成したModelをプルダウンで選びます。
![Untitled 6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1614172/f50dd652-736f-83a6-07f5-427e084acf4d.png)

モックサーバーで取得できるexmpleを入れておきます。
デフォルトのものは削除して、下記のようなデータを作りました。
![Untitled 7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1614172/fa374f33-d80f-f7f6-2c1a-be3ff9944056.png)

### 全体の確認とコードの修正
全体的にみるとこんな感じです。
今回sampleなのでHeaderなどは入れてませんが、その辺も簡単に追加できそうです。
プレビューを押すと、仕様書の見た目で確認できます。
実際作成する仕様書はRedocを使いますので下記の見た目とは違いますが、内容の確認で使えます。
![Untitled 8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1614172/5aac7c8b-85b6-c775-1ff6-b299be5f9bdb.png)

プレビュー隣に警告がでている場合、警告の箇所をクリックすると、警告箇所のコードに飛ぶことができるので、そこを手修正します。
下記ではわざとヒトカゲのコメントの箇所にエラーを出しましたが、直すと警告が消えています。
![Untitled 9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1614172/33b1667f-37d9-50b9-6bc4-44bbcfbba9f5.png)
![Untitled 10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1614172/5ee01ca8-8f36-b16a-4e50-27230c455565.png)

## モックサーバーを利用して動作を確認する
GetAPIの定義が完成しましたので早速モックサーバーでAPIを取得してみます。
先ほどのプロジェクトで作ったAPIをPublishするとワークスペースで作成したAPIが確認できるようになります。
すでにBaseURLでLive serverとMock serverの記載があります。
![Untitled 11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1614172/53759ad2-9253-b50f-d770-cf51cf5c7afc.png)

APIの詳細を表示すると、なんと右側に取得するコードと結果sampleが。
sampleコードはいろんな言語に切り替えることもできます。
めっちゃ楽ですねぇ。。。
![Untitled 12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1614172/e2bfab17-1309-9eeb-0e40-a40b6c7c79a8.png)

Mock serverを選択してSend API Reqesutを押すとMock serverからResponseが帰ってきていることが確認できます。
Code sand boxで試しにAPI叩いても問題なく取得できました。
![Untitled 13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1614172/1cd31d13-791a-ea4a-824f-fefeebf5a720.png)


## API仕様書をHTML形式で保存する
作ったAPIの仕様書をHTMLの形式で共有しやすいように保存します。
ワークスペースの下記画面のエクポートでyamlのコードを出力できるのでそれをコピーしておきます。
![Untitled 14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1614172/6da1431a-2a64-954a-f26f-97f0c3e0c66f.png)

### yamlファイルを作成する
ファイルはVScodeの拡張機能でOpenAPIEditorがあるので、それで作ったファイルにコピペして保存している。修正ある場合はEditorでの修正も可能。
プレビューで仕様書の内容もみることができます。
別にこれを使わなくても普通に新規のyamlファイルを作成してコピペでもできると思いますが、自分でコードを書いていくことになったときどのみち使うかもしれないので、インストールしました。
ファイルはわかりやすくOpenAPIというディレクトリを作ってそこに保存しました。
![Unt15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1614172/3a8b062c-9e37-8261-ac2c-a3ec354d9492.png)

### CLIでymlファイルをHTMLに変換
demo [http://redocly.github.io/redoc/](http://redocly.github.io/redoc/)
HTMLの変換はRedocというツールを使って行います。
いろいろな機能があるようですが、CLIでコマンド叩くだけでyamlファイルをHTMLに変換してくれるということだったので、それを使います。
インストールしてHTMLを生成したいディレクトリ上で実行すれば、そのディレクトリ配下にHTMLファイルが生成さている。
```powershell
$ npm install -g redoc-cli
$ redoc-cli bundle openapi.yaml
```
実際生成されたHTMLを開くとこんな感じのおしゃれな仕様書ができました。
![Untitled 16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1614172/878552db-3f41-d4ae-85f1-241f67bd8359.png)

## さいごに
今回モックサーバーが必要だったので、そこから検索してSwaggerに行きつきましたが、APIの仕様書も作れるようになってよかったです。
しかも簡単。
実際複雑なAPIの構築にはまだまだ勉強必要そうですが、スピーディーにフロントの開発をするにはよいツールだなと思います。

## 参考にした記事
****本当に使ってよかったOpenAPI (Swagger) ツール****
[https://future-architect.github.io/articles/20191008/](https://future-architect.github.io/articles/20191008/)
**OpenAPI関連のサイト・ツールまとめ**
[https://gift-tech.co.jp/articles/round-up-openapi-tools/](https://gift-tech.co.jp/articles/round-up-openapi-tools/)
****SwaggerでRESTful APIの管理を楽にする****
[https://qiita.com/disc99/items/37228f5d687ad2969aa2](https://qiita.com/disc99/items/37228f5d687ad2969aa2)
****[Swagger] OpenAPI3.0で記述したAPI仕様書をHTMLとして出力する****
[https://qiita.com/godgarden/items/be420a8c165f4a0f3ad8](https://qiita.com/godgarden/items/be420a8c165f4a0f3ad8)
**Stoplight Studio を試す**
[https://blog.takeyuweb.co.jp/entry/2020/05/11/000000](https://blog.takeyuweb.co.jp/entry/2020/05/11/000000)
****【Swagger】Swagger Spec (yaml) の書き方 〜GET編〜****
[https://qiita.com/oden141/items/8591f47d67dca09cc714](https://qiita.com/oden141/items/8591f47d67dca09cc714)
CLIでモックサーバー作成してる記事↓
****【OpenAPI】Prismでモックサーバ作成****　[https://qiita.com/andynuma/items/bf043b5184d3826d0f92](https://qiita.com/andynuma/items/bf043b5184d3826d0f92)