From 28a1255c0e9fd9b7c7c76221be90b41dd1499ebf Mon Sep 17 00:00:00 2001 From: William Cheng Date: Fri, 20 Apr 2018 12:05:27 +0800 Subject: [PATCH] Update Go server petstore sample with OAS3 (#154) * restore go server from codegen 2x * update go server petstore with oas3 --- .../petstore/go-api-server/api/openapi.yaml | 159 ++-- .../petstore/go-api-server/api/swagger.yaml | 780 ------------------ 2 files changed, 79 insertions(+), 860 deletions(-) delete mode 100644 samples/server/petstore/go-api-server/api/swagger.yaml diff --git a/samples/server/petstore/go-api-server/api/openapi.yaml b/samples/server/petstore/go-api-server/api/openapi.yaml index 3c412357c80..6400aefe42b 100644 --- a/samples/server/petstore/go-api-server/api/openapi.yaml +++ b/samples/server/petstore/go-api-server/api/openapi.yaml @@ -1,4 +1,4 @@ -openapi: 3.0.0 +openapi: 3.0.1 info: title: Swagger Petstore description: 'This is a sample server Petstore server. You can find out more about @@ -37,14 +37,25 @@ paths: summary: Update an existing pet operationId: updatePet requestBody: - $ref: '#/components/requestBodies/Pet' + description: Pet object that needs to be added to the store + content: + application/json: + schema: + $ref: '#/components/schemas/Pet' + application/xml: + schema: + $ref: '#/components/schemas/Pet' + required: true responses: 400: description: Invalid ID supplied + content: {} 404: description: Pet not found + content: {} 405: description: Validation exception + content: {} security: - petstore_auth: - write:pets @@ -55,10 +66,19 @@ paths: summary: Add a new pet to the store operationId: addPet requestBody: - $ref: '#/components/requestBodies/Pet' + description: Pet object that needs to be added to the store + content: + application/json: + schema: + $ref: '#/components/schemas/Pet' + application/xml: + schema: + $ref: '#/components/schemas/Pet' + required: true responses: 405: description: Invalid input + content: {} security: - petstore_auth: - write:pets @@ -75,7 +95,6 @@ paths: in: query description: Status values that need to be considered for filter required: true - style: form explode: false schema: type: array @@ -102,6 +121,7 @@ paths: $ref: '#/components/schemas/Pet' 400: description: Invalid status value + content: {} security: - petstore_auth: - write:pets @@ -118,7 +138,6 @@ paths: in: query description: Tags to filter by required: true - style: form explode: false schema: type: array @@ -140,6 +159,7 @@ paths: $ref: '#/components/schemas/Pet' 400: description: Invalid tag value + content: {} deprecated: true security: - petstore_auth: @@ -157,8 +177,6 @@ paths: in: path description: ID of pet to return required: true - style: simple - explode: false schema: type: integer format: int64 @@ -174,8 +192,10 @@ paths: $ref: '#/components/schemas/Pet' 400: description: Invalid ID supplied + content: {} 404: description: Pet not found + content: {} security: - api_key: [] post: @@ -188,8 +208,6 @@ paths: in: path description: ID of pet that needs to be updated required: true - style: simple - explode: false schema: type: integer format: int64 @@ -197,10 +215,17 @@ paths: content: application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/body' + properties: + name: + type: string + description: Updated name of the pet + status: + type: string + description: Updated status of the pet responses: 405: description: Invalid input + content: {} security: - petstore_auth: - write:pets @@ -213,23 +238,19 @@ paths: parameters: - name: api_key in: header - required: false - style: simple - explode: false schema: type: string - name: petId in: path description: Pet id to delete required: true - style: simple - explode: false schema: type: integer format: int64 responses: 400: description: Invalid pet value + content: {} security: - petstore_auth: - write:pets @@ -245,8 +266,6 @@ paths: in: path description: ID of pet to update required: true - style: simple - explode: false schema: type: integer format: int64 @@ -254,7 +273,14 @@ paths: content: multipart/form-data: schema: - $ref: '#/components/schemas/body_1' + properties: + additionalMetadata: + type: string + description: Additional data to pass to server + file: + type: string + description: file to upload + format: binary responses: 200: description: successful operation @@ -294,7 +320,7 @@ paths: requestBody: description: order placed for purchasing the pet content: - application/json: + '*/*': schema: $ref: '#/components/schemas/Order' required: true @@ -310,6 +336,7 @@ paths: $ref: '#/components/schemas/Order' 400: description: Invalid Order + content: {} /store/order/{orderId}: get: tags: @@ -322,8 +349,6 @@ paths: in: path description: ID of pet that needs to be fetched required: true - style: simple - explode: false schema: maximum: 5 minimum: 1 @@ -341,8 +366,10 @@ paths: $ref: '#/components/schemas/Order' 400: description: Invalid ID supplied + content: {} 404: description: Order not found + content: {} delete: tags: - store @@ -354,15 +381,15 @@ paths: in: path description: ID of the order that needs to be deleted required: true - style: simple - explode: false schema: type: string responses: 400: description: Invalid ID supplied + content: {} 404: description: Order not found + content: {} /user: post: tags: @@ -373,13 +400,14 @@ paths: requestBody: description: Created user object content: - application/json: + '*/*': schema: $ref: '#/components/schemas/User' required: true responses: default: description: successful operation + content: {} /user/createWithArray: post: tags: @@ -387,10 +415,18 @@ paths: summary: Creates list of users with given input array operationId: createUsersWithArrayInput requestBody: - $ref: '#/components/requestBodies/UserArray' + description: List of user object + content: + '*/*': + schema: + type: array + items: + $ref: '#/components/schemas/User' + required: true responses: default: description: successful operation + content: {} /user/createWithList: post: tags: @@ -398,10 +434,18 @@ paths: summary: Creates list of users with given input array operationId: createUsersWithListInput requestBody: - $ref: '#/components/requestBodies/UserArray' + description: List of user object + content: + '*/*': + schema: + type: array + items: + $ref: '#/components/schemas/User' + required: true responses: default: description: successful operation + content: {} /user/login: get: tags: @@ -413,16 +457,12 @@ paths: in: query description: The user name for login required: true - style: form - explode: true schema: type: string - name: password in: query description: The password for login in clear text required: true - style: form - explode: true schema: type: string responses: @@ -431,15 +471,11 @@ paths: headers: X-Rate-Limit: description: calls per hour allowed by the user - style: simple - explode: false schema: type: integer format: int32 X-Expires-After: description: date in UTC when toekn expires - style: simple - explode: false schema: type: string format: date-time @@ -452,6 +488,7 @@ paths: type: string 400: description: Invalid username/password supplied + content: {} /user/logout: get: tags: @@ -461,6 +498,7 @@ paths: responses: default: description: successful operation + content: {} /user/{username}: get: tags: @@ -472,8 +510,6 @@ paths: in: path description: The name that needs to be fetched. Use user1 for testing. required: true - style: simple - explode: false schema: type: string responses: @@ -488,8 +524,10 @@ paths: $ref: '#/components/schemas/User' 400: description: Invalid username supplied + content: {} 404: description: User not found + content: {} put: tags: - user @@ -501,22 +539,22 @@ paths: in: path description: name that need to be deleted required: true - style: simple - explode: false schema: type: string requestBody: description: Updated user object content: - application/json: + '*/*': schema: $ref: '#/components/schemas/User' required: true responses: 400: description: Invalid user supplied + content: {} 404: description: User not found + content: {} delete: tags: - user @@ -528,15 +566,15 @@ paths: in: path description: The name that needs to be deleted required: true - style: simple - explode: false schema: type: string responses: 400: description: Invalid username supplied + content: {} 404: description: User not found + content: {} components: schemas: Order: @@ -710,45 +748,6 @@ components: code: 0 type: type message: message - body: - type: object - properties: - name: - type: string - description: Updated name of the pet - status: - type: string - description: Updated status of the pet - body_1: - type: object - properties: - additionalMetadata: - type: string - description: Additional data to pass to server - file: - type: string - description: file to upload - format: binary - requestBodies: - UserArray: - description: List of user object - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/User' - required: true - Pet: - description: Pet object that needs to be added to the store - content: - application/json: - schema: - $ref: '#/components/schemas/Pet' - application/xml: - schema: - $ref: '#/components/schemas/Pet' - required: true securitySchemes: petstore_auth: type: oauth2 diff --git a/samples/server/petstore/go-api-server/api/swagger.yaml b/samples/server/petstore/go-api-server/api/swagger.yaml deleted file mode 100644 index 90f36067bbc..00000000000 --- a/samples/server/petstore/go-api-server/api/swagger.yaml +++ /dev/null @@ -1,780 +0,0 @@ ---- -swagger: "2.0" -info: - description: "This is a sample server Petstore server. You can find out more about\ - \ Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/).\ - \ For this sample, you can use the api key `special-key` to test the authorization\ - \ filters." - version: "1.0.0" - title: "Swagger Petstore" - termsOfService: "http://swagger.io/terms/" - contact: - email: "apiteam@swagger.io" - license: - name: "Apache-2.0" - url: "http://www.apache.org/licenses/LICENSE-2.0.html" -host: "petstore.swagger.io" -basePath: "/v2" -tags: -- name: "pet" - description: "Everything about your Pets" - externalDocs: - description: "Find out more" - url: "http://swagger.io" -- name: "store" - description: "Access to Petstore orders" -- name: "user" - description: "Operations about user" - externalDocs: - description: "Find out more about our store" - url: "http://swagger.io" -schemes: -- "http" -paths: - /pet: - post: - tags: - - "pet" - summary: "Add a new pet to the store" - description: "" - operationId: "addPet" - consumes: - - "application/json" - - "application/xml" - produces: - - "application/xml" - - "application/json" - parameters: - - in: "body" - name: "body" - description: "Pet object that needs to be added to the store" - required: true - schema: - $ref: "#/definitions/Pet" - x-exportParamName: "Body" - responses: - 405: - description: "Invalid input" - security: - - petstore_auth: - - "write:pets" - - "read:pets" - put: - tags: - - "pet" - summary: "Update an existing pet" - description: "" - operationId: "updatePet" - consumes: - - "application/json" - - "application/xml" - produces: - - "application/xml" - - "application/json" - parameters: - - in: "body" - name: "body" - description: "Pet object that needs to be added to the store" - required: true - schema: - $ref: "#/definitions/Pet" - x-exportParamName: "Body" - responses: - 400: - description: "Invalid ID supplied" - 404: - description: "Pet not found" - 405: - description: "Validation exception" - security: - - petstore_auth: - - "write:pets" - - "read:pets" - /pet/findByStatus: - get: - tags: - - "pet" - summary: "Finds Pets by status" - description: "Multiple status values can be provided with comma separated strings" - operationId: "findPetsByStatus" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "status" - in: "query" - description: "Status values that need to be considered for filter" - required: true - type: "array" - items: - type: "string" - default: "available" - enum: - - "available" - - "pending" - - "sold" - collectionFormat: "csv" - x-exportParamName: "Status" - responses: - 200: - description: "successful operation" - schema: - type: "array" - items: - $ref: "#/definitions/Pet" - 400: - description: "Invalid status value" - security: - - petstore_auth: - - "write:pets" - - "read:pets" - /pet/findByTags: - get: - tags: - - "pet" - summary: "Finds Pets by tags" - description: "Multiple tags can be provided with comma separated strings. Use\ - \ tag1, tag2, tag3 for testing." - operationId: "findPetsByTags" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "tags" - in: "query" - description: "Tags to filter by" - required: true - type: "array" - items: - type: "string" - collectionFormat: "csv" - x-exportParamName: "Tags" - responses: - 200: - description: "successful operation" - schema: - type: "array" - items: - $ref: "#/definitions/Pet" - 400: - description: "Invalid tag value" - security: - - petstore_auth: - - "write:pets" - - "read:pets" - deprecated: true - /pet/{petId}: - get: - tags: - - "pet" - summary: "Find pet by ID" - description: "Returns a single pet" - operationId: "getPetById" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "petId" - in: "path" - description: "ID of pet to return" - required: true - type: "integer" - format: "int64" - x-exportParamName: "PetId" - responses: - 200: - description: "successful operation" - schema: - $ref: "#/definitions/Pet" - 400: - description: "Invalid ID supplied" - 404: - description: "Pet not found" - security: - - api_key: [] - post: - tags: - - "pet" - summary: "Updates a pet in the store with form data" - description: "" - operationId: "updatePetWithForm" - consumes: - - "application/x-www-form-urlencoded" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "petId" - in: "path" - description: "ID of pet that needs to be updated" - required: true - type: "integer" - format: "int64" - x-exportParamName: "PetId" - - name: "name" - in: "formData" - description: "Updated name of the pet" - required: false - type: "string" - x-exportParamName: "Name" - - name: "status" - in: "formData" - description: "Updated status of the pet" - required: false - type: "string" - x-exportParamName: "Status" - responses: - 405: - description: "Invalid input" - security: - - petstore_auth: - - "write:pets" - - "read:pets" - delete: - tags: - - "pet" - summary: "Deletes a pet" - description: "" - operationId: "deletePet" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "api_key" - in: "header" - required: false - type: "string" - x-exportParamName: "ApiKey" - - name: "petId" - in: "path" - description: "Pet id to delete" - required: true - type: "integer" - format: "int64" - x-exportParamName: "PetId" - responses: - 400: - description: "Invalid pet value" - security: - - petstore_auth: - - "write:pets" - - "read:pets" - /pet/{petId}/uploadImage: - post: - tags: - - "pet" - summary: "uploads an image" - description: "" - operationId: "uploadFile" - consumes: - - "multipart/form-data" - produces: - - "application/json" - parameters: - - name: "petId" - in: "path" - description: "ID of pet to update" - required: true - type: "integer" - format: "int64" - x-exportParamName: "PetId" - - name: "additionalMetadata" - in: "formData" - description: "Additional data to pass to server" - required: false - type: "string" - x-exportParamName: "AdditionalMetadata" - - name: "file" - in: "formData" - description: "file to upload" - required: false - type: "file" - x-exportParamName: "File" - responses: - 200: - description: "successful operation" - schema: - $ref: "#/definitions/ApiResponse" - security: - - petstore_auth: - - "write:pets" - - "read:pets" - /store/inventory: - get: - tags: - - "store" - summary: "Returns pet inventories by status" - description: "Returns a map of status codes to quantities" - operationId: "getInventory" - produces: - - "application/json" - parameters: [] - responses: - 200: - description: "successful operation" - schema: - type: "object" - additionalProperties: - type: "integer" - format: "int32" - security: - - api_key: [] - /store/order: - post: - tags: - - "store" - summary: "Place an order for a pet" - description: "" - operationId: "placeOrder" - produces: - - "application/xml" - - "application/json" - parameters: - - in: "body" - name: "body" - description: "order placed for purchasing the pet" - required: true - schema: - $ref: "#/definitions/Order" - x-exportParamName: "Body" - responses: - 200: - description: "successful operation" - schema: - $ref: "#/definitions/Order" - 400: - description: "Invalid Order" - /store/order/{orderId}: - get: - tags: - - "store" - summary: "Find purchase order by ID" - description: "For valid response try integer IDs with value <= 5 or > 10. Other\ - \ values will generated exceptions" - operationId: "getOrderById" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "orderId" - in: "path" - description: "ID of pet that needs to be fetched" - required: true - type: "integer" - maximum: 5 - minimum: 1 - format: "int64" - x-exportParamName: "OrderId" - responses: - 200: - description: "successful operation" - schema: - $ref: "#/definitions/Order" - 400: - description: "Invalid ID supplied" - 404: - description: "Order not found" - delete: - tags: - - "store" - summary: "Delete purchase order by ID" - description: "For valid response try integer IDs with value < 1000. Anything\ - \ above 1000 or nonintegers will generate API errors" - operationId: "deleteOrder" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "orderId" - in: "path" - description: "ID of the order that needs to be deleted" - required: true - type: "string" - x-exportParamName: "OrderId" - responses: - 400: - description: "Invalid ID supplied" - 404: - description: "Order not found" - /user: - post: - tags: - - "user" - summary: "Create user" - description: "This can only be done by the logged in user." - operationId: "createUser" - produces: - - "application/xml" - - "application/json" - parameters: - - in: "body" - name: "body" - description: "Created user object" - required: true - schema: - $ref: "#/definitions/User" - x-exportParamName: "Body" - responses: - default: - description: "successful operation" - /user/createWithArray: - post: - tags: - - "user" - summary: "Creates list of users with given input array" - description: "" - operationId: "createUsersWithArrayInput" - produces: - - "application/xml" - - "application/json" - parameters: - - in: "body" - name: "body" - description: "List of user object" - required: true - schema: - type: "array" - items: - $ref: "#/definitions/User" - x-exportParamName: "Body" - responses: - default: - description: "successful operation" - /user/createWithList: - post: - tags: - - "user" - summary: "Creates list of users with given input array" - description: "" - operationId: "createUsersWithListInput" - produces: - - "application/xml" - - "application/json" - parameters: - - in: "body" - name: "body" - description: "List of user object" - required: true - schema: - type: "array" - items: - $ref: "#/definitions/User" - x-exportParamName: "Body" - responses: - default: - description: "successful operation" - /user/login: - get: - tags: - - "user" - summary: "Logs user into the system" - description: "" - operationId: "loginUser" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "username" - in: "query" - description: "The user name for login" - required: true - type: "string" - x-exportParamName: "Username" - - name: "password" - in: "query" - description: "The password for login in clear text" - required: true - type: "string" - x-exportParamName: "Password" - responses: - 200: - description: "successful operation" - schema: - type: "string" - headers: - X-Rate-Limit: - type: "integer" - format: "int32" - description: "calls per hour allowed by the user" - X-Expires-After: - type: "string" - format: "date-time" - description: "date in UTC when toekn expires" - 400: - description: "Invalid username/password supplied" - /user/logout: - get: - tags: - - "user" - summary: "Logs out current logged in user session" - description: "" - operationId: "logoutUser" - produces: - - "application/xml" - - "application/json" - parameters: [] - responses: - default: - description: "successful operation" - /user/{username}: - get: - tags: - - "user" - summary: "Get user by user name" - description: "" - operationId: "getUserByName" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "username" - in: "path" - description: "The name that needs to be fetched. Use user1 for testing." - required: true - type: "string" - x-exportParamName: "Username" - responses: - 200: - description: "successful operation" - schema: - $ref: "#/definitions/User" - 400: - description: "Invalid username supplied" - 404: - description: "User not found" - put: - tags: - - "user" - summary: "Updated user" - description: "This can only be done by the logged in user." - operationId: "updateUser" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "username" - in: "path" - description: "name that need to be deleted" - required: true - type: "string" - x-exportParamName: "Username" - - in: "body" - name: "body" - description: "Updated user object" - required: true - schema: - $ref: "#/definitions/User" - x-exportParamName: "Body" - responses: - 400: - description: "Invalid user supplied" - 404: - description: "User not found" - delete: - tags: - - "user" - summary: "Delete user" - description: "This can only be done by the logged in user." - operationId: "deleteUser" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "username" - in: "path" - description: "The name that needs to be deleted" - required: true - type: "string" - x-exportParamName: "Username" - responses: - 400: - description: "Invalid username supplied" - 404: - description: "User not found" -securityDefinitions: - petstore_auth: - type: "oauth2" - authorizationUrl: "http://petstore.swagger.io/api/oauth/dialog" - flow: "implicit" - scopes: - write:pets: "modify pets in your account" - read:pets: "read your pets" - api_key: - type: "apiKey" - name: "api_key" - in: "header" -definitions: - Order: - type: "object" - properties: - id: - type: "integer" - format: "int64" - petId: - type: "integer" - format: "int64" - quantity: - type: "integer" - format: "int32" - shipDate: - type: "string" - format: "date-time" - status: - type: "string" - description: "Order Status" - enum: - - "placed" - - "approved" - - "delivered" - complete: - type: "boolean" - default: false - title: "Pet Order" - description: "An order for a pets from the pet store" - example: - petId: 6 - quantity: 1 - id: 0 - shipDate: "2000-01-23T04:56:07.000+00:00" - complete: false - status: "placed" - xml: - name: "Order" - Category: - type: "object" - properties: - id: - type: "integer" - format: "int64" - name: - type: "string" - title: "Pet category" - description: "A category for a pet" - example: - name: "name" - id: 6 - xml: - name: "Category" - User: - type: "object" - properties: - id: - type: "integer" - format: "int64" - username: - type: "string" - firstName: - type: "string" - lastName: - type: "string" - email: - type: "string" - password: - type: "string" - phone: - type: "string" - userStatus: - type: "integer" - format: "int32" - description: "User Status" - title: "a User" - description: "A User who is purchasing from the pet store" - example: - firstName: "firstName" - lastName: "lastName" - password: "password" - userStatus: 6 - phone: "phone" - id: 0 - email: "email" - username: "username" - xml: - name: "User" - Tag: - type: "object" - properties: - id: - type: "integer" - format: "int64" - name: - type: "string" - title: "Pet Tag" - description: "A tag for a pet" - example: - name: "name" - id: 1 - xml: - name: "Tag" - Pet: - type: "object" - required: - - "name" - - "photoUrls" - properties: - id: - type: "integer" - format: "int64" - category: - $ref: "#/definitions/Category" - name: - type: "string" - example: "doggie" - photoUrls: - type: "array" - xml: - name: "photoUrl" - wrapped: true - items: - type: "string" - tags: - type: "array" - xml: - name: "tag" - wrapped: true - items: - $ref: "#/definitions/Tag" - status: - type: "string" - description: "pet status in the store" - enum: - - "available" - - "pending" - - "sold" - title: "a Pet" - description: "A pet for sale in the pet store" - example: - photoUrls: - - "photoUrls" - - "photoUrls" - name: "doggie" - id: 0 - category: - name: "name" - id: 6 - tags: - - name: "name" - id: 1 - - name: "name" - id: 1 - status: "available" - xml: - name: "Pet" - ApiResponse: - type: "object" - properties: - code: - type: "integer" - format: "int32" - type: - type: "string" - message: - type: "string" - title: "An uploaded response" - description: "Describes the result of uploading an image resource" - example: - code: 0 - type: "type" - message: "message" -externalDocs: - description: "Find out more about Swagger" - url: "http://swagger.io"