OpenAPIのリクエストとレスポンススキーマ

リクエストボディとレスポンスのOpenAPIスキーマ定義をマスター。型制約、必須フィールド、ネストされたオブジェクト、配列、enum、再利用可能なスキーマの$ref参照を学びます。

API Design Basics

詳細な説明

OpenAPIのリクエストとレスポンススキーマ

スキーマはOpenAPI仕様の中核です。APIが受け入れるデータと返すデータの正確な形状を定義し、ドキュメントとクライアント・サーバー間の契約の両方として機能します。

基本的なスキーマ型

OpenAPIは以下のプリミティブ型をサポートします:

# 文字列
name:
  type: string
  minLength: 1
  maxLength: 200

# 整数
age:
  type: integer
  minimum: 0
  maximum: 150

# 数値(浮動小数点)
price:
  type: number
  format: double

# ブール値
active:
  type: boolean

# Enum
status:
  type: string
  enum: [draft, published, archived]

オブジェクトスキーマ

オブジェクトは複数のフィールドとオプションの必須制約を組み合わせます:

User:
  type: object
  required:
    - email
    - name
  properties:
    id:
      type: string
      format: uuid
      readOnly: true
    email:
      type: string
      format: email
    name:
      type: string
    bio:
      type: string
      nullable: true

配列スキーマ

配列は別のスキーマ型をラップします:

Tags:
  type: array
  items:
    type: string
  minItems: 1
  maxItems: 10
  uniqueItems: true

$refによるスキーマの再利用

$ref キーワードは重複を防ぎます:

paths:
  /users:
    post:
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CreateUser"
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/User"

allOf、oneOf、anyOfによる合成

多態性のためにスキーマを組み合わせます:

AdminUser:
  allOf:
    - $ref: "#/components/schemas/User"
    - type: object
      properties:
        permissions:
          type: array
          items:
            type: string

スキーマの継承に allOf、排他的バリアントに oneOf、柔軟な結合に anyOf を使用することで、強力な型合成が可能になります。

ユースケース

適切に定義されたスキーマは、APIコントラクトテスト、クライアントコード生成、ドキュメントの正確性にとって重要です。デザインファースト開発にOpenAPIを使用するチームは、正確なスキーマ定義に依存して複数言語のSDKを生成し、ミドルウェアでリクエストとレスポンスを検証し、正確なインタラクティブドキュメントを作成します。

試してみる — OpenAPI Editor & Viewer

フルツールを開く