Forum Discussion

as's avatar
as
New Contributor
5 years ago

Swagger Response Body require object if property equals a value OpenApi Spec 3

Let's say we have a simple response

 

{
"check_completed": true,
"check_details": {
    "check_number": 123123.
    "check_mechanic": "Joe Blogs"
}
}
CheckResponse:
      type: object
      required:
        - check_completed
      properties:
        check_completed:
             type: boolean
        check_details:
             $ref: '#/components/schemas/checkdetails'

Is it possible to mark the check_details as required if check_completed is true?

  • It's possible but cumbersome. You need to use anyOf, like this:

    CheckResponse:
      type: object
      required:
        - check_completed
      properties:
        check_completed:
          type: boolean
        check_details:
          $ref: '#/components/schemas/checkdetails'
      anyOf:
        - properties:
            check_completed:
              enum: [false]
        - properties:
            check_completed:
              enum: [true]
          required:
            - check_details

    I would recommend describing this dependency in the schema/property descriptions instead.

     

    OpenAPI 3.1 (future version) will make this easier thanks to using the latest JSON Schema which includes if...then..else among other things.

    CheckResponse::
      type: object
      required:
        - check_completed
      properties:
        check_completed:
          type: boolean
        check_details:
          $ref: '#/components/schemas/checkdetails'
      if:
        properties:
          check_completed:
            const: true
      then:
        required:
          - check_details
  • HKosova's avatar
    HKosova
    SmartBear Alumni (Retired)

    It's possible but cumbersome. You need to use anyOf, like this:

    CheckResponse:
      type: object
      required:
        - check_completed
      properties:
        check_completed:
          type: boolean
        check_details:
          $ref: '#/components/schemas/checkdetails'
      anyOf:
        - properties:
            check_completed:
              enum: [false]
        - properties:
            check_completed:
              enum: [true]
          required:
            - check_details

    I would recommend describing this dependency in the schema/property descriptions instead.

     

    OpenAPI 3.1 (future version) will make this easier thanks to using the latest JSON Schema which includes if...then..else among other things.

    CheckResponse::
      type: object
      required:
        - check_completed
      properties:
        check_completed:
          type: boolean
        check_details:
          $ref: '#/components/schemas/checkdetails'
      if:
        properties:
          check_completed:
            const: true
      then:
        required:
          - check_details