0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

API設計 OpenAPI (Swagger) テンプレート

Last updated at Posted at 2022-06-23

利用ツール

・VSCode

VSCodeプラグイン

・Swagger Viewer
shift + option + p (mac) でビューワーを表示
※ビューワーを見ながら作成するのがおすすめ

テンプレート

拡張子は「yml」
ファイル名は任意

# vscode shift + option + p
openapi: "3.0.0"

info: #APIのメタデータ
  title: "APIの名称(必須)"
  description: |
    #APIの簡潔な説明
    - Get 説明
    - Post 説明
  termsOfService: "https://tastylog.com/terms/" #APIの利用規約のURL
  contact: #コンタクト情報。(サポートページのURLやメールアドレス等)
    name: "Customer Support"
    url: "https://test.com/support/"
    email: "support-desk@tastylog.com"
  license: #ライセンス情報
    name: "MIT License"
    url: "https://opensource.org/licenses/MIT"
  version: "1.0.0" #APIドキュメントのバージョン(必須)

servers: #APIを提供するサーバ
- url: "http://localhost:{port}" #APIサーバーのURL
  description: "APIサーバーの説明1"
  variables:
    port:
      description: "値の説明"
      enum: ["3000", "8080"] #利用できる値
      default: "3000"
- url: "http://localhost/{version}" #APIサーバーのURL
  description: "APIサーバーの説明2"
  variables:
    version:
      description: "値の説明"
      enum: ["1.0", "2.0"] #利用できるバージョン
      default: "1.0"
- url: "https://api.test.com/v1"
  description: "API Test"

tags: #APIで使用されるタグのリスト。各種ツールによってパースされる際は、記述された順序で出力される。タグ名はユニークで無ければならない。
- name: "reviews" #タグの名前
  description: "タグの説明" 

paths: #APIで利用可能なエンドポイントやメソッド
  "/shops/{shopId}/reviews": #各エンドポイントのパス。serversで定義したURLにこのパスを結合したものが最終的なエンドポイントとなる
    get:
      summary: "エンドポイントの説明"
      description: "エンドポイントの簡潔な説明"
      tags: ["reviews"]
      parameters:
      - name: shopId #リクエストパラメータ
        description: "パラメータの説明"
        in: path #パラメータの場所 query header path cookieのどれか。
        required: true #必須パラメータならtrue
        schema: { type: string } #パラメータの型
        example: "渡せるパラメータの例"
      responses:
        "200": #ステータスコード
          description: "Success operation レスポンスの説明"
          content: #レスポンスボディ
            application/json: #メディアタイプ
              schema: #データの定義
                type: array
                items:
                  $ref: "#/components/schemas/Review"
      security: []
    post:
      summary: "Create new review"
      description: "Create specified shop's new review"
      tags: ["reviews"]
      parameters:
      - name: shopId
        in: path
        description: "Shop identifier"
        required: true
        schema: { type: string }
      requestBody: #リクエストボディ
        description: "リクエストボディの説明"
        required: true #リクエストボディが必須なるtrue
        content: #リクエストボディの中身
          application/json: #メディアタイプ
            schema:
              # type: string #データの型 書き方1
              # type: object #データの型 書き方2
              # properties: #objectの場合
              #   score: { type: integer }
              #   comment: { type: string }
              $ref: "#/components/schemas/Review" #変数の利用 書き方3
      responses:
        "201": #成功
          description: "Success operation"
          headers:
            location: #位置
              description: "ロケーションのデータの説明"
              schema: { type: string, format: url }
        "400": #エラー
          $ref: "#/components/responses/400-BadRequest"
security: #API全体を通して使用可能なセキュリティ仕様
- apikey_auth: []
components: #APIで使用するオブジェクトスキーマ
  schemas:
    Review: #コンポーネントの位置を表す
      type: object
      properties:
        score: { type: integer }
        comment: { type: string }
    Error:
      type: object
      properties:
        code: { type: string } #エラーコード
        type: { type: string } #エラーの型
        message: { type: string } #エラーメッセージの型
        errors: #エラーの詳細
          type: array
          items:
            type: object
            properties:
              field: { type: string }
              code: { type: string }
  responses:
    400-BadRequest:
      description: "Client side error"
      content:
        application/json: #メディアタイプ
          schema:
            $ref: "#/components/schemas/Error"
  securitySchemes:
    apikey_auth:
      description: "API Key authorization"
      type: apiKey
      name: "X-Api-Key"
      in: header

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?