
もくじ
openapi3系で書きます
バージョン違うとエラーが出ます。
最新で頑張るのだ!(。- .•)
Swagger EditorでDeleteを定義したけれど、delete_flg, invalid_flgといった論理削除や論理無効化で処理することが多いっぽい。だから実践ではDeleteメソッドは利用せず、PUTメソッドを利用したUPDATE処理で論理削除を行うことが多いのだろうな。
@see
- OpenAPI Specification 3.0 チートシート(外部サイト)
- ReDoc(外部サイト)
SwaggerのyamlをHTMLドキュメントに変換してくれるサービス
CRUDが一通りできた

openapi: 3.0.0
info:
title: ポケモンで学ぶSwagger(OpenAPI) + Laravel API
version: 1.0.1
servers:
- url: http://localhost/api/v1_01
tags:
- name: master
description: ユーザ情報API
paths:
/master/getProfiles:
get:
summary: ユーザ情報一覧取得
description: |
tags:
- master
parameters:
- in: query
name: master_id
required: false
schema:
type: integer
format: int64
example: 999
responses:
'200':
description: 成功時のレスポンス
content:
application/json:
schema:
type: object
properties:
profile:
$ref: '#/components/schemas/MasterProfile'
action:
$ref: '#/components/schemas/MasterAction'
/master/getProfile/{master_id}:
get:
summary: ユーザ情報を指定して取得
description: |
tags:
- master
parameters:
- in: path
name: master_id
required: true
schema:
type: integer
responses:
'200':
description: 成功時のレスポンス
content:
application/json:
schema:
type: object
properties:
profile:
$ref: '#/components/schemas/MasterProfile'
action:
$ref: '#/components/schemas/MasterAction'
'400':
description: 禁止・無効なユーザーID
'404':
description: ユーザーが見つけられません。
/master/storeProfile:
post:
summary: ユーザ情報を登録
description: |
tags:
- master
requestBody:
content:
application/json:
schema:
type: object
properties:
name:
type: string
format: string
age:
type: integer
format: int64
example:
name: "yuu"
age: 12
responses:
'200':
description: 成功時のレスポンス
'400':
description: 禁止・無効なユーザーID
'404':
description: ユーザーが見つけられません。
/master/updateProfile:
put:
summary: ユーザ情報を更新
description: |
tags:
- master
requestBody:
content:
application/json:
schema:
type: object
properties:
profile:
$ref: '#/components/schemas/UpdateMasterReq'
responses:
'200':
description: 成功時のレスポンス
'400':
description: 禁止・無効なユーザーID
'404':
description: ユーザーが見つけられません。
/master/destroy/{master_id}:
delete:
summary: ユーザ情報を指定して削除
description: |
tags:
- master
parameters:
- in: path
name: master_id
required: true
schema:
type: integer
responses:
'204':
description: 成功時のレスポンス
'400':
description: 禁止・無効なユーザーID
'404':
description: ユーザーが見つけられません。
'550':
description: その他のエラー
components:
schemas:
Master:
type: object
properties:
id:
type: integer
format: int64
name:
type: string
age:
type: integer
UpdateMasterReq:
type: object
required:
- master_id
properties:
master_id:
type: integer
name:
type: string
age:
type: integer
example:
master_id: 999
name: "yuu"
age: 12
MasterProfile:
type: object
properties:
name:
type: string
format: string
description: ユーザ名
example: "yuu"
age:
type: integer
format: int64
description: ユーザの年齢
example: 12
MasterAction:
type: object
properties:
dougu:
type: object
properties:
name:
type: string
description: アイテム名
format: string
example: "きずぐすり"
pokemon:
type: object
properties:
name:
type: string
format: string
description: ポケモン名
components
- 2回以上利用するオブジェクトはcomponentsで定義して、使いまわせるようにします。
- 404などのサーバレスポンスもcomponentsで定義するとすっきりします。
定義
components:
schemas:
Master:
type: object
properties:
id:
type: integer
format: int64
name:
type: string
age:
type: integer
componentsでMasterを定義
参照方法
responses:
'200':
description: 成功時のレスポンス
content:
application/json:
schema:
type: object
properties:
profile:
$ref: '#/components/schemas/MasterProfile'
$ref: ‘#/components/schemas/MasterProfile’で階層型で指定します。
JWTのログインAPI機能を定義する

