14

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.

Helen
  • 87,344
  • 17
  • 243
  • 314
GIS-Jonathan
  • 4,347
  • 11
  • 31
  • 45
  • Do you mean `parameters` (e.g. query/header params) or model/schema `properties`? – Helen Dec 14 '18 at 15:17
  • 1
    Related: [How to define mutually exclusive query parameters in Swagger (OpenAPI)?](https://stackoverflow.com/q/21134029/113116) – Helen Dec 14 '18 at 15:18
  • @Helen - Query parameters. Your answer in that question (https://stackoverflow.com/a/49199240/1316981) does indeed answer my question. Alas it didn't come up in my search. Thanks! – GIS-Jonathan Dec 14 '18 at 15:47

1 Answers1

14

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

Helen
  • 87,344
  • 17
  • 243
  • 314
  • This did not work for me. The Kotlin OpenAPI generator (`v6.6.0`) will give me: `fun foo(@NotNull @Valid `param`: FooParamParameter)`, which even doesn't compile :( – Stefan Haberl May 15 '23 at 10:53
  • It's a tooling issue. Open a bug with OpenAPI Generator: https://github.com/OpenAPITools/openapi-generator/issues – Helen May 15 '23 at 11:10