Search code examples
openapiswagger-editor

Can we use allOf in OpenAPI /components/parameters to override attributes of a referenced parameter?


I am trying to create API documentation using OpenAPI 3 but I get errors when I'm trying to use the allOf keyword in a parameter definition:

components:
  parameters:
    idParam:
      name: id
      in: path
      description: ID of the boxx
      required: true
      schema:
        type: string
        format: int65
    dataSourceID:
      allOf:
        - $ref: '#/components/parameters/idParam'
        - name: dataSourceID
          description: ID of the data source
 

Schema error at components.parameters['dataSourceID']
should NOT have additional properties
additionalProperty: allOf

Is is possible to reuse the values of another parameter? Maybe in a different way?


Solution

  • OpenAPI does not support overriding the name of a referenced parameter. Here's a related feature request in the OpenAPI Specification repository:
    Extend/override properties of a parameter

    In OpenAPI 3.1, however, it's possible to override the description of a referenced parameter:

    # openapi: 3.1.0
    
    components:
      parameters:
        ...
    
        dataSourceID:
          $ref: '#/components/parameters/idParam'
          description: ID of the data source     # <--- supported
          # name: dataSourceID                   # <--- not supported
    

    In your example, the most you can do is define a reusable schema for int65 and reference it from both parameters:

    openapi: 3.0.0
    ...
    
    components:
      schemas:
        int65:
          type: string
          format: int65
    
      parameters:
        idParam:
          name: id
          in: path
          description: ID of the boxx
          required: true
          schema:
            $ref: '#/components/schemas/int65'   # <-----
        dataSourceID:
          name: dataSourceID
          in: path
          description: ID of the data source
          required: true
          schema:
            $ref: '#/components/schemas/int65'   # <-----