@readme/oas-examples
Version:
A collection of example OpenAPI 3.x and Swagger 2.0 documents.
770 lines (769 loc) • 22.3 kB
JSON
{
"openapi": "3.0.3",
"info": {
"title": "Discriminator support",
"description": "https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.3.md#discriminatorObject",
"version": "1.0.0"
},
"servers": [
{
"url": "https://httpbin.org/anything"
}
],
"tags": [
{
"name": "Quirks"
}
],
"paths": {
"/discriminator-with-mapping": {
"patch": {
"operationId": "oneOfWithTopLevelDiscriminatorAndMapping",
"summary": "oneOf with discriminator and mapping",
"description": "Polymorphic `oneOf` schema with a top-level discriminator and a mapping definition.",
"requestBody": {
"content": {
"application/json": {
"schema": {
"oneOf": [
{
"$ref": "#/components/schemas/OptionOneNoDisc"
},
{
"$ref": "#/components/schemas/OptionTwoNoDisc"
}
],
"discriminator": {
"propertyName": "discrim",
"mapping": {
"Option One": "#/components/schemas/OptionOneNoDisc",
"Option Two": "#/components/schemas/OptionTwoNoDisc"
}
}
}
}
}
},
"responses": {
"200": {
"description": "Updated"
}
}
}
},
"/discriminator-with-no-mapping": {
"patch": {
"operationId": "oneOfWithTopLevelDiscriminatorNoMapping",
"summary": "oneOf with top-level discriminator (no mapping)",
"description": "Polymorphic `oneOf` schema with a top-level discriminator and **no** mapping definition.",
"requestBody": {
"content": {
"application/json": {
"schema": {
"oneOf": [
{
"$ref": "#/components/schemas/OptionOneNoDisc"
},
{
"$ref": "#/components/schemas/OptionTwoNoDisc"
}
],
"discriminator": {
"propertyName": "discrim"
}
}
}
}
},
"responses": {
"200": {
"description": "Updated"
}
}
}
},
"/embedded-discriminator": {
"patch": {
"summary": "oneOf request with a nested allOf and embedded discriminator",
"description": "This operation contains a request schema of a `oneOf` that itself contains an `allOf` with a discriminator for the afformentioned `allOf`. This is considered an embedded discriminator.",
"requestBody": {
"content": {
"application/json": {
"schema": {
"oneOf": [
{
"$ref": "#/components/schemas/Cat"
},
{
"$ref": "#/components/schemas/Dog"
}
]
}
}
}
},
"responses": {
"200": {
"description": "Updated"
}
}
}
},
"/oneof-allof-top-level-disc": {
"patch": {
"summary": "oneOf request with a nested allOf and top level discriminator",
"description": "This operation has a `oneOf`, with a discriminator, but its `oneOf` contents contain an `allOf` where that discriminator `propertyName` is in reference to.",
"requestBody": {
"content": {
"application/json": {
"schema": {
"oneOf": [
{
"$ref": "#/components/schemas/CatNoDisc"
},
{
"$ref": "#/components/schemas/DogNoDisc"
}
],
"discriminator": {
"propertyName": "pet_type"
}
}
}
}
},
"responses": {
"200": {
"description": "Updated"
}
}
}
},
"/nested-one-of-object-with-nested-one-of": {
"patch": {
"summary": "oneOf request with a nested oneOf, and embedded discriminator",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"config": {
"oneOf": [
{
"$ref": "#/components/schemas/object1"
},
{
"$ref": "#/components/schemas/object2"
},
{
"oneOf": [
{
"$ref": "#/components/schemas/Cat"
},
{
"$ref": "#/components/schemas/Dog"
}
]
}
]
}
},
"additionalProperties": false
}
}
}
},
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/mapping-with-duplicate-schemas": {
"patch": {
"summary": "Handle a schema with duplicate mapping schemas",
"description": "Render a schema with a discriminator, where the mapping reuses a schema more than once.\n> **Note:** the discriminator is `discrimValue`, not `discrim`.",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"discrimValue": {
"type": "string",
"enum": ["oneA", "oneB", "oneC", "twoA", "twoB", "three"]
}
},
"discriminator": {
"propertyName": "discrimValue",
"mapping": {
"oneA": "#/components/schemas/OptionOneNoDisc",
"oneB": "#/components/schemas/OptionOneNoDisc",
"oneC": "#/components/schemas/OptionOneNoDisc",
"twoA": "#/components/schemas/OptionTwoNoDisc",
"twoB": "#/components/schemas/OptionTwoNoDisc",
"three": "#/components/schemas/OptionThreeNoDisc"
}
},
"oneOf": [
{
"$ref": "#/components/schemas/OptionOneNoDisc"
},
{
"$ref": "#/components/schemas/OptionTwoNoDisc"
},
{
"$ref": "#/components/schemas/OptionThreeNoDisc"
}
]
}
}
}
},
"responses": {
"201": {
"description": "OK"
}
}
}
},
"/mapping-of-schema-names": {
"patch": {
"summary": "Discriminator with a schema name mapping",
"description": "Schema names, instead of `$ref` pointers, can be used in discriminator mappings.",
"requestBody": {
"content": {
"application/json": {
"schema": {
"oneOf": [
{
"$ref": "#/components/schemas/OptionOneNoDisc"
},
{
"$ref": "#/components/schemas/OptionTwoNoDisc"
}
],
"discriminator": {
"propertyName": "discrim",
"mapping": {
"Option One": "OptionOneNoDisc",
"Option Two": "OptionTwoNoDisc"
}
}
}
}
}
},
"responses": {
"200": {
"description": "Updated"
}
}
}
},
"/improper-discriminator-placement": {
"patch": {
"operationId": "oneOfWithImproperlyPlacedDiscriminator",
"summary": "oneOf with a discriminator that is referencing a property up a level",
"description": "This operation has a `discriminator` that's in reference to a property a level above it. **This is an improper use of discriminators.** Though this is improper, in this case we should ignore the discriminator instead of failing to render the operation.",
"tags": ["Quirks"],
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"connector_type": {
"type": "string",
"enum": ["s3Import", "gcsImport"]
},
"connector_properties": {
"type": "object",
"oneOf": [
{
"$ref": "#/components/schemas/gcsImport"
},
{
"$ref": "#/components/schemas/s3Import"
}
],
"discriminator": {
"propertyName": "connector_type"
}
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/redocly-flavored-discriminator": {
"patch": {
"operationId": "redoclyQuirk",
"summary": "Discriminator without `anyOf` or `oneOf` that Redocly supports",
"description": "Redocly allows users to define [a discriminator mapping without an `anyOf` or `oneOf` that contains the discriminated objects](https://redocly.com/docs/resources/discriminator#allof-for-inheritance). This endpoint demonstrates that.",
"tags": ["Quirks"],
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"vehicle": {
"$ref": "#/components/schemas/BaseVehicle"
},
"some_other_property": {
"type": "string",
"description": "Some other property that should render alongside the discriminated property",
"default": "default-value"
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/potentially-undefined-formData": {
"post": {
"summary": "Handling for potentially undefined formData",
"description": "This operation contains a schema that at one point produced an edgecase within the form system where `formData` was `undefined`.",
"tags": ["Quirks"],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"oneOf": [
{
"$ref": "#/components/schemas/ApplicationApprovedEvent"
},
{
"$ref": "#/components/schemas/ApplicationDeniedEvent"
}
],
"discriminator": {
"propertyName": "event_type",
"mapping": {
"application_approved": "#/components/schemas/ApplicationApprovedEvent",
"application_denied": "#/components/schemas/ApplicationDeniedEvent"
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK"
}
}
}
}
},
"components": {
"requestBodies": {
"nested-one-of-ref": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"config": {
"oneOf": [
{
"$ref": "#/components/schemas/string1"
},
{
"$ref": "#/components/schemas/string2"
}
]
}
},
"additionalProperties": false
}
}
}
}
},
"schemas": {
"OptionOneNoDisc": {
"title": "Schema title option one",
"type": "object",
"required": ["discrim"],
"properties": {
"discrim": {
"type": "string"
},
"optionone": {
"type": "number"
}
}
},
"OptionTwoNoDisc": {
"title": "Schema title option two",
"type": "object",
"required": ["discrim"],
"properties": {
"discrim": {
"type": "string"
},
"optiontwo": {
"type": "string"
}
}
},
"OptionThreeNoDisc": {
"title": "Schema title option three",
"type": "object",
"required": ["discrim"],
"properties": {
"discrim": {
"type": "string"
},
"optionthree": {
"type": "string"
}
}
},
"Pet": {
"type": "object",
"required": ["pet_type"],
"properties": {
"pet_type": {
"type": "string"
}
},
"discriminator": {
"propertyName": "pet_type"
}
},
"Dog": {
"title": "Woof",
"allOf": [
{
"$ref": "#/components/schemas/Pet"
},
{
"type": "object",
"properties": {
"bark": {
"type": "boolean"
},
"breed": {
"type": "string",
"enum": ["Dingo", "Husky", "Retriever", "Shepherd"]
}
}
}
]
},
"Cat": {
"title": "Meow",
"type": "object",
"allOf": [
{
"$ref": "#/components/schemas/Pet"
},
{
"type": "object",
"properties": {
"hunts": {
"type": "boolean"
},
"age": {
"type": "integer"
}
}
}
]
},
"object1": {
"title": "First type of object",
"type": "object",
"properties": {
"a": {
"type": "string"
},
"b": {
"type": "string"
}
}
},
"object2": {
"title": "Second type of object",
"type": "object",
"properties": {
"c": {
"type": "string"
},
"d": {
"type": "string"
}
}
},
"string1": {
"type": "string"
},
"string2": {
"type": "string"
},
"PetNoDisc": {
"type": "object",
"required": ["pet_type"],
"properties": {
"pet_type": {
"type": "string"
}
}
},
"DogNoDisc": {
"title": "Woof",
"allOf": [
{
"$ref": "#/components/schemas/PetNoDisc"
},
{
"type": "object",
"properties": {
"bark": {
"type": "boolean"
},
"breed": {
"type": "string",
"enum": ["Dingo", "Husky", "Retriever", "Shepherd"]
}
}
}
]
},
"CatNoDisc": {
"title": "Meow",
"type": "object",
"allOf": [
{
"$ref": "#/components/schemas/PetNoDisc"
},
{
"type": "object",
"properties": {
"hunts": {
"type": "boolean"
},
"age": {
"type": "integer"
}
}
}
]
},
"gcsImport": {
"type": "object",
"properties": {
"gcs_bucket": {
"type": "string"
},
"gcs_prefix": {
"type": "string"
}
}
},
"s3Import": {
"type": "object",
"properties": {
"s3_bucket": {
"type": "string"
},
"s3_prefix": {
"type": "string"
}
}
},
"ApplicationApprovedEvent": {
"title": "ApplicationApprovedEvent",
"description": "Emitted when an application is underwritten and approved.",
"allOf": [
{
"$ref": "#/components/schemas/BasePurchaseWebhookEvent"
}
]
},
"ApplicationDeniedEvent": {
"title": "ApplicationDeniedEvent",
"description": "Emitted when an application is underwritten and denied.",
"allOf": [
{
"$ref": "#/components/schemas/BasePurchaseWebhookEvent"
}
]
},
"BasePurchaseWebhookEvent": {
"allOf": [
{
"$ref": "#/components/schemas/BaseBuyerWebhookEvent"
},
{
"type": "object",
"properties": {
"order_id": {
"type": "string",
"description": "Provided Partner Order ID."
}
}
}
]
},
"BaseBuyerWebhookEvent": {
"allOf": [
{
"$ref": "#/components/schemas/BaseWebhookEvent"
},
{
"type": "object",
"properties": {
"buyer_id": {
"type": "string",
"description": "ID of the buyer the event corresponds to."
}
},
"required": ["buyer_id"]
}
]
},
"BaseWebhookEvent": {
"type": "object",
"properties": {
"event_type": {
"type": "string",
"description": "Type of the webhook event.",
"enum": ["application_approved", "application_denied"]
},
"event_id": {
"type": "string",
"description": "ID of the event."
}
},
"required": ["event_type", "event_id"]
},
"BaseVehicle": {
"type": "object",
"description": "Vehicle (from [Redocly example](https://redocly.com/docs/resources/discriminator#when-to-use-the-openapi-discriminator))",
"discriminator": {
"propertyName": "powerSource",
"mapping": {
"electricity": "#/components/schemas/ElectricVehicle",
"gasoline": "#/components/schemas/FueledVehicle",
"human-energy": "#/components/schemas/PedaledVehicle"
}
},
"properties": {
"vehicleType": {
"description": "The type of vehicle.",
"type": "string",
"example": "bicycle"
},
"idealTerrain": {
"description": "A road, river, air... Where does this vehicle thrive?",
"type": "string",
"example": "roads"
},
"powerSource": {
"description": "How is the vehicle powered.",
"type": "string",
"example": "pedaling"
},
"topSpeed": {
"description": "The top speed in kilometers per hour rounded to the nearest integer.",
"type": "integer",
"example": 83
},
"range": {
"description": "The 95th percentile range of a trip in kilometers.",
"type": "integer",
"example": 100
}
}
},
"ElectricVehicle": {
"allOf": [
{
"$ref": "#/components/schemas/BaseVehicle"
},
{
"type": "object",
"description": "Electric Vehicle",
"properties": {
"chargeSpeed": {
"description": "In range kilometers per hour.",
"type": "integer"
},
"chargeAmps": {
"description": "Amps recommended for charging.",
"type": "integer"
},
"chargeVoltage": {
"description": "Voltage recommended for charging.",
"type": "integer"
}
}
}
]
},
"FueledVehicle": {
"allOf": [
{
"$ref": "#/components/schemas/BaseVehicle"
},
{
"type": "object",
"title": "Gas-powered Vehicle",
"properties": {
"tankCapacity": {
"type": "number",
"format": "double",
"description": "Capacity of the fuel tank in gallons."
},
"milesPerGallon": {
"type": "number",
"format": "double",
"description": "Miles per gallon on the highway."
}
}
}
]
},
"PedaledVehicle": {
"allOf": [
{
"$ref": "#/components/schemas/BaseVehicle"
},
{
"type": "object",
"description": "Pedaled Vehicle",
"properties": {
"handlebars": {
"type": "string",
"description": "Type of handlebars",
"enum": ["flat", "riser", "bullhorn", "drop", "aero", "cruiser"]
}
}
}
]
}
}
}
}