es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo requerir parámetros de formulario en función del valor de otro parámetro de formulario en OpenAPI?

Tengo la siguiente definición de OpenAPI (Swagger) para una solicitud POST con datos de formulario. ¿Cómo puedo variar los parámetros de formulario requeridos en función del valor del parámetro “type”?

Si “type”=”email”, solo se requiere “email”, y si “type”=”phone”, solo se requieren los parámetros “country” y “phone”.

yaml
/login:
post:
required:
– type
– password
responses:
200:
description: Respuesta exitosa
schema:
$ref: ‘#/definitions/SomeResponse’
parameters:
– name: type
type: string
in: formData
enum: [email, phone]
– name: email
type: string
in: formData
– name: country
type: string
in: formData
– name: phone
type: string
in: formData
– name: password
type: string

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Puede utilizar la lógica condicional en la sección de parameters para variar los parámetros de formulario requeridos en función del valor del parámetro type. Aquí hay una versión actualizada de la definición de OpenAPI que logra esto:

      /login:
        post:
          required:
          - type
          - password
          responses:
            200:
              description: Respuesta exitosa
              schema:
                $ref: '#/definitions/SomeResponse'
          parameters:
            - name: type
              type: string
              in: formData
              enum: [email, phone]
            - name: email
              type: string
              in: formData
              required: false
              'x-conditional-required':
                body: "{type}=='email'"
            - name: country
              type: string
              in: formData
              required: false
              'x-conditional-required':
                body: "{type}=='phone'"
            - name: phone
              type: string
              in: formData
              required: false
              'x-conditional-required':
                body: "{type}=='phone'"
            - name: password
              type: string
              in: formData
              required: true
    

    En esta versión actualizada, cada parámetro, excepto type y password, tiene una nueva propiedad required establecida como false. Además, cada parámetro tiene una propiedad personalizada x-conditional-required que contiene una expresión condicional en sintaxis similar a JavaScript. La propiedad body del objeto x-conditional-required determina cuándo se requiere el parámetro en función del valor del parámetro type.

    Por ejemplo, el parámetro email solo es requerido si type es igual a "email". Los parámetros country y phone solo son requeridos si type es igual a "phone". El parámetro password siempre es requerido.

    Tenga en cuenta que el ejemplo anterior utiliza la extensión x-conditional-required, la cual no es parte de la especificación oficial de OpenAPI. Sin embargo, se utiliza comúnmente para agregar lógica personalizada a una definición de OpenAPI.

Comments are closed.