首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Swagger/OpenAPI -使用$ref传递可重用的已定义参数

Swagger/OpenAPI -使用$ref传递可重用的已定义参数
EN

Stack Overflow用户
提问于 2014-11-19 06:12:13
回答 2查看 48.8K关注 0票数 90

假设我有一个像limit这样的参数。这个应用程序到处都在使用,如果我需要更新它,那么在任何地方都必须更改它是一件很痛苦的事情:

代码语言:javascript
复制
parameters:
    - name: limit
      in: query
      description: Limits the number of returned results
      required: false
      type: number
      format: int32

我可以使用$ref在其他地方定义它并使其可重用吗?我遇到了this ticket,它暗示有人想要改变或改进功能,但我不知道它今天是否已经存在?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-19 17:24:21

Swagger 2.0中已经存在此功能。链接的票据讨论了它的一些特定机制,这些机制不会影响此功能的功能。

在顶层对象(称为Swagger对象),有一个parameters属性,您可以在其中定义可重用的参数。您可以为参数指定任何名称,并从路径/特定操作中引用它。顶级参数只是定义,并不会自动应用于规范中的所有操作。

你可以在这里找到一个例子-- https://github.com/swagger-api/swagger-spec/blob/master/fixtures/v2.0/json/resources/reusableParameters.json --即使有一个limit参数。

在您的例子中,您可能希望这样做:

代码语言:javascript
复制
# define a path with parameter reference
/path:
   get:
      parameters:
         - $ref: "#/parameters/limitParam"
         - $ref: "#/parameters/offsetParam"

# define reusable parameters:
parameters:
   limitParam:
      name: limit
      in: query
      description: Limits the number of returned results
      required: false
      type: integer
      format: int32
   offsetParam:
      name: offset
      in: query
      description: Offset from which start returned results
      required: false
      type: integer
      format: int32
票数 141
EN

Stack Overflow用户

发布于 2019-01-21 17:22:47

为了完整起见,下面是它在OpenAPI中的样子(也称为swagger v3):

代码语言:javascript
复制
openapi: "3.0.0"
servers:
    - url: /v1
      description: local server

paths:
   /path:
      get:
         parameters:
            - $ref: "#/components/parameters/limitParam"

components:
   parameters:
      limitParam:
         name: limit
         in: query
         description: Limits the number of returned results
         required: false
         schema:
            type: integer
            minimum: 10
            default: 10
            multipleOf: 10 # matches 10, 20, ...
            format: int32
票数 35
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27005105

复制
相关文章

相似问题

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