Мой ресурс имеет идентификатор (типичный случай).
Он также имеет slug , понятный человеку, но все же уникальный идентификатор (в основном, для украшения URL).
Этот slug является необязательным при создании ресурса.Если клиент предоставляет один, он используется;в противном случае сервер сгенерировал его.
Однако этот slug требуется при чтении ресурса.
Мы хотим, чтобы это различие былоясно, поэтому любой инструментарий, читающий спецификацию OpenAPI, точно знает, чего ожидать.
Этого, конечно, можно достичь, используя сочетание различных схем, связанных с модификаторами allOf
(см. пример ниже), но я бы хотелИзбегайте выполнения этой композиции (при условии, что она в первую очередь работает с инструментами).
Поэтому мой вопрос:
Есть ли способ в OpenAPI> = 3.0.2объявить свойство required-readOnly и необязательно-writeOnly?
Решение с использованием композиции:
openapi: 3.0.2
info:
title: Person API
version: 1.0.0
paths:
'/persons/{person-slug}':
get:
parameters:
- $ref: '#/components/parameters/PersonSlug'
responses:
200:
description: Information on a person.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/SlugRead'
- $ref: '#/components/schemas/Person'
post:
parameters:
- $ref: '#/components/parameters/PersonSlug'
responses:
200:
description: Information on a person.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/SlugWrite'
- $ref: '#/components/schemas/Person'
components:
parameters:
PersonSlug:
name: 'person-slug'
description: Human readable unique ID of a person.
required: true
in: path
schema:
type: string
schemas:
SlugRead: # required
required:
- slug
properties:
slug:
type: string
readOnly: true
SlugWrite: # not required
properties:
slug:
type: string
Person:
required:
- first_name
- last_name
- birth_date
properties:
first_name:
type: string
last_name:
type: string
birth_date:
type: string
format: date