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

bra*_*ipt 72 swagger swagger-2.0 openapi

假设我有一个类似的参数limit.这个地方到处都是用的,如果我需要更新它,就必须在任何地方进行更改:

parameters:
    - name: limit
      in: query
      description: Limits the number of returned results
      required: false
      type: number
      format: int32
Run Code Online (Sandbox Code Playgroud)

我可以使用$ ref在别处定义它并使其可重用吗?我遇到了这张票,暗示有人想改变或改进功能,但我不知道它是否已经存在于今天?

Ron*_*Ron 121

此功能已存在于Swagger 2.0中.链接的票证谈论它的一些特定机制,这不会影响此功能的功能.

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

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

在你的情况下,你想要这样做:

# 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
Run Code Online (Sandbox Code Playgroud)

  • 您必须为它创建两个单独的定义. (8认同)
  • 是否可以扩展参数?例如,相同的参数定义可以是一个case中的`in:path`和另一个中的`in:query`.在一种情况下也可以是可选的,在另一种情况下也可以 (5认同)
  • 是否可以使整个请求参数可重用?即:参数:$ref:“#/parameters/requestParams” (2认同)

mil*_*lan 15

为了完整起见,这是在OpenAPI(又名swagger v3)中的样子

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
Run Code Online (Sandbox Code Playgroud)