Yaml APIConnect:使用$ref重用OpenAPI(Swagger 2.0)文件中的代码片段

Yaml APIConnect:使用$ref重用OpenAPI(Swagger 2.0)文件中的代码片段,yaml,ibm-cloud,swagger-2.0,ref,apiconnect,Yaml,Ibm Cloud,Swagger 2.0,Ref,Apiconnect,我正在使用IBM的APIConnect创建一些API。我一直在尝试编辑API的YAML定义,以创建对属性的引用,以便将它们外部化。但到目前为止,我在引用方面遇到了一些问题。它们要么不根据“API Connect swagger extensions模式API定义”或“IBM swagger Version 2.0模式API定义”进行验证 以下是我尝试过的两种引用:- 引用安全性定义: 如IBM网站所述: 我的YAML:- swagger: '2.0' info: version: 1.0.0

我正在使用IBM的APIConnect创建一些API。我一直在尝试编辑API的YAML定义,以创建对属性的引用,以便将它们外部化。但到目前为止,我在引用方面遇到了一些问题。它们要么不根据“API Connect swagger extensions模式API定义”或“IBM swagger Version 2.0模式API定义”进行验证

以下是我尝试过的两种引用:-

  • 引用安全性定义: 如IBM网站所述:
  • 我的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
    
    在父YAML上执行apic验证时,我得到以下错误:-

    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.
    
  • 引用属性:-
  • 以下是家长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):-

    验证时,错误是另一个错误。此YAML针对Swagger 2.0版模式API定义和IBM Swagger 2.0版模式API定义进行验证,但不针对API Connect Swagger extensions模式API定义进行验证

    以下是错误消息:-

    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.
    
    你知道我做错了什么吗?
    另外,在这两种情况下,swagger都会根据“swagger版本2.0模式API定义”进行验证。只有针对IBM特定的模式,它们才没有。

    对于任何版本5060或更高版本,使用$ref都不起作用。已经有一份针对此的问题报告提交。等待将来的版本使用它。

    我使用最新的CLI、APIConnect版本解决了您的问题,并修复了properties.yaml文件中的一个错误:

    版本:apiconnect:v2.6.2(API Connect:v5.0.7.0)

    我必须更改的第一件事是删除properties.yaml文件中的附加type属性。我在上面的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版本和CLI,然后从properties.yaml文件中删除type属性。然后,您应该能够成功地验证配置

    您使用的是什么版本的APIConnect<代码>apic--ext版本apic--ext版本apiconnect:v2.1.19(API Connect:v5.0.2.1)apiconnect cli API 2.1.0 apiconnect cli apps 2.1.0 apiconnect cli auth 2.1.6 apiconnect cli目录2.1.0 apiconnect cli配置2.1.0 apiconnect cli创建2.1.1 apiconnect cli草稿2.1.0 apiconnect cli编辑2.1.0 apiconnect cli环回2.1.3 apiconnect cli orgs 2.1.0 apiconnect cli pm 2.1.0微网关1.2.0流引擎1.0.3 apiconnect cli策略1.1.0 apiconnect cli产品2.1.0 apiconnect cli验证2.1.0插件3.0.2我希望您不是在制作Pokemon Go spoofer应用程序!欺骗是不好的。
    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].