OpenAPI повторно использует часть определения без определения новой

Предположим, что у меня есть это определение в определении yaml OpenApi

definitions:
  User:
    description: "User"
    type: "object"
    properties:
      firstname:
        type: "string"
      lastname:
        type: "string"
      password:
        type: "string"
      email:
        type: "string"
      username:
        type: "string"

Если в спецификации параметров мне нужны конкретные поля определения, как я могу ссылаться на них, не определяя другую модель, как показано ниже?

definitions:
  UserLogin:
    description: "User"
    type: "object"
    properties:
      password:
        type: "string"
      email:
        type: "string"

1 ответ

В своем вопросе вы используете definitions ключевое слово, что намекает на то, что ваш вопрос об OpenAPI v2 aka. Чванство Для OpenAPI v3, определения, представленные ниже, должны быть определены в соответствующих разделах объекта Components.

Для этого вам нужно использовать Composition с ключевым словом allOf, Здесь есть отличный пример, который относится к вашему вопросу. Сначала вы должны определить меньший объект, а затем включить его в определение большего размера следующим образом:

definitions:
  UserLogin:
    description: User Login
    type: object
    properties:
      password:
        type: string
      email:
        type: string
  User:
    allOf:
    - $ref: '#/definitions/UserLogin'
    - description: User
      type: object
      properties:
        firstname:
          type: string
        lastname:
          type: string
        username:
          type: string

Стоит отметить, что:

  • Некоторые более легкие реализации могут не поддерживать allOf ключевое слово.
  • Использование композиции может повысить или уменьшить удобочитаемость документации в зависимости от сложности и выбора слов, используемых для именования схем.
Другие вопросы по тегам