Những Thay Đổi OpenAPI 3.2 So Với 3.1 và 3.0?

Ashley Innocent

Ashley Innocent

13 tháng 3 2026

Những Thay Đổi OpenAPI 3.2 So Với 3.1 và 3.0?

Apidog cho doanh nghiệp

Triển khai tại chỗ

SSO & RBAC

Tuân thủ SOC 2

Khám phá Apidog Enterprise

TÓM TẮT

OpenAPI 3.1 đã bổ sung khả năng tương thích JSON Schema đầy đủ, webhooks và các cải tiến về bộ phân biệt (discriminator). OpenAPI 3.2 đã bổ sung hỗ trợ phương thức QUERY, các ví dụ được cải thiện và các định nghĩa bảo mật tốt hơn. PetstoreAPI hiện đại sử dụng OpenAPI 3.2 để trình bày tất cả các tính năng mới nhất với các ví dụ sẵn sàng cho môi trường sản xuất.

Giới thiệu

Bạn đang viết một đặc tả OpenAPI. Bạn thấy các tham chiếu đến OpenAPI 3.0, 3.1 và 3.2. Sự khác biệt là gì? Bạn có nên nâng cấp không? Các công cụ của bạn có hỗ trợ phiên bản mới không?

OpenAPI đã phát triển đáng kể từ 3.0 đến 3.2. Mỗi phiên bản bổ sung các tính năng giúp đặc tả API mạnh mẽ và chính xác hơn. Nhưng không phải tất cả các công cụ đều hỗ trợ các phiên bản mới nhất, tạo ra thách thức về khả năng tương thích.

Swagger Petstore cũ sử dụng OpenAPI 2.0 (đặc tả Swagger). PetstoreAPI hiện đại sử dụng OpenAPI 3.2, thể hiện mọi tính năng mới với các ví dụ sẵn sàng cho môi trường sản xuất.

💡
Nếu bạn đang xây dựng hoặc kiểm thử API REST, Apidog hỗ trợ OpenAPI 3.0, 3.1 và 3.2. Bạn có thể nhập các đặc tả, xác thực theo lược đồ và kiểm thử việc triển khai API của mình. Apidog giúp bạn hiểu nên sử dụng phiên bản nào và cách di chuyển.
button

Trong hướng dẫn này, bạn sẽ tìm hiểu những gì đã thay đổi trong mỗi phiên bản OpenAPI, cách chọn phiên bản phù hợp và cách PetstoreAPI hiện đại trình bày các tính năng của OpenAPI 3.2.

Nền tảng OpenAPI 3.0

OpenAPI 3.0 (phát hành tháng 7 năm 2017) là một bản nâng cấp lớn từ Swagger 2.0.

Các tính năng chính

1. Nhiều máy chủ (Multiple servers)

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

Swagger 2.0 chỉ hỗ trợ một máy chủ.

2. Đối tượng thân yêu cầu (Request body object)

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

Rõ ràng hơn tham số body của Swagger 2.0.

3. Thành phần (Components) để tái sử dụng

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

Tổ chức tốt hơn definitions của Swagger 2.0.

4. Gọi lại (Callbacks)

Định nghĩa các lệnh gọi lại không đồng bộ (webhooks):

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

5. Liên kết (Links)

Định nghĩa mối quan hệ giữa các hoạt động:

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

Hạn chế

1. Không tương thích JSON Schema

OpenAPI 3.0 sử dụng một tập con của JSON Schema Draft 5, không phải JSON Schema đầy đủ. Điều này gây ra các vấn đề xác thực.

2. Không có đối tượng webhooks

Webhooks được định nghĩa là callbacks, điều này gây nhầm lẫn.

3. Bộ phân biệt (discriminator) hạn chế

Hỗ trợ đa hình cơ bản.

4. Không có kiểu null

Bạn không thể chỉ định trực tiếp type: null.

Những thay đổi lớn trong OpenAPI 3.1

OpenAPI 3.1 (phát hành tháng 2 năm 2021) tập trung vào việc căn chỉnh JSON Schema.

1. Tương thích JSON Schema 2020-12 đầy đủ

Thay đổi lớn nhất: Lược đồ OpenAPI 3.1 là JSON Schema 2020-12 hợp lệ.

Trước đây (OpenAPI 3.0):

type: string
nullable: true  # Đặc tả OpenAPI

Sau này (OpenAPI 3.1):

type: [string, "null"]  # JSON Schema tiêu chuẩn

Lợi ích:

2. Đối tượng Webhooks

