Search code examples
swaggerswagger-uiswagger-2.0swagger-editor

Parameters reference in definition of same file cause causes Swagger Error


I am trying to reference some parameters that I use in multiple paths in the definition section of a swagger yaml file and even though the documentation is rendered as expected and the requests are created correctly, when using the try it out button, I am getting this error.

Swagger Error
A deterministic version of a JSON Schema object.
Jump to line 45
Details
 Object
code:  "OBJECT_ADDITIONAL_PROPERTIES"
message:  "Additional properties not allowed: in,name"
 path: Array [2]
0:  "definitions"
1:  "limitsParam"
description:  "A deterministic version of a JSON Schema object."
level: 900
type:  "Swagger Error"
lineNumber: 45

The actual yaml is this

swagger: "2.0"
info:
  version: 1.0.0
  title: Swagger Petstore
  description: A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification
  termsOfService: http://helloreverb.com/terms/
  contact:
    name: Wordnik API Team
    email: foo@example.com
    url: http://madskristensen.net
  license:
    name: MIT
    url: http://github.com/gruntjs/grunt/blob/master/LICENSE-MIT
host: petstore.swagger.wordnik.com
basePath: /api
schemes:
  - http
consumes:
  - application/json
produces:
  - application/json
paths:
  /pets:
    get:
      description: |
        Returns all pets from the system that the user has access to
        Nam sed condimentum est. Maecenas tempor sagittis sapien, nec rhoncus sem sagittis sit amet. Aenean at gravida augue, ac iaculis sem. Curabitur odio lorem, ornare eget elementum nec, cursus id lectus. Duis mi turpis, pulvinar ac eros ac, tincidunt varius justo. In hac habitasse platea dictumst. Integer at adipiscing ante, a sagittis ligula. Aenean pharetra tempor ante molestie imperdiet. Vivamus id aliquam diam. Cras quis velit non tortor eleifend sagittis. Praesent at enim pharetra urna volutpat venenatis eget eget mauris. In eleifend fermentum facilisis. Praesent enim enim, gravida ac sodales sed, placerat id erat. Suspendisse lacus dolor, consectetur non augue vel, vehicula interdum libero. Morbi euismod sagittis libero sed lacinia.
        Sed tempus felis lobortis leo pulvinar rutrum. Nam mattis velit nisl, eu condimentum ligula luctus nec. Phasellus semper velit eget aliquet faucibus. In a mattis elit. Phasellus vel urna viverra, condimentum lorem id, rhoncus nibh. Ut pellentesque posuere elementum. Sed a varius odio. Morbi rhoncus ligula libero, vel eleifend nunc tristique vitae. Fusce et sem dui. Aenean nec scelerisque tortor. Fusce malesuada accumsan magna vel tempus. Quisque mollis felis eu dolor tristique, sit amet auctor felis gravida. Sed libero lorem, molestie sed nisl in, accumsan tempor nisi. Fusce sollicitudin massa ut lacinia mattis. Sed vel eleifend lorem. Pellentesque vitae felis pretium, pulvinar elit eu, euismod sapien.
      operationId: findPets
      parameters:
        - $ref: '#/definitions/tagsParam'
        - $ref: '#/definitions/limitsParam'


definitions:
  tagsParam:
    name: tags
    in: query
    description: tags to filter by
    required: false
    type: array
    collectionFormat: csv
    items:
      type: string
  limitsParam:
    name: limit
    in: query
    description: maximum number of results to return
    required: false
    type: integer
    format: int32

Which composed of the first few lines of the separate example swagger.yaml and inside the definition is the parameters.yaml from inside the same folder

I tweaked the references so they point to the actual definition inside the same file and not to another file. If you copy and paste this yaml in the online editor you will get this exact error.


Solution

  • The problem for anyone that gets the same error, is that you cannot define a parameter inside the definitions section of a swagger object. You should define it in the section parameters and not definitions

    swagger: "2.0"
    info:
      version: 1.0.0
      title: Swagger Petstore
      description: A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification
      termsOfService: http://helloreverb.com/terms/
      contact:
        name: Wordnik API Team
        email: foo@example.com
        url: http://madskristensen.net
      license:
        name: MIT
        url: http://github.com/gruntjs/grunt/blob/master/LICENSE-MIT
    host: petstore.swagger.wordnik.com
    basePath: /api
    schemes:
      - http
    consumes:
      - application/json
    produces:
      - application/json
    paths:
      /pets:
        get:
          description: |
            Returns all pets from the system that the user has access to
            Nam sed condimentum est. Maecenas tempor sagittis sapien, nec rhoncus sem sagittis sit amet. Aenean at gravida augue, ac iaculis sem. Curabitur odio lorem, ornare eget elementum nec, cursus id lectus. Duis mi turpis, pulvinar ac eros ac, tincidunt varius justo. In hac habitasse platea dictumst. Integer at adipiscing ante, a sagittis ligula. Aenean pharetra tempor ante molestie imperdiet. Vivamus id aliquam diam. Cras quis velit non tortor eleifend sagittis. Praesent at enim pharetra urna volutpat venenatis eget eget mauris. In eleifend fermentum facilisis. Praesent enim enim, gravida ac sodales sed, placerat id erat. Suspendisse lacus dolor, consectetur non augue vel, vehicula interdum libero. Morbi euismod sagittis libero sed lacinia.
            Sed tempus felis lobortis leo pulvinar rutrum. Nam mattis velit nisl, eu condimentum ligula luctus nec. Phasellus semper velit eget aliquet faucibus. In a mattis elit. Phasellus vel urna viverra, condimentum lorem id, rhoncus nibh. Ut pellentesque posuere elementum. Sed a varius odio. Morbi rhoncus ligula libero, vel eleifend nunc tristique vitae. Fusce et sem dui. Aenean nec scelerisque tortor. Fusce malesuada accumsan magna vel tempus. Quisque mollis felis eu dolor tristique, sit amet auctor felis gravida. Sed libero lorem, molestie sed nisl in, accumsan tempor nisi. Fusce sollicitudin massa ut lacinia mattis. Sed vel eleifend lorem. Pellentesque vitae felis pretium, pulvinar elit eu, euismod sapien.
          operationId: findPets
          parameters:
            - $ref: '#/parameters/tagsParam'
            - $ref: '#/parameters/limitsParam'
    
    
    parameters:
      tagsParam:
        name: tags
        in: query
        description: tags to filter by
        required: false
        type: array
        collectionFormat: csv
        items:
          type: string
      limitsParam:
        name: limit
        in: query
        description: maximum number of results to return
        required: false
        type: integer
        format: int32