当前位置: 首页 > 知识库问答 >
问题:

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

杜海
2023-03-14

我使用IBM的APIConnect来创建一些API。我一直试图编辑我的API的YAML定义来创建对属性的引用,这样我就可以将它们具体化。但到目前为止,我遇到了引用的问题。它们或者不根据“API Connect Swagger extensions schema API定义”或者“IBM Swagger Version 2.0 schema API定义”进行验证。

以下是我尝试的两个参考:-

  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

在对父 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):-

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

在验证这一点时,错误是不同的。该YAML验证Swagger 2.0版模式API定义和IBM Swagger版模式API定义,但不验证API Connect swagger扩展模式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特定的模式。

共有2个答案

柳威
2023-03-14

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

宰父正真
2023-03-14

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

v2.6.2(API Connect: v5.0.7.0)

我要做的第一件事是删除properties.yaml文件中的附加类型属性。我在上面的properties.yaml文件中收到以下错误:

不允许其他属性(/properties/TestProperty/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属性。然后,您应该能够成功验证配置

 类似资料:
  • Swagger2.0支持可重用参数,如下所述。 如何使用Springfox利用此特性 SpringFox支持这个特性吗?

  • 了解如何使用 Dreamweaver的“代码片段”面板创建代码片段并在不同的 Dreamweaver 站点上重用代码。 如果您发现自己多次重复代码块,可以使用代码片段加快编写代码的过程。写入该代码一次,将其保存为一个代码片段,然后在“代码片段”面板中双击它,以将它插入到多个位置。 使用“代码片段”面板创建的代码片段不是针对特定站点的,因此可以跨站点重用它们。您还可以使用同步设置跨不同设备、Drea

  • 问题内容: 有什么好的方法可以在Java源代码中使用文本块(字符串)?许多其他语言都可以使用heredoc语法,但是Java没有。这使得处理诸如标签库之类的东西非常不便,标签库输出大量的静态标记,而单元测试则需要对XML块进行比较。 其他人如何解决这个问题?可能吗?还是我只需要忍受它? 问题答案: 尽管您可以使用某些格式化程序将任何文本文件或长文字转换并嵌入为Java字符串(例如,使用换行符,必要

  • 我正在生成Restendpoint,包括向生成的代码添加Openapi/Swagger注释。 虽然它可以很好地处理基本类型,但我在自定义类方面有一些问题。 现在我有很多自定义类的重复模式条目(使用@Schema(实现=MyClass.class)),但至少需要的信息在那里。然而,我想找到一种方法来删除重复的模式条目,同时保留附加信息。 在一个讨论$ref和缺乏兄弟属性的github问题上,我发现了

  • 问题内容: 我有一个.dll文件,必须在Java中使用。该.dll文件具有参数化方法,该方法应将类型返回为字符串。当我将参数传递给它时,我得到的消息是 这是代码… 问题答案: 只需在项目中添加引用即可。和名称空间在顶部..然后您可以访问所有dll方法。如果您使用的是Eclispe,请右键单击您的项目->然后单击“构建路径”->,然后单击“添加库”,然后单击用户库。 在这里您可以导入dll

  • 问题内容: 我有json文件,并且在此文件中是一些json编码的数据。 我想在文件中获取此数据并在JavaScript中处理该数据。但是不知道如何在.html文件中连接connect.json文件? 请告诉我。这是我的 json 文件: 考虑到我正在从服务器获取json文件,如何在html中使用该文件,以便可以在html页面的表中显示数据。我正在使用JavaScript解析json文件。我是这个领