2025-09-22 15:43:37 +08:00

285 lines
6.7 KiB
YAML

openapi: 3.0.1
info:
description: |
This tests for a oneOf interface representation
title: ByRefOrValue
version: 0.0.1
servers:
- url: http://localhost:8080
tags:
- name: Foo
- name: Bar
paths:
/foo:
get:
operationId: getAllFoos
responses:
"200":
content:
application/json;charset=utf-8:
schema:
items:
$ref: "#/components/schemas/FooRefOrValue"
type: array
description: Success
summary: GET all Foos
tags:
- Foo
x-accepts:
- application/json;charset=utf-8
post:
operationId: createFoo
requestBody:
$ref: "#/components/requestBodies/Foo"
responses:
"201":
content:
application/json:
schema:
$ref: "#/components/schemas/FooRefOrValue"
description: Error
summary: Create a Foo
tags:
- Foo
x-content-type: application/json;charset=utf-8
x-accepts:
- application/json
/bar:
post:
operationId: createBar
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/Bar_Create"
required: true
responses:
"200":
content:
application/json:
schema:
$ref: "#/components/schemas/Bar"
description: Bar created
summary: Create a Bar
tags:
- Bar
x-content-type: application/json
x-accepts:
- application/json
components:
requestBodies:
Foo:
content:
application/json;charset=utf-8:
schema:
$ref: "#/components/schemas/Foo"
description: The Foo to be created
responses:
"204":
content: {}
description: Deleted
"201Foo":
content:
application/json:
schema:
$ref: "#/components/schemas/FooRefOrValue"
description: Error
"200FooArray":
content:
application/json;charset=utf-8:
schema:
items:
$ref: "#/components/schemas/FooRefOrValue"
type: array
description: Success
schemas:
Addressable:
description: Base schema for addressable entities
properties:
href:
description: Hyperlink reference
type: string
id:
description: unique identifier
type: string
type: object
Extensible:
properties:
'@schemaLocation':
description: A URI to a JSON-Schema file that defines additional attributes
and relationships
type: string
'@baseType':
description: "When sub-classing, this defines the super-class"
type: string
'@type':
description: "When sub-classing, this defines the sub-class Extensible name"
type: string
required:
- '@type'
type: object
Entity:
allOf:
- $ref: "#/components/schemas/Addressable"
- $ref: "#/components/schemas/Extensible"
discriminator:
propertyName: '@type'
type: object
EntityRef:
allOf:
- $ref: "#/components/schemas/Addressable"
- $ref: "#/components/schemas/Extensible"
description: Entity reference schema to be use for all entityRef class.
discriminator:
propertyName: '@type'
properties:
name:
description: Name of the related entity.
type: string
'@referredType':
description: The actual type of the target instance when needed for disambiguation.
type: string
type: object
FooRefOrValue:
discriminator:
propertyName: '@type'
oneOf:
- $ref: "#/components/schemas/Foo"
- $ref: "#/components/schemas/FooRef"
type: object
x-one-of-name: FooRefOrValue
Foo:
allOf:
- $ref: "#/components/schemas/Entity"
example:
fooPropA: fooPropA
fooPropB: fooPropB
properties:
fooPropA:
type: string
fooPropB:
type: string
type: object
FooRef:
allOf:
- $ref: "#/components/schemas/EntityRef"
properties:
foorefPropA:
type: string
type: object
BarRef:
allOf:
- $ref: "#/components/schemas/EntityRef"
type: object
Bar_Create:
allOf:
- $ref: "#/components/schemas/Entity"
properties:
barPropA:
type: string
fooPropB:
type: string
foo:
$ref: "#/components/schemas/FooRefOrValue"
type: object
Bar:
allOf:
- $ref: "#/components/schemas/Entity"
example:
foo:
fooPropA: fooPropA
fooPropB: fooPropB
id: id
fooPropB: fooPropB
barPropA: barPropA
properties:
id:
type: string
barPropA:
type: string
fooPropB:
type: string
foo:
$ref: "#/components/schemas/FooRefOrValue"
required:
- id
type: object
BarRefOrValue:
oneOf:
- $ref: "#/components/schemas/Bar"
- $ref: "#/components/schemas/BarRef"
type: object
x-one-of-name: BarRefOrValue
Pizza:
allOf:
- $ref: "#/components/schemas/Entity"
properties:
pizzaSize:
type: number
type: object
Pasta:
allOf:
- $ref: "#/components/schemas/Entity"
properties:
vendor:
type: string
type: object
PizzaSpeziale:
allOf:
- $ref: "#/components/schemas/Pizza"
properties:
toppings:
type: string
type: object
FruitType:
enum:
- APPLE
- BANANA
type: string
Fruit:
discriminator:
mapping:
APPLE: "#/components/schemas/Apple"
BANANA: "#/components/schemas/Banana"
propertyName: fruitType
oneOf:
- $ref: "#/components/schemas/Apple"
- $ref: "#/components/schemas/Banana"
properties:
fruitType:
$ref: "#/components/schemas/FruitType"
required:
- fruitType
type: object
x-one-of-name: Fruit
Apple:
properties:
seeds:
type: integer
required:
- seeds
type: object
Banana:
properties:
length:
type: integer
required:
- length
type: object
Animal:
oneOf:
- $ref: "#/components/schemas/Dog"
- $ref: "#/components/schemas/Cat"
x-one-of-name: Animal
Cat:
properties:
declawed:
type: boolean
type: object
Dog:
properties:
bark:
type: boolean
type: object