ここを見るですね。
https://swagger.io/docs/specification/authentication/bearer-authentication/
ログイン周りも追加
完成系
順番も整理しました。
- サマリー情報定義
・openapi: 3.0.0
・info:
・servers:
・tags: - components定義
・ログイン系
・securitySchemes:
・requestBodies:
・RefreshToken:
・レスポンス
・responses:
・スキーマ
・schemas: - パス定義
・paths
openapi: 3.0.0
info:
title: ポケモンで学ぶSwagger(OpenAPI) + Laravel API
version: 1.0.1
servers:
- url: http://localhost/api/v1_01
tags:
- name: login
description: ログイン
- name: master
description: ユーザ情報操作
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: Credentials or access token for API
bearerFormat: JWT
requestBodies:
Account:
required: true
content:
application/json:
schema:
type: object
properties:
id:
type: string
description: アカウントIDを表す文字列
example: 'yuuSan55'
password:
type: string
description: アカウントのパスワードを表す文字列
example: 'P@ssw0rd'
required:
- id
- password
RefreshToken:
required: true
content:
application/json:
schema:
type: object
properties:
refresh_token:
type: string
description: リフレッシュトークンを指定します。
example: example_refresh_token
required:
- refresh_token
responses:
400BadRequestError:
description: リクエスト不正の際のエラーレスポンス
content:
application/json:
schema:
type: object
properties:
error:
type: object
description: エラーを表すオブジェクト
properties:
error_code:
type: number
description: |
エラーコードをあらわす数値
* 400001 - リクエストの形式が間違っています。必須の入力項目が足りない。
example: 400001
message:
type: string
description: エラーメッセージを表す文字列
example: リクエスト形式が間違っています。
401LoginError:
description: |
認証エラーを表すエラーコード
* IDもしくはパスワードが間違っている
content:
application/json:
schema:
type: object
properties:
error:
type: object
description: エラーを表すオブジェクト
properties:
error_code:
type: number
description: |
エラーコードを表す数値
* 401001 - ログインIDもしくはパスワードが間違っている
* 401002 - アカウントがロックされている。(n回連続ログイン失敗でブロック。1時間後に解除します。)
example: 401001
message:
type: string
description: エラーメッセージをあらわす文字列
example: 認証に失敗しました。IDとパスワードを確認してください。
401TokenRefreshError:
description: 認証系エラーレスポンス
content:
application/json:
schema:
type: object
description: エラーを表すオブジェクト
properties:
error:
type: object
properties:
error_code:
type: number
description: |
エラーコードを表す数値
* 401001 - リフレッシュトークンが無効
* 401002 - リフレッシュトークンの有効期限切れ
example: 401001
message:
type: string
description: エラーメッセージを表す文字列
example: 無効なリフレッシュトークン
403LoginError:
description: アクセス禁止エラーレスポンス
content:
application/json:
schema:
type: object
properties:
error:
type: object
description: エラーを表すオブジェクト
properties:
error_code:
type: number
description: |
エラーコードを表す数値
* 403001 - アカウントが停止されている
* 403002 - アカウントが退会している
example: 403001
message:
type: string
description: エラーメッセージを表す文字列
example: このユーザは退会しています。
403AcountBanError:
description: アクセス禁止エラーレスポンス
content:
application/json:
schema:
type: object
properties:
error:
type: object
description: エラーを表すオブジェクト
properties:
error_code:
type: number
description: |
エラーコードを表す数値
* 403001 - アカウントが停止されています
example: 403001
message:
type: string
description: エラーメッセージを表す文字列
example: アカウントが停止されています。
schemas:
Token:
type: object
description: トークンを表すオブジェクト
properties:
access_token:
type: string
description: |
* トークンのオブジェクトを定義
* アクセストークン, リフレッシュトークンを定義
* 30分でアクセストークンは期限切れとなり、リフレッシュトークンによって新規のアクセストークンを取得します。
example: hoge_access_token
refresh_token:
type: string
description: |
example: hoge_refresh_token
Master:
type: object
properties:
id:
type: integer
format: int64
name:
type: string
age:
type: integer
del_flg:
type: integer
description: |
アカウントが削除されているかを表す整数
0: アカウントがアクティブ
1: アカウント削除済
invalid_flg:
type: integer
description: |
アカウントが有効、無効を表す整数
0: アカウント有効
1: アカウント無効化済
example: 0
MasterProfile:
type: object
properties:
id:
type: integer
format: int64
description: ユーザidを表す整数
example: 999
name:
type: string
format: string
description: ユーザ名を表す文字列
example: "yuu"
age:
type: integer
format: int64
description: ユーザの年齢を表す数字
example: 12
MasterAction:
type: object
properties:
dougu:
type: object
properties:
name:
type: string
description: アイテム名を表す文字列
example: "きずぐすり"
pokemon:
type: object
properties:
name:
type: string
example: "ピカチュウ"
description: ポケモン名を表す文字列
UpdateMasterReq:
type: object
required:
- master_id
properties:
master_id:
type: integer
name:
type: string
age:
type: integer
example:
master_id: 999
name: "yuu"
age: 12
security:
- bearerAuth: []
paths:
/login:
post:
security: []
summary: アカウントログイン実行
description: |
アカウントでログインを実行する
tags:
- login
requestBody:
$ref: '#/components/requestBodies/Account'
responses:
'200':
description: Success Response
content:
application/json:
schema:
type: object
properties:
token:
$ref: '#/components/schemas/Token'
profile:
$ref: '#/components/schemas/MasterProfile'
'400':
$ref: '#/components/responses/400BadRequestError'
'401':
$ref: '#/components/responses/401LoginError'
'403':
$ref: '#/components/responses/403LoginError'
/refresh-token:
post:
security: []
summary: トークンをリフレッシュします。
description: |
リフレッシュトークンを得て、新しいアクセストークンとリフレッシュトークンを払い出します。
tags:
- login
requestBody:
$ref: '#/components/requestBodies/RefreshToken'
responses:
'200':
description: Success Response
content:
application/json:
schema:
$ref: '#/components/schemas/Token'
'400':
$ref: '#/components/responses/400BadRequestError'
'401':
$ref: '#/components/responses/401TokenRefreshError'
'403':
$ref: '#/components/responses/403AcountBanError'
/master/getProfiles:
get:
summary: ユーザ情報一覧取得
description: |
tags:
- master
parameters:
- in: query
name: master_id
required: false
schema:
type: integer
format: int64
example: 999
responses:
'200':
description: Success Response
content:
application/json:
schema:
type: object
properties:
profile:
$ref: '#/components/schemas/MasterProfile'
action:
$ref: '#/components/schemas/MasterAction'
'400':
$ref: '#/components/responses/400BadRequestError'
/master/getProfile/{master_id}:
get:
summary: ユーザ情報を指定して取得
description: ユーザ情報をmaster_idで指定して取得します。
tags:
- master
parameters:
- in: path
name: master_id
required: true
schema:
type: integer
responses:
'200':
description: Success Response
content:
application/json:
schema:
type: object
properties:
profile:
$ref: '#/components/schemas/MasterProfile'
action:
$ref: '#/components/schemas/MasterAction'
'400':
$ref: '#/components/responses/400BadRequestError'
/master/storeProfile:
post:
summary: ユーザ情報を登録
description: |
tags:
- master
requestBody:
content:
application/json:
schema:
type: object
properties:
name:
type: string
format: string
age:
type: integer
format: int64
example:
name: "yuu"
age: 12
responses:
'200':
description: Success Response
'400':
$ref: '#/components/responses/400BadRequestError'
/master/updateProfile:
put:
summary: ユーザ情報を更新
description: |
tags:
- master
requestBody:
content:
application/json:
schema:
type: object
properties:
profile:
$ref: '#/components/schemas/UpdateMasterReq'
responses:
'200':
description: Success Response
'400':
$ref: '#/components/responses/400BadRequestError'
/master/destroy/{master_id}:
post:
summary: ユーザ情報を指定して削除
description: |
tags:
- master
parameters:
- in: path
name: master_id
required: true
schema:
type: integer
responses:
'200':
description: Success Response
'400':
$ref: '#/components/responses/400BadRequestError'

