Contributions
Query on Model, server response and openapi file
I was looking into petstore sample api, modified it a bit with oneOf, anyOf etc,. I have attached the yaml file. When I POST with the below request body which has Dog properties “bark” and “breed” to /pet, I get 200 ok. { "id": 111, "name": "doggie", "category": { "id": 1, "name": "Dogs" }, "photoUrls": [ "string" ], "tags": [ { "id": 0, "name": "string" } ], "status": "available", "bark": true, "breed": "Dingo" } But when I do GET /pet/{petId} with id 111, I don’t get Dog properties “bark” and “breed” back from the server. I get the below response without Dog properties. { "id": 111, "category": { "id": 1, "name": "Dogs" }, "name": "doggie", "photoUrls": [ "string" ], "tags": [ { "id": 0, "name": "string" } ], "status": "available" } The reason for not getting the Dog properties is because, https://github.com/swagger-api/swagger-petstore/tree/master/src/main/java/io/swagger/petstore/model does not have Dog. Is that correct? Looking forward for your response.397Views0likes0CommentsRe: Oneof doesnt seem to work and discriminator keyword is not working in editor.swagger.io
Thanks for your responseponelat. Sorry I misunderstood the server response. So since we dont have a Dog or Cat model in the repositoryswagger-petstore/src/main/java/io/swagger/petstore/model at master · swagger-api/swagger-petstore · GitHub, we dont get Cat or Dog properties in server response when we do GET operation, eventhough we POST Cat or Dog properties in the request body of POST. Is that correct? Looking forward for your response. Thank you1.2KViews0likes1CommentOneof doesnt seem to work and discriminator keyword is not working in editor.swagger.io
This is simplified petstore (I have removed user and store), I have added one of, all of and any of. One of doesn't seem to work; openapi: 3.0.3 info: title: Swagger Petstore - OpenAPI 3.0 description: |- This is a sample Pet Store Server based on the OpenAPI 3.0 specification. You can find out more about Swagger at [https://swagger.io](https://swagger.io). In the third iteration of the pet store, we've switched to the design first approach! You can now help us improve the API whether it's by making changes to the definition itself or to the code. That way, with time, we can improve the API in general, and expose some of the new features in OAS3. _If you're looking for the Swagger 2.0/OAS 2.0 version of Petstore, then click [here](https://editor.swagger.io/?url=https://petstore.swagger.io/v2/swagger.yaml). Alternatively, you can load via the `Edit > Load Petstore OAS 2.0` menu option!_ Some useful links: - [The Pet Store repository](https://github.com/swagger-api/swagger-petstore) - [The source API definition for the Pet Store](https://github.com/swagger-api/swagger-petstore/blob/master/src/main/resources/openapi.yaml) 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 version: 1.0.11 externalDocs: description: Find out more about Swagger url: http://swagger.io servers: - url: https://petstore3.swagger.io/api/v3 tags: - name: pet description: Everything about your Pets externalDocs: description: Find out more url: http://swagger.io paths: /pet: put: tags: - pet summary: Update an existing pet description: Update an existing pet by Id operationId: updatePet requestBody: description: Update an existent pet in the store content: application/json: schema: oneOf: - $ref: '#/components/schemas/Cat' - $ref: '#/components/schemas/Dog' #discriminator: #propertyName: "type" application/xml: schema: oneOf: - $ref: '#/components/schemas/Cat' - $ref: '#/components/schemas/Dog' application/x-www-form-urlencoded: schema: oneOf: - $ref: '#/components/schemas/Cat' - $ref: '#/components/schemas/Dog' required: true responses: '200': description: Successful operation content: application/json: schema: oneOf: - $ref: '#/components/schemas/Cat' - $ref: '#/components/schemas/Dog' application/xml: schema: oneOf: - $ref: '#/components/schemas/Cat' - $ref: '#/components/schemas/Dog' '400': description: Invalid ID supplied '404': description: Pet not found '405': description: Validation exception security: - petstore_auth: - write:pets - read:pets post: tags: - pet summary: Add a new pet to the store description: Add a new pet to the store operationId: addPet requestBody: description: Create a new pet in the store content: application/json: schema: anyOf: - $ref: '#/components/schemas/PetByAge' - $ref: '#/components/schemas/PetByType' application/xml: schema: anyOf: - $ref: '#/components/schemas/PetByAge' - $ref: '#/components/schemas/PetByType' application/x-www-form-urlencoded: schema: anyOf: - $ref: '#/components/schemas/PetByAge' - $ref: '#/components/schemas/PetByType' required: true responses: '200': description: Successful operation content: application/json: schema: $ref: '#/components/schemas/Pet' application/xml: schema: $ref: '#/components/schemas/Pet' '405': description: Invalid input 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 parameters: - name: tags in: query description: Tags to filter by required: false explode: true schema: type: array items: type: string responses: '200': description: successful operation content: application/json: schema: type: array items: $ref: '#/components/schemas/Pet' application/xml: schema: type: array items: $ref: '#/components/schemas/Pet' '400': description: Invalid tag value security: - petstore_auth: - write:pets - read:pets /pet/{petId}: get: tags: - pet summary: Find pet by ID description: Returns a single pet operationId: getPetById parameters: - name: petId in: path description: ID of pet to return required: true schema: type: integer format: int64 responses: '200': description: successful operation content: application/json: schema: oneOf: - $ref: '#/components/schemas/Cat' - $ref: '#/components/schemas/Dog' discriminator: petType application/xml: schema: oneOf: - $ref: '#/components/schemas/Cat' - $ref: '#/components/schemas/Dog' '400': description: Invalid ID supplied '404': description: Pet not found security: - api_key: [] - petstore_auth: - write:pets - read:pets post: tags: - pet summary: Updates a pet in the store with form data description: '' operationId: updatePetWithForm parameters: - name: petId in: path description: ID of pet that needs to be updated required: true schema: type: integer format: int64 - name: name in: query description: Name of pet that needs to be updated schema: type: string - name: status in: query description: Status of pet that needs to be updated schema: type: string responses: '405': description: Invalid input security: - petstore_auth: - write:pets - read:pets delete: tags: - pet summary: Deletes a pet description: delete a pet operationId: deletePet parameters: - name: api_key in: header description: '' required: false schema: type: string - name: petId in: path description: Pet id to delete required: true schema: type: integer format: int64 responses: '400': description: Invalid pet value security: - petstore_auth: - write:pets - read:pets components: schemas: Category: type: object properties: id: type: integer format: int64 example: 1 name: type: string example: Dogs xml: name: category Tag: type: object properties: id: type: integer format: int64 name: type: string xml: name: tag Dog: allOf: - $ref: '#/components/schemas/Pet' - type: object # all other properties specific to a `Dog` properties: bark: type: boolean breed: type: string example: Husky Cat: allOf: - $ref: '#/components/schemas/Pet' - type: object # all other properties specific to a `Cat` properties: hunts: type: boolean age: type: integer example: 23 Pet: required: - name - photoUrls type: object properties: id: type: integer format: int64 example: 10 name: type: string example: doggie category: $ref: '#/components/schemas/Category' photoUrls: type: array xml: wrapped: true items: type: string xml: name: photoUrl tags: type: array xml: wrapped: true items: $ref: '#/components/schemas/Tag' status: type: string description: pet status in the store enum: - available - pending - sold xml: name: pet AnotherObject: allOf: - $ref: '#/components/schemas/Pet' - type: object # all other properties specific to a `Dog` properties: bark: type: boolean breed: type: string enum: [Dingo, Husky, Retriever, Shepherd] example: Husky YetAnotherObject: allOf: - $ref: '#/components/schemas/Pet' - type: object # all other properties specific to a `Cat` properties: hunts: type: boolean age: type: integer example: 20 PetByAge: type: object properties: age: type: integer nickname: type: string required: - age PetByType: type: object properties: pet_type: not: type: integer type: string enum: [Cat, Dog] hunts: type: boolean required: - pet_type 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' securitySchemes: petstore_auth: type: oauth2 flows: implicit: authorizationUrl: https://petstore3.swagger.io/oauth/authorize scopes: write:pets: modify pets in your account read:pets: read your pets api_key: type: apiKey name: api_key in: header Whatever I post or put in /pet I dont get the exact same response in In /pet/{petId}. For example If I post { "id": 10, "name": "doggies", "category": { "id": 1, "name": "Dogzzz" }, "photoUrls": [ "string" ], "tags": [ { "id": 0, "name": "string" } ], "status": "available", "bark": true, "breed": "Dingo" } Since I have cat first in/pet/{petId} as shown below, schema: oneOf: - $ref: '#/components/schemas/Cat' - $ref: '#/components/schemas/Dog' I get the following response in get. { "id": 10, "name": "doggie", "category": { "id": 1, "name": "Dogs" }, "photoUrls": [ "string" ], "tags": [ { "id": 0, "name": "string" } ], "status": "available", "hunts": true, "age": 23 } which I think is wrong. If I interchange cat and dog lines, I get the dog schema. Also Discriminator keyword is not working. Can someone please help.1.3KViews0likes3Comments