Список удаленного перечисления для проверки значения - в спецификации OpenAPI - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь определить схему в спецификации OpenAPI 3.0.2.Я хочу, чтобы одно из свойств проверялось по списку значений.

Обычно я делаю это с помощью enum.

components:
  schemas:
    catalog:
      title: title here
      description: describing it here
      properties:
        catalogitemid:
          description: catalog identifier
          type: string
          enum: 
            - item1347
            - item9081
            - item5720
        catalogitemname:
          description: catalog item name
          type: string
      required:
        - catalogitemid
        - catalogitemname
      additionalProperties: false

Но я хочу, чтобы этот список перечислений был удаленным YAML /JSON вместо.

Причина: этот список необходимо периодически обновлять (более 2000 значений).И я хочу избежать того, что заставляет обновлять этот API.

Ниже $ ref сбой подхода:

components:
  schemas:
    catalog:
      title: title here
      description: describing it here
      properties:
        catalogitemid:
          description: catalog identifier
          type: string
          enum:
            $ref: 'https://remote/path/to/catalog/list.yaml#/components/schemas/catalogitemid/enum'
        catalogitemname:
          description: catalog item name
          type: string
      required:
        - catalogitemid
        - catalogitemname
      additionalProperties: false

Ошибки:

Линия catalog вызывает

should have required property '$ref'

missingProperty: $ref

should match exactly one schema in oneOf

И строка enum вызывает

should be array

Каким был бы способ сделать это?

1 Ответ

0 голосов
/ 07 декабря 2018

"Vanilla" OpenAPI

Спецификация OpenAPI допускает $ref только в определенных контекстах, но не везде.Невозможно $ref только список значений enum, но вы можете $ref всю схему свойств:

      properties:
        catalogitemid:
          $ref: 'https://remote/path/to/catalog/list.yaml#/components/schemas/catalogitemid'

Выше предполагается, что файл list.yaml содержит:

components:
  schemas:
    catalogitemid:
      description: catalog identifier
      type: string
      enum: 
        - item1347
        - item9081
        - item5720
        ...

Использование препроцессоров

Тем не менее, существуют такие инструменты, как json-refs или openapi-препроцессор , которые могут разрешать ссылки JSON и указатели JSON влюбые места документа.Вы можете использовать их для предварительной обработки исходной спецификации вашего вопроса, что позволит получить правильное определение OpenAPI, которое затем можно будет использовать с OpenAPI-совместимыми инструментами.

...