@@ -30,11 +30,11 @@ Web API 自体の設計については範囲外としますが、[API 設計標
3030
3131:::
3232
33- ## ファイルフォーマット
33+ # ファイルフォーマット
3434
3535[ ファイルフォーマット規約] ( file_standards.md ) に準じる。
3636
37- ## 要素規約
37+ # 要素規約
3838
3939Swagger の基本構造は以下の、swagger・info・host・basePath・schemes・paths・definitions から構成される。
4040
@@ -124,11 +124,11 @@ definitions:
124124 example : " 2023-04-01T11:30:45.000Z"
125125` ` `
126126
127- ## swagger
127+ # swagger
128128
129129- ` 2.0` 固定とする
130130
131- # # info
131+ # info
132132
133133info オブジェクトには Web API に関するメタデータを記載する。
134134` title` , `description`, `version` を必須項目とする。
@@ -142,22 +142,22 @@ info オブジェクトには Web API に関するメタデータを記載する
142142| contact | | 連絡先情報 |
143143| license | | ライセンス情報 |
144144
145- # ## title
145+ # # title
146146
147147WebAPI の総称を記載する。システム名やサービス名 + API のような命名とすることを推奨する。
148148例. `X System API`
149149
150- # ## desctiption
150+ # # desctiption
151151
152152Web API が提供する機能の概要・想定する利用者やユースケース・制約などを記載する。
153153
154- # ## version
154+ # # version
155155
156156この API 仕様のドキュメントのバージョンを記載する。アプリケーションのバージョン(git tag やリリースで管理するようなバージョン)とは別である。
157157
158158本規約の推奨は `major.minor` 形式である。 `0.1 `固定で開発を進め、サービスのリリース時に `1.0` とし、その後の項目やオプション、パスの追加ごとに `1.1` などインクリメントしていく。もし他チームへのドキュメントの頻繁な共有が必要だれば、`1.0` のかわりに `2023.03.26` といった形式も許容する。
159159
160- # # host
160+ # host
161161
162162OpenAPI 3 系と異なり、 **Swagger では複数のホストを指定できない**。そのため host には開発環境(local, develop, staging, production というステージ区別であれば、develop)で用いる IP、ポート番号を指定する。他チームに提供するサンドボックス環境を用意する場合は、そのエンドポイントを指定しても良い。localhost などのローカル開発への向き先変更は、ツール側で対応している事が多く上書き可能なため記載しない。API 定義書は予期せぬタイミングで他チームに展開する必要がしばしばあり、お試しで触っても良い環境があることを示すことで情報量を増やし、円滑なコミュニケーションを促進することを狙いとする。
163163
@@ -173,7 +173,7 @@ host: localhost:8001
173173host: prod.api.example.com:80
174174` ` `
175175
176- # # basePath
176+ # basePath
177177
178178作成する Swagger 定義の URL パスの全てで、共通するプレフィックスを持つ場合に指定する。Swagger の仕様上、先頭には `/` が必須であるため、以下のように定義する。
179179
@@ -186,7 +186,7 @@ basePAth: /api/v2
186186basePath: v2
187187` ` `
188188
189- # # schemes
189+ # schemes
190190
191191最終的に利用するスキーマのみを記載する。通常、HTTP 通信での Web API 提供は行わないと考えられるため、 `https` 固定で設定する。ローカル開発では `http` を指定することも多いが、ツールで生成されたコードのオプションで通常書き換えが可能なため、`http` の併記は許可しない。ただし、サーバサイドのマイクロサービス同士の通信で、VPC(プライベートセグメント)内であり、SSL 通信を本当に利用しない場合は `http` と記載する。
192192
@@ -203,7 +203,7 @@ schemes:
203203
204204もし、WebSocket スキームを提供するサービスの定義である場合は、`wss` を(追加で)指定する。定義上は `https` 側との共存ができないため、ファイル定義を分けるようにする。
205205
206- # # security, securityDefinitions
206+ # security, securityDefinitions
207207
208208Swagger では、次の認証タイプを記載できる([詳細](https://swagger.io/docs/specification/2-0/authentication/))。
209209
@@ -231,7 +231,7 @@ paths:
231231 - OAuth2: []
232232` ` `
233233
234- # # produces
234+ # produces
235235
236236Web API が応答する際の MIME タイプを指定します。未指定の場合に、コード生成などツール側で予期しない動作をすることがあるため、固定で指定する。新規構築の Web API であれば `application/xml` は不要と通常は考えられるので、`application/json` を記載する。また、[RFC 7807 Problem Details for HTTP APIs](https://www.rfc-editor.org/rfc/rfc7807) では Content-Type に `application/problem+json` を設定するとあるが、一部のコード生成ツールにおいて、 `application/problem` と `application/problem+json` の使い分けが難しいため、併記を必須としない。OpenAPI Specification の 3 系ではステータスコードごとに Content-Type を指定できるため、3 系への移行も検討する。
237237
@@ -264,7 +264,7 @@ paths:
264264 type: file
265265` ` `
266266
267- # # consumes
267+ # consumes
268268
269269Web API が要求を受け入れる際の MIME タイプを指定する。未指定の場合に、コード生成などツール側で予期しない動作をすることがあるため、固定で指定する。新規構築の Web API であれば `application/xml` は不要と通常は考えらえるので、`application/json` だけ記載する。
270270
@@ -276,7 +276,7 @@ consumes:
276276 - application/json
277277` ` `
278278
279- # # tags
279+ # tags
280280
281281タグを用いて、API 操作をグループ化することができる。ドキュメントやツールにとって非常に重要であるため、 **必須** で指定する。
282282
@@ -305,7 +305,7 @@ tags:
305305 - name: UserAccount
306306` ` `
307307
308- # # paths
308+ # paths
309309
310310` paths` 配下に個々の API エンドポイントを記載する。
311311
@@ -320,7 +320,7 @@ Paths # API定義全体
320320 └ Response # ステータスコードに応じたレスポンス
321321` ` `
322322
323- # ## Paths > Path
323+ # # Paths > Path
324324
325325記載順は以下のルールである。
326326
@@ -356,7 +356,7 @@ paths:
356356 ...
357357` ` `
358358
359- # ## Paths > Path > Operation
359+ # # Paths > Path > Operation
360360
361361URL に紐づく HTTP メソッドで、1 つの操作を定義します。
362362
@@ -389,7 +389,7 @@ URL に紐づく HTTP メソッドで、1 つの操作を定義します。
389389 responses: ...
390390` ` `
391391
392- # ## Paths > Path > Parameter
392+ # # Paths > Path > Parameter
393393
394394リクエストの定義を記載する。
395395
@@ -476,7 +476,7 @@ URL に紐づく HTTP メソッドで、1 つの操作を定義します。
476476 ...
477477` ` `
478478
479- # ## Paths > Path > Responses
479+ # # Paths > Path > Responses
480480
481481レスポンスの定義を記載する。
482482
@@ -543,7 +543,7 @@ URL に紐づく HTTP メソッドで、1 つの操作を定義します。
543543 $ref: "#/definitions/Error"
544544` ` `
545545
546- # # definitions
546+ # definitions
547547
548548- モデル名は、PascalCase で記載する
549549- 種別が配列の場合、ネストして定義するのではなく、 `$ref` を活用する
@@ -683,17 +683,17 @@ definitions:
683683 example: user name is too long
684684` ` `
685685
686- # # バリデーションについて
686+ # バリデーションについて
687687
688688OpenAPI 定義を記載するにあたり、バリデーションをどこまで厳密に定義すべきかという議論はよく行いがちである。
689689
690690リクエストパラメータの各項目に対して、必須・型・桁・区分値・日付・正規表現のチェックが行える。レスポンスで用いるモデルについても同様に設定でき、`enum`, `pattern` 以外は API の利用者(クライアント)側の DB 設計などに必要な型桁情報を渡すのに有用であるため、できる限り詳しく指定する。
691691
692- # ## 必須
692+ # # 必須
693693
694694必須パラメータのみ `required : true` を定義する
695695
696- # ## デフォルト値
696+ # # デフォルト値
697697
698698パラメータにデフォルト値がある場合は`default` を定義する。
699699
@@ -710,7 +710,7 @@ description: 検索結果の項目数上限(1~100が指定可能)
710710
711711【注意】API 公開後に、default 値を変更してはならない(API の互換性が崩れるため)。もし変更する場合は、API のバージョンを上げること。
712712
713- # ## 型・フォーマット
713+ # # 型・フォーマット
714714
715715型(`type`)は `string(文字列)`, `number(数値)`, `integer(整数値)`, `boolean(真偽値)` `array(配列)`, `file(ファイル)` のうちどれか指定する.
716716
@@ -732,7 +732,7 @@ description: 検索結果の項目数上限(1~100が指定可能)
732732 - `password` : Swagger UI で入力が隠される
733733 - その他、 `email`, `uuid` など Open API 仕様に存在しない任意のフォーマットを独自のドキュメント生成などのために記載しても良い
734734
735- # ## 桁
735+ # # 桁
736736
737737データ型によって、利用できる桁を指定する項目が異なる。可能な限り設定する。
738738
@@ -751,7 +751,7 @@ description: 検索結果の項目数上限(1~100が指定可能)
751751
752752【注意】API 公開後に、レスポンスの `maxLength` を以前より大きい値に変更してはならない。レスポンスの `maxLength` など API 利用者側システムの DB の ERD 定義のインプットになる事が多いため。もし行う場合は API のバージョンを上げることや、連携先に桁数変更の旨を調整するなどの考慮を行う。
753753
754- # ## 区分値
754+ # # 区分値
755755
756756区分値の場合は `enum` 属性を利用し、`description`には区分値の論理名を記載する。
757757
@@ -767,7 +767,7 @@ description: |
767767 9: 適用不能
768768` ` `
769769
770- # ## 固定値
770+ # # 固定値
771771
772772**固定値** の場合も enum を 1 つだけ指定して表現する。この場合もレスポンスで利用する場合は指定しない
773773
@@ -778,7 +778,7 @@ enum: ["json"]
778778description: ファイルレイアウト
779779` ` `
780780
781- # ## その他(正規表現)
781+ # # その他(正規表現)
782782
783783正規表現で表現できる文字列は`pattern`を利用して定義する。桁や区分値で代替できる場合は、`pattern` を用いない
784784
@@ -792,7 +792,7 @@ remind_time:
792792 pattern: "^(2[0-3]|[01][0-9]):([0-5][0-9])$"
793793` ` `
794794
795- # # ファイルアップロード
795+ # ファイルアップロード
796796
797797Web API におけるファイルアップロードのよく利用される実装手段は、大きく分けて以下の 3 手法に分類できます
798798
@@ -833,15 +833,15 @@ A->>B: ③ファイルアップロード完了(受付ID、キー、属性)
833833
834834上記どちらのケースも OpenAPI 定義としてはシンプルであるため、記述例は割愛する。
835835
836- # # ファイルダウンロード
836+ # ファイルダウンロード
837837
838838ファイルアップロードと同様、オブジェクトストレージの Signed URL 経由を経由してのダウンロードさせる手法を推奨する。Web API としてはオブジェクトストレージにダウンロード用のファイルを書き込み、クライアントが取得するための Signed URL をレスポンスの JSON 項目に渡す方式である。
839839
840840もし、サムネイルやアイコン画像など、ファイル容量がごく小さい場合は Base64 にエンコードして JSON に埋め込んで渡しても良い。線引をどこに設置するかは本規約で定義しない。
841841
842842どちらのケースも OpenAPI 定義としてはシンプルであるため、記述例は割愛する。
843843
844- # # CORS
844+ # CORS
845845
846846CORS(Cross-Origin Resource Sharing)のために、options メソッドの追記は **原則不要** とする。
847847
@@ -858,7 +858,7 @@ CORS(Cross-Origin Resource Sharing)のために、options メソッドの追
858858
859859[^1] : https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/enable-cors-for-resource-using-swagger-importer-tool.html
860860
861- # # OpenTelemetry Traceparent HTTP Header
861+ # OpenTelemetry Traceparent HTTP Header
862862
863863OpenOpenTelemetry で用いるられる[traceparent](https://www.w3.org/TR/trace-context/) のリクエストヘッダーは OpenAPI で **原則不要** とする。
864864
@@ -867,7 +867,7 @@ OpenOpenTelemetry で用いるられる[traceparent](https://www.w3.org/TR/trace
867867- OpenTelemetry が定めるヘッダー類は、API 横断的に設定されるべきものであり、ミドルウェアやフレームワーク側などでの一律の制御を推奨するため
868868- 記載することにより、OpenOpenTelemetry に対応していることを明記し開発者に周知できるメリットより、各アプリ開発者が生成されたコードで悩んだり、誤解されることを回避したいため
869869
870- # # API のバージョン管理
870+ # API のバージョン管理
871871
872872Swagger 定義で以下の変更を行う場合は、利用するコード生成の動作によってはクライアントにとって互換性を失う破壊的変更であることがあるため、変更は調整の上で行うか、バージョンを上げることを考える。
873873
@@ -883,7 +883,7 @@ Swagger 定義で以下の変更を行う場合は、利用するコード生成
883883 - 桁数を大きくする
884884 - デフォルト値を後から変更する
885885
886- # # ファイル単位
886+ # ファイル単位
887887
888888TODO v3 の作成タイミングと合わせて追記する
889889
0 commit comments