OpenAPI 3.2 vs 3.1 vs 3.0: ¿Qué Cambió?

Ashley Innocent

Ashley Innocent

13 March 2026

OpenAPI 3.2 vs 3.1 vs 3.0: ¿Qué Cambió?

Apidog para empresas

Despliegue local

SSO & RBAC

Conforme con SOC 2

Explorar Apidog Enterprise

TL;DR

OpenAPI 3.1 añadió compatibilidad total con JSON Schema, webhooks y mejoras en el discriminador. OpenAPI 3.2 añadió soporte para el método QUERY, ejemplos mejorados y mejores definiciones de seguridad. Modern PetstoreAPI utiliza OpenAPI 3.2 para demostrar las últimas características con ejemplos listos para producción.

Introducción

Estás escribiendo una especificación OpenAPI. Ves referencias a OpenAPI 3.0, 3.1 y 3.2. ¿Cuál es la diferencia? ¿Deberías actualizar? ¿Tus herramientas soportarán la nueva versión?

OpenAPI ha evolucionado significativamente de 3.0 a 3.2. Cada versión añade características que hacen que las especificaciones de API sean más potentes y precisas. Pero no todas las herramientas soportan las últimas versiones, creando un desafío de compatibilidad.

El antiguo Swagger Petstore utiliza OpenAPI 2.0 (especificación Swagger). Modern PetstoreAPI utiliza OpenAPI 3.2, mostrando cada nueva característica con ejemplos listos para producción.

💡
Si estás construyendo o probando APIs REST, Apidog soporta OpenAPI 3.0, 3.1 y 3.2. Puedes importar especificaciones, validar contra el esquema y probar tu implementación de API. Apidog te ayuda a entender qué versión usar y cómo migrar.
botón

En esta guía, aprenderás qué cambió en cada versión de OpenAPI, cómo elegir la versión correcta y cómo Modern PetstoreAPI demuestra las características de OpenAPI 3.2.

Línea base de OpenAPI 3.0

OpenAPI 3.0 (lanzado en julio de 2017) fue una actualización importante de Swagger 2.0.

Características clave

1. Múltiples servidores

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

Swagger 2.0 solo soportaba un host.

2. Objeto cuerpo de la solicitud

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

Más claro que el parámetro body de Swagger 2.0.

3. Componentes para la reutilización

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

Mejor organización que las definitions de Swagger 2.0.

4. Callbacks

Define callbacks asíncronos (webhooks):

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

5. Enlaces

Define relaciones entre operaciones:

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

Limitaciones

1. Incompatibilidad con JSON Schema

OpenAPI 3.0 utilizaba un subconjunto de JSON Schema Draft 5, no JSON Schema completo. Esto causaba problemas de validación.

2. No hay objeto webhooks

Los webhooks se definían como callbacks, lo que resultaba confuso.

3. Discriminador limitado

El soporte de polimorfismo era básico.

4. No hay tipo nulo

No se podía especificar type: null directamente.

Cambios importantes en OpenAPI 3.1

OpenAPI 3.1 (lanzado en febrero de 2021) se centró en la alineación con JSON Schema.

1. Compatibilidad total con JSON Schema 2020-12

El cambio más grande: Los esquemas de OpenAPI 3.1 son JSON Schema 2020-12 válidos.

Antes (OpenAPI 3.0):

type: string
nullable: true  # Específico de OpenAPI

Después (OpenAPI 3.1):

type: [string, "null"]  # JSON Schema estándar

Beneficios:

2. Objeto Webhooks

Antes (OpenAPI 3.0):

# Webhooks definidos como callbacks (confuso)
paths:
  /subscribe:
    post:
      callbacks:
        orderUpdate:
          # definición de webhook

Después (OpenAPI 3.1):

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

Separación más clara entre los puntos finales de la API y los webhooks.

3. Discriminador mejorado

Mejor soporte de polimorfismo:

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

4. Identificador de licencia del objeto Info

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

5. PathItem $ref

Referenciar ítems de ruta completos:

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

Cambios que rompen la compatibilidad

1. Se eliminó nullable

Usa type: [string, "null"] en su lugar.

2. exclusiveMinimum/exclusiveMaximum cambiado

Ahora booleano, no numérico.

3. example vs examples

Validación más estricta.

Últimas características de OpenAPI 3.2

OpenAPI 3.2 (lanzado TBD, borrador disponible) añade patrones de API modernos.

1. Soporte para el método QUERY

Método HTTP QUERY para búsquedas complejas:

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

Modern PetstoreAPI utiliza QUERY para búsquedas complejas de mascotas.

2. Ejemplos mejorados

Múltiples ejemplos con metadatos:

examples:
  availableCat:
    summary: Gato disponible
    description: Un gato disponible para adopción
    value:
      id: "019b4132-70aa-764f-b315-e2803d882a24"
      name: "Fluffy"
      species: "CAT"
      status: "AVAILABLE"
  adoptedDog:
    summary: Perro adoptado
    value:
      id: "019b4127-54d5-76d9-b626-0d4c7bfce5b6"
      name: "Buddy"
      species: "DOG"
      status: "ADOPTED"

3. Definiciones de seguridad mejoradas

