OpenAPI 3.2 vs 3.1 vs 3.0 の変更点:違いを徹底比較

Ashley Innocent

Ashley Innocent

13 3月 2026

OpenAPI 3.2 vs 3.1 vs 3.0 の変更点:違いを徹底比較

Apidog エンタープライズ

オンプレミスデプロイ

SSO & RBAC

SOC 2 準拠

Apidog Enterpriseを見る

要約

OpenAPI 3.1では、JSONスキーマとの完全な互換性、Webhook、およびディスグリミネーターの改善が追加されました。OpenAPI 3.2では、QUERYメソッドのサポート、例の改善、およびセキュリティ定義の強化が追加されました。Modern PetstoreAPIは、OpenAPI 3.2を使用して、すべての最新機能を本番環境で利用可能な例とともに示しています。

はじめに

OpenAPI仕様を作成していると、OpenAPI 3.0、3.1、3.2への言及を目にすることがあります。それらの違いは何でしょうか?アップグレードすべきでしょうか?お使いのツールは新しいバージョンをサポートするでしょうか?

OpenAPIは3.0から3.2へと大幅に進化しました。各バージョンでは、API仕様をより強力かつ正確にする機能が追加されています。しかし、すべてのツールが最新バージョンをサポートしているわけではないため、互換性の課題が生じています。

古いSwagger PetstoreはOpenAPI 2.0(Swagger仕様)を使用しています。Modern PetstoreAPIはOpenAPI 3.2を使用しており、すべての新機能を本番環境で利用可能な例とともに紹介しています。

💡
REST APIを構築またはテストしている場合、ApidogはOpenAPI 3.0、3.1、3.2をサポートしています。仕様をインポートし、スキーマに対して検証し、API実装をテストできます。Apidogは、どのバージョンを使用すべきか、そしてどのように移行すべきかを理解するのに役立ちます。
ボタン

このガイドでは、各OpenAPIバージョンで何が変更されたか、適切なバージョンを選択する方法、そしてModern PetstoreAPIがOpenAPI 3.2の機能をどのように示しているかを学びます。

OpenAPI 3.0の基準

OpenAPI 3.0(2017年7月リリース)は、Swagger 2.0からのメジャーアップグレードでした。

主な機能

1. 複数サーバー

servers:
  - url: https://api.petstoreapi.com/v1
    description: Production
  - url: https://staging.petstoreapi.com/v1
    description: Staging

Swagger 2.0は1つのホストのみをサポートしていました。

2. リクエストボディオブジェクト

requestBody:
  required: true
  content:
    application/json:
      schema:
        $ref: '#/components/schemas/Pet'

Swagger 2.0のbodyパラメーターよりも明確になりました。

3. 再利用可能なコンポーネント

components:
  schemas:
    Pet:
      type: object
  responses:
    NotFound:
      description: Resource not found
  parameters:
    PetId:
      name: petId
      in: path

Swagger 2.0のdefinitionsよりも優れた整理が可能です。

4. コールバック

非同期コールバック(Webhook)を定義します。

callbacks:
  orderUpdate:
    '{$request.body#/callbackUrl}':
      post:
        requestBody:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrderUpdate'

5. リンク

操作間の関係を定義します。

links:
  GetPetByPetId:
    operationId: getPetById
    parameters:
      petId: '$response.body#/id'

制限事項

1. JSONスキーマの非互換性

OpenAPI 3.0はJSONスキーマドラフト5のサブセットを使用しており、完全なJSONスキーマではありませんでした。これが検証の問題を引き起こしました。

2. Webhookオブジェクトなし

Webhookはコールバックとして定義されており、混乱を招きました。

3. 限られたディスグリミネーター

ポリモーフィズムのサポートは基本的なものでした。

4. null型なし

type: nullを直接指定することはできませんでした。

OpenAPI 3.1の主な変更点

OpenAPI 3.1(2021年2月リリース)は、JSONスキーマへの整合性に焦点を当てました。

1. JSONスキーマ2020-12との完全な互換性

最大の変化:OpenAPI 3.1スキーマは有効なJSONスキーマ2020-12です。

以前(OpenAPI 3.0):

type: string
nullable: true  # OpenAPI-specific