Trước đây (OpenAPI 3.0):

# Webhooks được định nghĩa là callbacks (gây nhầm lẫn)
paths:
  /subscribe:
    post:
      callbacks:
        orderUpdate:
          # định nghĩa webhook

Sau này (OpenAPI 3.1):

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

Phân tách rõ ràng hơn giữa các điểm cuối API và webhooks.

3. Cải tiến bộ phân biệt (Discriminator)

Hỗ trợ đa hình tốt hơn:

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

4. Mã định danh giấy phép trong đối tượng Info

info:
  license:
    name: MIT
    identifier: MIT  # Mã định danh SPDX

5. Tham chiếu PathItem $ref

Tham chiếu toàn bộ các mục đường dẫn (path items):

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

Thay đổi gây lỗi

1. Loại bỏ nullable

Sử dụng type: [string, "null"] thay thế.

2. exclusiveMinimum/exclusiveMaximum đã thay đổi

Bây giờ là kiểu boolean, không phải số.

3. example so với examples

Xác thực chặt chẽ hơn.

Các tính năng mới nhất của OpenAPI 3.2

OpenAPI 3.2 (dự kiến phát hành, bản nháp đã có) bổ sung các mẫu API hiện đại.

1. Hỗ trợ phương thức QUERY

Phương thức HTTP QUERY cho các tìm kiếm phức tạp:

paths:
  /pets/search:
    query:  # Phương thức mới
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                filters:
                  type: object
                sort:
                  type: array
      responses:
        '200':
          description: Kết quả tìm kiếm

PetstoreAPI hiện đại sử dụng QUERY cho các tìm kiếm thú cưng phức tạp.

2. Các ví dụ được cải thiện

Nhiều ví dụ với siêu dữ liệu:

examples:
  availableCat:
    summary: Mèo có sẵn
    description: Một con mèo có sẵn để nhận nuôi
    value:
      id: "019b4132-70aa-764f-b315-e2803d882a24"
      name: "Fluffy"
      species: "CAT"
      status: "AVAILABLE"
  adoptedDog:
    summary: Chó được nhận nuôi
    value:
      id: "019b4127-54d5-76d9-b626-0d4c7bfce5b6"
      name: "Buddy"
      species: "DOG"
      status: "ADOPTED"

3. Các định nghĩa bảo mật nâng cao

Hỗ trợ OAuth 2.0 tốt hơn:

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: Đọc thông tin thú cưng
            pets:write: Tạo và cập nhật thú cưng
            orders:read: Đọc thông tin đơn hàng

4. Cải thiện ánh xạ bộ phân biệt (Discriminator mapping)

Đa hình linh hoạt hơn:

discriminator:
  propertyName: type
  mapping:
    cat: Cat
    dog: Dog
    bird: '#/components/schemas/Bird'  # Có thể trộn lẫn tham chiếu cục bộ và $ref

5. Hỗ trợ bỏ dùng tốt hơn

Bỏ dùng các trường cụ thể:

properties:
  oldField:
    type: string
    deprecated: true
    description: Sử dụng newField thay thế
  newField:
    type: string

Cách PetstoreAPI hiện đại sử dụng OpenAPI 3.2

PetstoreAPI hiện đại trình bày mọi tính năng của OpenAPI 3.2.

1. Đặc tả đầy đủ

Đặc tả OpenAPI 3.2 hoàn chỉnh có sẵn tại:

https://petstoreapi.com/openapi.json

2. Phương thức QUERY cho các tìm kiếm phức tạp

/pets/search:
  query:
    summary: Tìm kiếm thú cưng với tiêu chí phức tạp
    requestBody:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/PetSearchQuery'

3. Webhooks

webhooks:
  petStatusChanged:
    post:
      summary: Trạng thái thú cưng đã thay đổi
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PetStatusWebhook'

4. Lược đồ đa hình

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

5. Các ví dụ toàn diện

Mỗi điểm cuối bao gồm nhiều ví dụ minh họa các kịch bản khác nhau.

6. Phản hồi lỗi RFC 9457

responses:
  '400':
    description: Yêu cầu không hợp lệ
    content:
      application/problem+json:
        schema:
          $ref: '#/components/schemas/ProblemDetails'

Xem đặc tả OpenAPI đầy đủ để biết tất cả các tính năng.

Hướng dẫn di chuyển

Từ 3.0 sang 3.1

1. Thay thế nullable:

# Trước đây
type: string
nullable: true

# Sau này
type: [string, "null"]

2. Cập nhật exclusiveMinimum/exclusiveMaximum:

