APIConnect: использование $ ref для повторного использования фрагментов кода в файлах OpenAPI (Swagger 2.0)

Я использую IBM APIConnect для создания нескольких API. Я пытался отредактировать определение YAML моего API, чтобы создать ссылки на свойства, чтобы я мог их экстернализовать. Но пока у меня проблемы со ссылками. Они либо не проверяются на соответствие «определению API схемы расширений API Connect Swagger» или «определению API схемы IBM Swagger версии 2.0».

Вот две ссылки, которые я пробовал: -

  1. Ссылки на определения безопасности: Как описано на веб-сайте IBM: https://www.ibm.com/support/knowledgecenter/en/SSMNED_5.0.0/com.ibm.apic.toolkit.doc/rapic_swagger_ref_fragment.html

мой YAML: -

swagger: '2.0'
info:
  version: 1.0.0
  title: PokemonApp
  x-ibm-name: pokemonapp
host: $(catalog.host)
basePath: /api
paths:
  /pokemon:
    get:
      responses:
        '200':
          description: 200 OK
securityDefinitions:
    $ref: ./schemas/ClientID.yaml
security:
  - clientID: []
x-ibm-configuration:
  assembly:
    execute:
      - invoke:
          target-url: $(TestProperty)
  properties:
    TestProperty:
        value: 'https://pokemons.mybluemix.net/api/pokemons'
        description: ''
        encoded: false
  gateway: micro-gateway

И соответствующий справочный файл: -

clientID:
    description: ''
    in: query
    name: client_id
    type: apiKey

При выполнении проверки apic на родительском YAML я получаю следующую ошибку: -

C:\Users\MyName\TestNotes\definitions>apic validate pokemonapp_1.0.0.yaml
Successfully validated pokemonapp_1.0.0.yaml against Swagger Version 2.0 schema API definition [pokemonapp:1.0.0].
Successfully validated pokemonapp_1.0.0.yaml against API Connect swagger extensions schema API definition [pokemonapp:1.0.0].
Error validating pokemonapp_1.0.0.yaml with IBM Swagger Version 2.0 schema API definition [pokemonapp:1.0.0].
  Data does not match any schemas from "oneOf" (/securityDefinitions/$ref)
Error: Validation did not complete successfully.
  1. Ссылочные свойства: -

Вот родительский YAML: -

swagger: '2.0'
info:
  version: 1.0.0
  title: PokemonApp
  x-ibm-name: pokemonapp
host: $(catalog.host)
basePath: /api
paths:
  /pokemon:
    get:
      responses:
        '200':
          description: 200 OK
securityDefinitions:
    clientID:
        description: ''
        in: query
        name: client_id
        type: apiKey
security:
  - clientID: []
x-ibm-configuration:
  assembly:
    execute:
      - invoke:
          target-url: $(TestProperty)
  properties:
    $ref: ./schemas/properties.yaml
  gateway: micro-gateway

И соответствующий справочный файл (./schemas/properties.yaml):-

TestProperty:
    type: object
    value: 'https://pokemons.mybluemix.net/api/pokemons'
    description: ''
    encoded: false

После проверки это другая ошибка. Этот YAML проверяет соответствие определению API схемы Swagger Version 2.0 и определение API схемы IBM Swagger Version 2.0, но не соответствует определению API схемы расширений Swagger API Connect.

Вот сообщение об ошибке: -

C:\Users\MyName\TestNotes\definitions>apic validate pokemonapp_1.0.0.yaml
Successfully validated pokemonapp_1.0.0.yaml against Swagger Version 2.0 schema API definition [pokemonapp:1.0.0].
Error validating pokemonapp_1.0.0.yaml with API Connect swagger extensions schema API definition [pokemonapp:1.0.0].
  Invalid type: string (expected object) (/properties/$ref)
Successfully validated pokemonapp_1.0.0.yaml against IBM Swagger Version 2.0 schema API definition [pokemonapp:1.0.0].
Error: Validation did not complete successfully.

Ану идея, что я здесь делаю не так? P.S. в обоих случаях swagger проверяет соответствие «определению API схемы Swagger версии 2.0». Они этого не делают только против специфических схем IBM.


person SUBHASH PESHWA    schedule 05.03.2017    source источник
comment
Какую версию APIConnect вы используете? apic --ext-version   -  person Rick    schedule 15.03.2017
comment
apic --ext-version apiconnect: v2.1.19 (API Connect: v5.0.2.1) apiconnect-cli-apis 2.1.0 apiconnect-cli-apps 2.1.0 apiconnect-cli-auth 2.1.6 apiconnect-cli-catalogs 2.1.0 apiconnect-cli-config 2.1.0 apiconnect-cli-create 2.1.1 apiconnect-cli-drafts 2.1.0 apiconnect-cli-edit 2.1.0 apiconnect-cli-loopback 2.1.3 apiconnect-cli-orgs 2.1. 0 apiconnect-cli-pm 2.1.0 микрошлюз 1.2.0 flow-engine 1.0.3 apiconnect-cli-policies 1.1.0 apiconnect-cli-products 2.1.0 apiconnect-cli-validate 2.1.0 плагины 3.0.2   -  person SUBHASH PESHWA    schedule 08.04.2017
comment
Надеюсь, вы не создаете приложение-спуфер для Pokemon Go! Спуфинг - это плохо, ммкай.   -  person MBillau    schedule 17.05.2017


Ответы (2)


Мне удалось решить вашу проблему, используя последнюю версию интерфейса командной строки, APIConnect и исправив ошибку в вашем файле properties.yaml:

Версия: apiconnect: v2.6.2 (API Connect: v5.0.7.0)

Первое, что мне пришлось изменить, - это удалить дополнительное свойство type из файла properties.yaml. Я получал следующую ошибку с файлом properties.yaml выше:

Дополнительные свойства не разрешены (/ properties / TestProperty / type)

После удаления свойства type файл теперь имеет следующее содержимое:

TestProperty:
     value: 'https://pokemons.mybluemix.net/api/pokemons'
     description: ''
     encoded: false

Затем я использовал инструмент проверки, предоставляемый apic CLI, чтобы убедиться, что конфигурация полностью действительна:

macbook-pro-92:Test Algebra$ apic validate Test.yaml
Successfully validated Test.yaml against Swagger Version 2.0 schema API definition [pokemonapp:1.0.0].
Successfully validated Test.yaml against API Connect swagger extensions schema API definition [pokemonapp:1.0.0].
Successfully validated Test.yaml against IBM Swagger Version 2.0 schema API definition [pokemonapp:1.0.0].

Поэтому, чтобы решить вашу проблему, я бы порекомендовал обновить вашу версию APIConnect и интерфейс командной строки, а затем удалить свойство type из файла properties.yaml. После этого вы сможете успешно проверить конфигурацию.

person Joshua Alger    schedule 16.05.2017

Для любой версии 5060 или новее использование $ ref не работает. Против этого уже подано сообщение о проблеме. Подождите, пока он не появится в следующем выпуске.

person David Shute    schedule 03.04.2017