OpenAPI SwaggerでAPI仕様書を作成
今回はOpenAPI Swaggerを用いたAPI仕様書作成について、ご紹介させていただきます。
はじめに
OpenAPIとは
REST APIのインターフェースを記述フォーマットで、フォーマットに沿った記述をすることでAPIのエンドポイント、パラメータ、レスポンス等を文書化することができます。記述方法は後述します。
Swaggerとは
OpenAPI仕様で作られたオープンソースで、ツールは主に下記があります。
ツール | 概要 |
---|---|
Swagger Editor | OpenAPIの仕様を記述できるブラウザベースのエディタ |
Swagger UI | OpenAPIの仕様を動的なAPIドキュメントとしてレンダリングするツール |
Swagger Codegen | OpenAPI仕様からサーバースタブとクライアントライブラリを生成するツール |
今回はブラウザベースで視覚化して作業したいので、VScodeの拡張機能でSwagger Editorをインストールします。
API仕様書作成手順
- 各種ymlファイルを記述(今回はAPIエンドポイントを纏めたbase.ymlと派生した3ファイルを準備)
- VS Codeの拡張機能OpenAPI (Swagger) Editorにてプレビュー
- OpenAPIソースをhtmlファイルに書き出し
ディレクトリ構成
OpenAPIの仕様について、1ファイルに纏め書きが可能ですが今回は下記の構成で作成していきます。
├── api
│ └── (各種APIごとのディレクトリ)
│ ├── index.yml # API基本情報
│ ├── query.yml # クエリパラメータ
│ └── response.yml # 200レスポンスの返却内容
├── index.html # ymlファイルの内容を元に生成
└── base.yml # 全てのAPIエンドポイントを纏め
ファイル記述
base.yml
こちらのファイルにはドキュメントの大元の役割を担ってもらってます。
openapi: 3.1.0 # OpenAPIのバージョン指定
info: # APIの基本情報(タイトル、説明、バージョン等)を記述
title: OpenAPI仕様書サンプル
version: 1.0.0
description: OpenAPIによるAPI仕様書サンプルです。
license:
url: http://localhost:8000
servers: # APIがホストとするサーバーを記述
- url: "http://localhost:8000"
description: 内部の API Server 本体(仮)
paths: # APIドキュメントのエンドポイント
/api/search:
$ref: api/search/index.yml
/api/detail:
$ref: api/detail/index.yml
/api/store:
$ref: api/store/index.yml
今回はpaths内にapiエンドポイントごとにindex.ymlファイルを設定していきます。
index.yml
1つのAPIエンドポイントのテンプレートファイル。リクエストパラメータはquery.ymlを参照し、レスポンス200正常系の際の詳細レスポンスの参照先としています。
以下サンプルコードになります。
get: #APIエンドポイントに応じてpost,put等を指定
operationId: search #メソッド名
summary: 検索画面 #簡易的なAPI説明
description: サンプルデータを検索するAPI #APIの詳細な説明
parameters: #クエリパラメータ
$ref: "./query.yml"
responses: #レスポンス
"200":
description: OK
content:
application/json:
schema:
$ref: response.yml
"400":
description: Bad Request
"404":
description: Not Found
"500":
description: Internal Server Error
query.yml
こちらは名前の通り、APIに必要なクエリパラメータを記述します。
- name: id #パラメータ名
in: query #クエリパラメータならquery、パスパラメータならpath
description: id #クエリの説明
schema:
type: intger #クエリの型
example: 1 #サンプル値
- name: type
in: query
description: タイプ
schema:
type: array
items:
type: string
example: ['normal', 'error']
- name: date
in: query
description: 日付
schema:
type: date
example: '2024-10-01'
response.yml
レスポンス200正常系の返却値の詳細を記述します。
typeで返却の型を指定していくのがポイントです。
type: object
properties:
success:
title: 判定
description:
example: true
data:
title: 結果
description:
type: object
properties:
results:
type: array
items:
type: object
properties:
id:
title: id
type: integer
example: 11
type:
title: タイプ
type: string
example: 'normal'
date:
title: 日付
type: date
example: '2024-10-01'
OpenAPI (Swagger) Editorでプレビュー
これでymlファイルは記述が終わりましたので問題ないか、先ほどインストールしたVScodeの拡張機能で確認します。
ブラウザベースの視覚化は[Shift] + [alt] + p(Macは[Command] + [Shift] + p)で可能です。
先ほど記述した/api/searchの記述の中身も問題ないか確認します。
HTMLファイルに書き出し
最後に記述したOpenAPIソースをhtmlファイルに書き出していきます。
今回API書き出しのためにnpmのredocly/cliを使用していきます。※npmとnodeがグローバルインストールされている必要があります。
npm install -g @redocly/cli
インストールができましたら、base.ymlが存在するディレクトリで下記コマンドを実行してhtmlファイルの書き出しを行います。
redocly build-docs base.yml --output index.html
無事コマンドが実行出来ましたら下記が表示されます。
それでは書き出ししたhtmlファイルを確認しましょう。
まとめ
このように簡単な記法だけでAPI仕様書を作成することができます。
今回は役割ごとにファイルを分けて仕様書を作成しましたが、前述通りbase.ymlファイル等に記法守って纏めて書き出すことも可能です。
手元にVScodeと拡張機能を入れるだけでOpenAPIに記述確認はできるので是非試してみてください。
参考文献
Discussion