GIS-Jonathan
GIS-Jonathan

Reputation: 4647

How to require at least one of two parameters in OpenAPI?

I'm using OpenAPI 3 and have two query parameters, at least one of which is required but it doesn't matter which.

I.e., as sudocode:

if parameter_1 OR parameter_2:
    do stuff
else:
    error

Is this possible in OpenAPI 3? There's no mention of it in the spec as far as I can see, or the JSON Schema spec either.

Upvotes: 18

Views: 24672

Answers (1)

Helen
Helen

Reputation: 97717

This scenario is very similar to mutually exclusive parameters. Basically, you can use an object-type parameter where parameter_1 and parameter_2 are the object properties; such object will be serialized as ?parameter_1=value1&parameter_2=value2. The "at least one of" constraint can be represented using minProperties or anyOf.

openapi: 3.0.2
...
paths:
  /foo:
    get:
      parameters:
        - in: query
          name: param
          required: true
          schema:
            type: object
            properties:
              parameter_1:
                type: string
              parameter_2:
                type: string
            additionalProperties: false

            # Option 1
            minProperties: 1

            # Option 2
            # anyOf:
            #  - required: [parameter_1]
            #  - required: [parameter_2]

There's also an existing feature request to support interdependencies between individual parameters in the parameters list:
https://github.com/OAI/OpenAPI-Specification/issues/256

Upvotes: 17

Related Questions