以降(OpenAPI 3.1):

type: [string, "null"]  # Standard JSON Schema

利点:

2. Webhookオブジェクト

以前(OpenAPI 3.0):

# Webhooks defined as callbacks (confusing)
paths:
  /subscribe:
    post:
      callbacks:
        orderUpdate:
          # webhook definition

以降(OpenAPI 3.1):

webhooks:
  orderUpdate:
    post:
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OrderUpdate'

APIエンドポイントとWebhook間のより明確な分離。

3. ディスグリミネーターの改善

より良いポリモーフィズムのサポート:

oneOf:
  - $ref: '#/components/schemas/Cat'
  - $ref: '#/components/schemas/Dog'
discriminator:
  propertyName: petType
  mapping:
    cat: '#/components/schemas/Cat'
    dog: '#/components/schemas/Dog'

4. Infoオブジェクトのライセンス識別子

info:
  license:
    name: MIT
    identifier: MIT  # SPDX identifier

5. PathItem $ref

パスアイテム全体を参照します。

paths:
  /pets:
    $ref: '#/components/pathItems/PetsCollection'

破壊的変更

1. nullableの削除

代わりにtype: [string, "null"]を使用します。

2. exclusiveMinimum/exclusiveMaximumの変更

数値ではなく、ブール値になりました。

3. exampleexamples

より厳格な検証。

OpenAPI 3.2の最新機能

OpenAPI 3.2(リリース日未定、ドラフト利用可能)では、最新のAPIパターンが追加されています。

1. QUERYメソッドのサポート

複雑な検索のためのHTTP QUERYメソッド:

paths:
  /pets/search:
    query:  # New method
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                filters:
                  type: object
                sort:
                  type: array
      responses:
        '200':
          description: Search results

Modern PetstoreAPIは、複雑なペット検索にQUERYを使用しています。

2. 例の改善

メタデータを含む複数の例:

examples:
  availableCat:
    summary: Available cat
    description: A cat available for adoption
    value:
      id: "019b4132-70aa-764f-b315-e2803d882a24"
      name: "Fluffy"
      species: "CAT"
      status: "AVAILABLE"
  adoptedDog:
    summary: Adopted dog
    value:
      id: "019b4127-54d5-76d9-b626-0d4c7bfce5b6"
      name: "Buddy"
      species: "DOG"
      status: "ADOPTED"

3. セキュリティ定義の強化

OAuth 2.0のサポート強化:

components:
  securitySchemes:
    oauth2:
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: https://petstoreapi.com/oauth/authorize
          tokenUrl: https://petstoreapi.com/oauth/token
          refreshUrl: https://petstoreapi.com/oauth/refresh
          scopes:
            pets:read: Read pets
            pets:write: Create and update pets
            orders:read: Read orders

4. ディスグリミネーターマッピングの改善

より柔軟なポリモーフィズム:

discriminator:
  propertyName: type
  mapping:
    cat: Cat
    dog: Dog
    bird: '#/components/schemas/Bird'  # Can mix local and $ref

5. 非推奨サポートの改善

特定のフィールドを非推奨にする:

properties:
  oldField:
    type: string
    deprecated: true
    description: Use newField instead
  newField:
    type: string

Modern PetstoreAPIがOpenAPI 3.2をどのように使用しているか

Modern PetstoreAPIは、OpenAPI 3.2のすべての機能を紹介しています。

1. 完全な仕様

完全なOpenAPI 3.2仕様は以下で入手できます。

https://petstoreapi.com/openapi.json

2. 複雑な検索のためのQUERYメソッド

/pets/search:
  query:
    summary: Search pets with complex criteria
    requestBody:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/PetSearchQuery'

3. Webhook

webhooks:
  petStatusChanged:
    post:
      summary: Pet status changed
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PetStatusWebhook'

4. ポリモーフィックなスキーマ

Pet:
  oneOf:
    - $ref: '#/components/schemas/Cat'
    - $ref: '#/components/schemas/Dog'
    - $ref: '#/components/schemas/Bird'
  discriminator:
    propertyName: species

5. 包括的な例

各エンドポイントには、さまざまなシナリオを示す複数の例が含まれています。

