首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >OpenAPI 3.0允许引用服务器变量吗?

OpenAPI 3.0允许引用服务器变量吗?
EN

Stack Overflow用户
提问于 2019-06-26 03:00:16
回答 1查看 3.7K关注 0票数 3

假设我的OpenAPI定义有两个服务器。两者共享相同的变量。因此,我希望引用这些变量来防止重复的代码。

实际上,我将OpenAPI分解为文件,并将其与swagger-cli bundle合并。这就是它所创造的:

代码语言:javascript
复制
openapi: 3.0.2
info:
  title: My API
  description: 'some description'
  version: 1.0.0
servers:
  - url: 'https://stage-api.domain.com/foo/{v1}/{v2}/{v3}'
    description: Staging API server for QA
    variables:
      v1:
        description: 'variable 1'
        default: 'something'
        enum:
          - 'foo1'
          - 'foo2'
      v2:
        description: 'variable 2'
        default: 'something'
        enum:
          - 'foo1'
          - 'foo2'
      v3:
        description: 'variable 3'
        default: 'something'
        enum:
          - 'foo1'
          - 'foo2'
  - url: 'https://api.domain.com/foo/{v1}/{v2}/{v3}'
    description: PRODUCTION API server
    variables:
      region:
        $ref: '#/servers/0/variables/v1'
      brand:
        $ref: '#/servers/0/variables/v2'
      locale:
        $ref: '#/servers/0/variables/v3'
paths: {}

为了在Swagger中验证这一点,我得到了以下错误:

servers.1.variables.v1上的结构错误不应该具有附加属性additionalProperty:$ref跳转到第xx行 servers.1.variables.v1中的结构错误应该具有所需的属性“默认”missingProperty:默认跳转到第xx行

是否可以引用服务器变量或以另一种方式重用它们?

当然,我可以运行swagger-cli bundle -r,但我希望防止使用它。

EN

Stack Overflow用户

回答已采纳

发布于 2019-06-26 08:57:02

不,这是不支持的。您可以请求对OpenAPI规范进行更改

https://github.com/OAI/OpenAPI-Specification/issues

在您的示例中,除了子域之外,服务器路径几乎是相同的,因此可以使用单个服务器定义并使子域成为变量:

代码语言:javascript
复制
servers:
  - url: 'https://{env}.domain.com/foo/{v1}/{v2}/{v3}'
    variables:
      env:
        description: Environment - staging or production
        default: stage-api
        enum:
          - stage-api
          - api
      # other variables
      # ...
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56764572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档