# Trước đây
minimum: 0
exclusiveMinimum: true

# Sau này
minimum: 0
exclusiveMinimum: 0

3. Di chuyển webhooks:

# Trước đây
paths:
  /subscribe:
    callbacks:
      # webhook

# Sau này
webhooks:
  # webhook

Từ 3.1 sang 3.2

1. Thêm các phương thức QUERY khi thích hợp:

/pets/search:
  query:  # Mới trong 3.2
    # tìm kiếm phức tạp

2. Nâng cao các ví dụ:

examples:
  example1:
    summary: Mô tả
    value: {...}

3. Cập nhật các định nghĩa bảo mật:

Thêm refreshUrl vào các luồng OAuth.

Kiểm thử đặc tả OpenAPI bằng Apidog

Apidog hỗ trợ tất cả các phiên bản OpenAPI.

Nhập đặc tả OpenAPI

1. Mở Apidog
2. Nhấp vào "Import" (Nhập)
3. Chọn "OpenAPI 3.x"
4. Dán URL hoặc tải lên tệp
5. Apidog xác thực và nhập

Xác thực đặc tả

Apidog kiểm tra:

Kiểm thử triển khai API

Tạo các trường hợp kiểm thử từ đặc tả:

So sánh phiên bản

Nhập nhiều phiên bản và so sánh:

Kết luận

OpenAPI đã phát triển đáng kể:

OpenAPI 3.0: Nền tảng với máy chủ, thân yêu cầu, callbacks

OpenAPI 3.1: Tương thích JSON Schema, đối tượng webhooks, đa hình tốt hơn

OpenAPI 3.2: Phương thức QUERY, các ví dụ nâng cao, bảo mật được cải thiện

PetstoreAPI hiện đại sử dụng OpenAPI 3.2 để trình bày tất cả các tính năng với các ví dụ sẵn sàng cho môi trường sản xuất. Đây là triển khai tham chiếu cho thiết kế API hiện đại.

Sử dụng Apidog để làm việc với bất kỳ phiên bản OpenAPI nào, xác thực đặc tả và kiểm thử triển khai.

Câu hỏi thường gặp

Tôi có nên nâng cấp lên OpenAPI 3.1 hoặc 3.2 không?

Nếu các công cụ của bạn hỗ trợ, thì có. Khả năng tương thích JSON Schema của OpenAPI 3.1 rất có giá trị. OpenAPI 3.2 bổ sung các mẫu hiện đại như phương thức QUERY.

Đặc tả OpenAPI 3.0 của tôi có hoạt động với các công cụ 3.1 không?

Hầu hết là có, nhưng nullableexclusiveMinimum/exclusiveMaximum cần được cập nhật.

Các trình tạo mã có hỗ trợ OpenAPI 3.2 không?

Sự hỗ trợ đang tăng lên. Kiểm tra tài liệu của trình tạo của bạn. Nhiều trình hỗ trợ 3.1, ít hơn hỗ trợ 3.2.

Tôi có thể sử dụng các tính năng của OpenAPI 3.2 trong 3.1 không?

Không. Sử dụng phiên bản phù hợp với các tính năng của bạn. Nếu bạn cần phương thức QUERY, hãy sử dụng 3.2.

Làm cách nào để xác thực đặc tả OpenAPI của tôi?

Sử dụng Apidog để nhập và xác thực đặc tả của bạn. Nó kiểm tra tính hợp lệ của lược đồ và tính toàn vẹn tham chiếu.

Tôi có thể xem ví dụ OpenAPI 3.2 hoàn chỉnh ở đâu?

PetstoreAPI hiện đại cung cấp một đặc tả OpenAPI 3.2 hoàn chỉnh, sẵn sàng cho môi trường sản xuất.

Sự khác biệt giữa webhooks và callbacks là gì?

Webhooks là các yêu cầu HTTP từ máy chủ đến máy khách. Callbacks được định nghĩa trong OpenAPI 3.0 như một phần của các hoạt động. OpenAPI 3.1+ có một đối tượng webhooks chuyên dụng.

Tôi nên sử dụng JSON hay YAML cho đặc tả OpenAPI?

Cả hai đều hoạt động. YAML dễ đọc hơn đối với con người. JSON dễ dàng hơn cho các công cụ. PetstoreAPI hiện đại cung cấp cả hai định dạng.

Thực hành thiết kế API trong Apidog

Khám phá cách dễ dàng hơn để xây dựng và sử dụng API

Những Thay Đổi OpenAPI 3.2 So Với 3.1 và 3.0?