6. RFC 9457 エラー応答

responses:
  '400':
    description: Bad Request
    content:
      application/problem+json:
        schema:
          $ref: '#/components/schemas/ProblemDetails'

すべての機能については、完全なOpenAPI仕様を参照してください。

移行ガイド

3.0から3.1へ

1. nullableの置き換え:

# Before
type: string
nullable: true

# After
type: [string, "null"]

2. exclusiveMinimum/exclusiveMaximumの更新:

# Before
minimum: 0
exclusiveMinimum: true

# After
minimum: 0
exclusiveMinimum: 0

3. Webhookの移動:

# Before
paths:
  /subscribe:
    callbacks:
      # webhook

# After
webhooks:
  # webhook

3.1から3.2へ

1. 適切な場所にQUERYメソッドを追加する:

/pets/search:
  query:  # New in 3.2
    # complex search

2. 例を強化する:

examples:
  example1:
    summary: Description
    value: {...}

3. セキュリティ定義を更新する:

OAuthフローにrefreshUrlを追加します。

ApidogでOpenAPI仕様をテストする

ApidogはすべてのOpenAPIバージョンをサポートしています。

OpenAPI仕様のインポート

1. Apidogを開きます
2. 「インポート」をクリックします
3. 「OpenAPI 3.x」を選択します
4. URLを貼り付けるか、ファイルをアップロードします
5. Apidogが検証してインポートします

仕様の検証

Apidogは以下をチェックします。

API実装のテスト

仕様からテストケースを生成します。

バージョン比較

複数のバージョンをインポートして比較します。

結論

OpenAPIは大幅に進化しました。

OpenAPI 3.0: サーバー、リクエストボディ、コールバックの基盤

OpenAPI 3.1: JSONスキーマの互換性、Webhookオブジェクト、より良いポリモーフィズム

OpenAPI 3.2: QUERYメソッド、強化された例、改善されたセキュリティ

Modern PetstoreAPIは、OpenAPI 3.2を使用して、すべての機能を本番環境で利用可能な例とともに示しています。これは、最新のAPI設計のリファレンス実装です。

Apidogを使用して、任意のOpenAPIバージョンで作業し、仕様を検証し、実装をテストできます。

よくある質問

OpenAPI 3.1または3.2にアップグレードすべきですか?

ツールがサポートしているなら、はい。OpenAPI 3.1のJSONスキーマ互換性は価値があります。OpenAPI 3.2では、QUERYメソッドのようなモダンなパターンが追加されています。

OpenAPI 3.0の仕様は3.1のツールで動作しますか?

ほとんどの場合動作しますが、nullableexclusiveMinimum/exclusiveMaximumは更新が必要です。

コードジェネレーターはOpenAPI 3.2をサポートしていますか?

サポートは拡大しています。使用しているジェネレーターのドキュメントを確認してください。多くは3.1をサポートしていますが、3.2をサポートしているものは少ないです。

OpenAPI 3.2の機能を3.1で使用できますか?

いいえ、できません。機能に合ったバージョンを使用してください。QUERYメソッドが必要な場合は3.2を使用してください。

OpenAPI仕様をどのように検証しますか?

Apidogを使用して、仕様をインポートして検証します。スキーマの有効性と参照の整合性をチェックします。

完全なOpenAPI 3.2の例はどこで見ることができますか?

Modern PetstoreAPIは、完全で本番環境で利用可能なOpenAPI 3.2仕様を提供しています。

Webhookとコールバックの違いは何ですか?

WebhookはサーバーからクライアントへのHTTPリクエストです。コールバックはOpenAPI 3.0で操作の一部として定義されていました。OpenAPI 3.1以降には専用のwebhooksオブジェクトがあります。

OpenAPI仕様にはJSONとYAMLのどちらを使用すべきですか?

どちらも機能します。YAMLは人間にとって読みやすく、JSONはツールにとって処理しやすいです。Modern PetstoreAPIは両方の形式を提供しています。

ApidogでAPIデザイン中心のアプローチを取る

APIの開発と利用をよりシンプルなことにする方法を発見できる

OpenAPI 3.2 vs 3.1 vs 3.0 の変更点:違いを徹底比較