Mejor soporte de 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: Leer mascotas
            pets:write: Crear y actualizar mascotas
            orders:read: Leer pedidos

4. Mapeo de discriminador mejorado

Polimorfismo más flexible:

discriminator:
  propertyName: type
  mapping:
    cat: Cat
    dog: Dog
    bird: '#/components/schemas/Bird'  # Puede mezclar local y $ref

5. Mejor soporte de depreciación

Depreciar campos específicos:

properties:
  oldField:
    type: string
    deprecated: true
    description: Usar newField en su lugar
  newField:
    type: string

Cómo Modern PetstoreAPI utiliza OpenAPI 3.2

Modern PetstoreAPI muestra cada característica de OpenAPI 3.2.

1. Especificación completa

La especificación completa de OpenAPI 3.2 está disponible en:

https://petstoreapi.com/openapi.json

2. Método QUERY para búsquedas complejas

/pets/search:
  query:
    summary: Buscar mascotas con criterios complejos
    requestBody:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/PetSearchQuery'

3. Webhooks

webhooks:
  petStatusChanged:
    post:
      summary: El estado de la mascota ha cambiado
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PetStatusWebhook'

4. Esquemas polimórficos

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

5. Ejemplos completos

Cada endpoint incluye múltiples ejemplos que muestran diferentes escenarios.

6. Respuestas de error RFC 9457

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

Consulta la especificación completa de OpenAPI para ver todas las características.

Guía de migración

De 3.0 a 3.1

1. Reemplazar nullable:

# Antes
type: string
nullable: true

# Después
type: [string, "null"]

2. Actualizar exclusiveMinimum/exclusiveMaximum:

# Antes
minimum: 0
exclusiveMinimum: true

# Después
minimum: 0
exclusiveMinimum: 0

3. Mover webhooks:

# Antes
paths:
  /subscribe:
    callbacks:
      # webhook

# Después
webhooks:
  # webhook

De 3.1 a 3.2

1. Añadir métodos QUERY donde sea apropiado:

/pets/search:
  query:  # Nuevo en 3.2
    # búsqueda compleja

2. Mejorar ejemplos:

examples:
  example1:
    summary: Descripción
    value: {...}

3. Actualizar definiciones de seguridad:

Añadir refreshUrl a los flujos de OAuth.

Probando especificaciones OpenAPI con Apidog

Apidog soporta todas las versiones de OpenAPI.

Importar especificación OpenAPI

1. Abrir Apidog
2. Hacer clic en "Importar"
3. Seleccionar "OpenAPI 3.x"
4. Pegar URL o subir archivo
5. Apidog valida e importa

Validar especificación

Apidog comprueba:

Probar implementación de API

Generar casos de prueba a partir de la especificación:

Comparación de versiones

Importar múltiples versiones y comparar:

Conclusión

OpenAPI ha evolucionado significativamente:

OpenAPI 3.0: Fundamentos con servidores, cuerpos de solicitud, callbacks

OpenAPI 3.1: Compatibilidad con JSON Schema, objeto webhooks, mejor polimorfismo

OpenAPI 3.2: Método QUERY, ejemplos mejorados, seguridad mejorada

Modern PetstoreAPI utiliza OpenAPI 3.2 para demostrar todas las características con ejemplos listos para producción. Es la implementación de referencia para el diseño de API moderno.

Usa Apidog para trabajar con cualquier versión de OpenAPI, validar especificaciones y probar implementaciones.

Preguntas frecuentes

¿Debo actualizar a OpenAPI 3.1 o 3.2?

Si tus herramientas lo soportan, sí. La compatibilidad de OpenAPI 3.1 con JSON Schema es valiosa. OpenAPI 3.2 añade patrones modernos como el método QUERY.

¿Mi especificación OpenAPI 3.0 funcionará con herramientas 3.1?

Mayormente sí, pero nullable y exclusiveMinimum/exclusiveMaximum necesitan actualizaciones.

¿Los generadores de código soportan OpenAPI 3.2?

El soporte está creciendo. Consulta la documentación de tu generador. Muchos soportan 3.1, menos soportan 3.2.

¿Puedo usar las características de OpenAPI 3.2 en 3.1?

No. Usa la versión que coincida con tus características. Si necesitas el método QUERY, usa 3.2.

¿Cómo valido mi especificación OpenAPI?

Usa Apidog para importar y validar tu especificación. Comprueba la validez del esquema y la integridad de las referencias.

¿Dónde puedo ver un ejemplo completo de OpenAPI 3.2?

Modern PetstoreAPI proporciona una especificación OpenAPI 3.2 completa y lista para producción.

¿Cuál es la diferencia entre webhooks y callbacks?

Los webhooks son solicitudes HTTP de servidor a cliente. Los callbacks se definen en OpenAPI 3.0 como parte de las operaciones. OpenAPI 3.1+ tiene un objeto webhooks dedicado.

¿Debo usar JSON o YAML para las especificaciones OpenAPI?

Ambos funcionan. YAML es más legible para humanos. JSON es más fácil para las herramientas. Modern PetstoreAPI proporciona ambos formatos.

Practica el diseño de API en Apidog

Descubre una forma más fácil de construir y usar APIs