Я ссылаюсь на другой компонент, и некоторые его поля становятся обязательными.
Пример с AbstractQuestion, компонент, на который я буду ссылаться позже:
AbstractQuestion:
type: object
properties:
title:
description: Question statement
type: string
label:
description: Question label
type: string
required:
description: whether an answer is required for this question or if it could be left blank
type: boolean
question_type:
description: campaign type
enum:
- profile
- feeling
type: string
answer_type:
enum:
- string
- list
- date
type: string
max_length:
description: >-
for open ended questions this is the max characters possible. for list type questions
this would be the max number of options to select when multiple answers are accepted
type: integer
modelizable:
description: 'whether the questions'' answers are suitable for feeding ML models (e.g. 1,2,3,4)'
type: boolean
choices:
$ref: '#/components/schemas/QuestionChoices'
Теперь ябудет использовать его для определения тела запроса Post, определяющего, какие поля являются обязательными.Примечание: я не указывал это в предыдущем объекте, потому что он также используется в другом контексте (например, запросы GET или PUT), где эти поля не обязательны.
QuestionPost:
allOf:
- $ref: '#/components/schemas/AbstractQuestion'
required:
- title
- label
- required
- question_type
- answer_type
- modelizable
Когда я пробую это решениемои тесты не проходят, так как они сопоставляют файл yaml с моим API и обнаруживают эту ошибку:
openapi_spec_validator.exceptions.ExtraParametersError: Required list has not defined properties: ['label', 'title', 'answer_type', 'question_type', 'modelizable', 'required']
Кажется, не удается найти требуемые свойства в указанном компоненте.
КогдаЯ пробую это решение:
QuestionPost:
$ref: '#/components/schemas/AbstractQuestion'
required:
- title
- label
- required
- question_type
- answer_type
- modelizable
Я получаю предупреждение в своем редакторе.Насколько я понимаю, документ должен игнорироваться.
Может быть, то, чего я пытаюсь достичь, просто невозможно?Как бы вы это сделали?