swagger-api/swagger-codegen

Json generated by `generate -l swagger` has duplicate path parameters

Open

#1,464 opened on Oct 29, 2015

View on GitHub
 (13 comments) (0 reactions) (0 assignees)HTML (12,701 stars) (5,474 forks)batch import
Feature: DocumentationIssue: Bughelp wanted

Description

Here are examples:

Input

swagger: '2.0'
info:
  version: 1.0.0
  title: Swagger Petstore (Simple)
  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: Swagger API team
    email: foo@example.com
    url: 'http://swagger.io'
  license:
    name: MIT
    url: 'http://opensource.org/licenses/MIT'
host: petstore.swagger.io
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
      operationId: findPets
      produces:
        - application/json
        - application/xml
        - text/xml
        - text/html
      parameters:
        - name: tags
          in: query
          description: tags to filter by
          required: false
          type: array
          items:
            type: string
          collectionFormat: csv
        - name: limit
          in: query
          description: maximum number of results to return
          required: false
          type: integer
          format: int32
      responses:
        '200':
          description: pet response
          schema:
            type: array
            items:
              $ref: '#/definitions/pet'
        default:
          description: unexpected error
          schema:
            $ref: '#/definitions/errorModel'
    post:
      description: Creates a new pet in the store.  Duplicates are allowed
      operationId: addPet
      produces:
        - application/json
      parameters:
        - name: pet
          in: body
          description: Pet to add to the store
          required: true
          schema:
            $ref: '#/definitions/newPet'
      responses:
        '200':
          description: pet response
          schema:
            $ref: '#/definitions/pet'
        default:
          description: unexpected error
          schema:
            $ref: '#/definitions/errorModel'
    parameters:
      - name: path_parameter
        in: query
        description: |
          This parameter is applicable for all the operations described under this path.
          This can be overridden at the operation level, but cannot be removed there.
        required: true
        type: integer
        format: int32
definitions:
  pet:
    type: object
    required:
      - id
      - name
    properties:
      id:
        type: integer
        format: int64
      name:
        type: string
      tag:
        type: string
  newPet:
    type: object
    required:
      - name
    properties:
      id:
        type: integer
        format: int64
      name:
        type: string
      tag:
        type: string
  errorModel:
    type: object
    required:
      - code
      - message
    properties:
      code:
        type: integer
        format: int32
      message:
        type: string

output

{
  "swagger" : "2.0",
  "info" : {
    "description" : "A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification",
    "version" : "1.0.0",
    "title" : "Swagger Petstore (Simple)",
    "termsOfService" : "http://helloreverb.com/terms/",
    "contact" : {
      "name" : "Swagger API team",
      "url" : "http://swagger.io",
      "email" : "foo@example.com"
    },
    "license" : {
      "name" : "MIT",
      "url" : "http://opensource.org/licenses/MIT"
    }
  },
  "host" : "petstore.swagger.io",
  "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",
        "operationId" : "findPets",
        "produces" : [ "application/json", "application/xml", "text/xml", "text/html" ],
        "parameters" : [ {
          "name" : "tags",
          "in" : "query",
          "description" : "tags to filter by",
          "required" : false,
          "type" : "array",
          "items" : {
            "type" : "string"
          },
          "collectionFormat" : "multi"
        }, {
          "name" : "limit",
          "in" : "query",
          "description" : "maximum number of results to return",
          "required" : false,
          "type" : "integer",
          "format" : "int32"
        }, {
          "name" : "path_parameter",
          "in" : "query",
          "description" : "This parameter is applicable for all the operations described under this path.\nThis can be overridden at the operation level, but cannot be removed there.\n",
          "required" : true,
          "type" : "integer",
          "format" : "int32"
        } ],
        "responses" : {
          "200" : {
            "description" : "pet response",
            "schema" : {
              "type" : "array",
              "items" : {
                "$ref" : "#/definitions/pet"
              }
            }
          },
          "default" : {
            "description" : "unexpected error",
            "schema" : {
              "$ref" : "#/definitions/errorModel"
            }
          }
        }
      },
      "post" : {
        "description" : "Creates a new pet in the store.  Duplicates are allowed",
        "operationId" : "addPet",
        "produces" : [ "application/json" ],
        "parameters" : [ {
          "in" : "body",
          "name" : "pet",
          "description" : "Pet to add to the store",
          "required" : true,
          "schema" : {
            "$ref" : "#/definitions/newPet"
          }
        }, {
          "name" : "path_parameter",
          "in" : "query",
          "description" : "This parameter is applicable for all the operations described under this path.\nThis can be overridden at the operation level, but cannot be removed there.\n",
          "required" : true,
          "type" : "integer",
          "format" : "int32"
        } ],
        "responses" : {
          "200" : {
            "description" : "pet response",
            "schema" : {
              "$ref" : "#/definitions/pet"
            }
          },
          "default" : {
            "description" : "unexpected error",
            "schema" : {
              "$ref" : "#/definitions/errorModel"
            }
          }
        }
      },
      "parameters" : [ {
        "name" : "path_parameter",
        "in" : "query",
        "description" : "This parameter is applicable for all the operations described under this path.\nThis can be overridden at the operation level, but cannot be removed there.\n",
        "required" : true,
        "type" : "integer",
        "format" : "int32"
      } ]
    }
  },
  "definitions" : {
    "pet" : {
      "required" : [ "id", "name" ],
      "properties" : {
        "id" : {
          "type" : "integer",
          "format" : "int64"
        },
        "name" : {
          "type" : "string"
        },
        "tag" : {
          "type" : "string"
        }
      }
    },
    "newPet" : {
      "required" : [ "name" ],
      "properties" : {
        "id" : {
          "type" : "integer",
          "format" : "int64"
        },
        "name" : {
          "type" : "string"
        },
        "tag" : {
          "type" : "string"
        }
      }
    },
    "errorModel" : {
      "required" : [ "code", "message" ],
      "properties" : {
        "code" : {
          "type" : "integer",
          "format" : "int32"
        },
        "message" : {
          "type" : "string"
        }
      }
    }
  }
}

As a result, every operation of /pets have two path_parameters :frowning:

Contributor guide