OpenAPI规范(6)—描写参数

小微 科技OpenAPI规范(6)—描写参数已关闭评论124字数 4013阅读模式
摘要在OpenAPI 3.0中,参数在操作或路径的parameters分段中定义。若要描述一个参数,你需要指定它的名称(name)、位置(in)、数据类型(由schema或conten...

在OpenAPI 3.0中,参数在操作或路径的parameters分段中定义。若要描写一个参数,你需要指定它的名称(name)、位置(in)、数据类型(由schema或content定义)以及其他属性(例如:description或required)。下面是一个示例:

paths: /users/{userId}: get: su妹妹ary: Get a user by ID parameters: - in: path name: userId schema: type: integer required: true description: Numeric ID of the user to get文章源自微观生活(93wg.com)微观生活-https://93wg.com/17051.html

注意,示例中的parameters是一个数组。因而,在YAML中,每一个参数定义必须在它前面用短划线(-)列出。文章源自微观生活(93wg.com)微观生活-https://93wg.com/17051.html

参数类型文章源自微观生活(93wg.com)微观生活-https://93wg.com/17051.html

OpenAPI 3.0可以依据参数位置区别下列参数类型。参数位置由参数的in关键字来肯定,例如:in: query或in: path。文章源自微观生活(93wg.com)微观生活-https://93wg.com/17051.html

路径参数,例如:/users/{id}文章源自微观生活(93wg.com)微观生活-https://93wg.com/17051.html

查询参数,例如:/users?role=admin文章源自微观生活(93wg.com)微观生活-https://93wg.com/17051.html

标头参数,例如:X-MyHeader: Value文章源自微观生活(93wg.com)微观生活-https://93wg.com/17051.html

cookie参数,通过Cookie标头进行传递,例如:Cookie: debug=0; csrftoken=BUSe35dohU3O1MZvDCU文章源自微观生活(93wg.com)微观生活-https://93wg.com/17051.html

路径参数文章源自微观生活(93wg.com)微观生活-https://93wg.com/17051.html

路径参数是URL路径的可变部份。通常,它们用于指向聚拢中的某个特定资源(例如:由ID标识的用户)。URL可以包括多个路径参数,每一个参数用花括号{ }表示。文章源自微观生活(93wg.com)微观生活-https://93wg.com/17051.html

GET /users/{id}GET /cars/{carId}/drivers/{driverId}GET /report.{format}

当客户端进行API调历时,每一个路径参数都必需用实际值替代。在OpenAPI中,使用in: path来定义路径参数。参数名称必需与路径中指定的名称相同。还要记得添加required: true,由于路径参数老是必要的。例如,/users/{id}端点可以描写如下:

paths: /users/{id}: get: parameters: - in: path name: id

路径式的扩大(矩阵)— 以分号为前缀,例如:/map/point;x=50;y=20

标签扩大 — 以小数点为前缀,例如:/color.R=100.G=200.B=150

简单式 — 以逗号为分隔符,例如:/users/12,34,56

序列化办法由style关键字以及explode关键字指定。若要了解更多详细信息,请参考“参数序列化”。

查询参数

查询参数是最多见的参数类型。它们呈现在要求URL的末尾,紧跟在一个问号(?)后面,其中不同的name=value对通过(&)符号进行分隔。查询参数可以是必须的以及可选的。

GET /pets/findByStatus?status=availableGET /notes?offset=100&limit=50

使用in: query来表示查询参数:

parameters: - in: query name: offset schema: type: integer description: The number of items to skip before starting to collect the result set - in: query name: limit schema: type: integer description: The numbers of items to return

注意:若要描写作为查询参数传递的API密钥,请改用securitySchemes以及security关键字。请参考“API密钥”。查询参数可以是原始值、数组以及对象。OpenAPI 3.0提供了几种在查询字符串中序列化对象以及数组的办法。数组的序列化办法,如下所示:

form — /products?color=blue,green,red或/products?color=blue&color=green,取决于explode关键字

spaceDelimited(相同于OpenAPI 2.0中的collectionFormat: ssv)— /products?color=blue%20green%20red

pipeDelimited(相同于OpenAPI 2.0中的collectionFormat: pipes)— /products?color=blue|green|red

对象的序列化办法,如下所示:

form — /points?color=R,100,G,200,B,150或/points?R=100&G=200&B=150,取决于explode关键字

deepObject — /points?color[R]=100&color[G]=200&color[B]=150

序列化办法是由style关键字以及explode关键字指定的。若要了解更多详细信息,请参考“参数序列化”。

查询参数中的保存字符

RFC 3986定义了一组保存字符:/?

GET /file?path=quotes%2Fh2g2.txtGET /ping HTTP/1.1Host: example.comX-Request-ID: 77e1c83b-7bb0-437b-bc50-a7a58e5660ac

使用OpenAPI 3.0,你可以将这个操作定义成:

paths: /ping: get: su妹妹ary: Checks if the server is alive parameters: - in: header name: X-Request-ID schema: type: string format: uuid required: true

以相似的方式,你可以定义自定义的响应标头。标头参数可以是原始类型、数组以及对象。数组以及对象可使用simple方式进行序列化。若要了解更多信息,请参考“参数序列化”。注意:不能使用名为Accepted、Content-Type以及Authorization的标头参数。若要描写这些标头,请使用相应的OpenAPI关键字:

Cookie参数

操作还可以传递Cookie标头中的参数,例如:Cookie: name=value。可以在同一标头中发送多个cookie参数,以分号以及空格作为分隔符。

GET /api/usersHost: example.comCookie: debug=0; csrftoken=BUSe35dohU3O1MZvDCUOJ

使用in: cookie来定义cookie参数:

parameters: - in: cookie name: debug schema: type: integer enum: [0, 1] default: 0 - in: cookie name: csrftoken schema: type: string

Cookie参数可以是原始值、数组以及对象。数组以及对象可使用form方式进行序列化。若要了解更多信息,请参考“参数序列化”。注意:若要定义cookie身份验证,请改用API密钥。

必要参数以及可选参数

在默许情况下,OpenAPI将所有要求参数都视为可选参数。你可以添加required: true,将参数标记成必须的。注意,路径参数必需带有required: true,由于它们老是必须的。

parameters: - in: path name: userId schema: type: integer required: true

parameters: - in: query name: color schema: type: array items: type: string

filter={\"type\":\"t-shirt\",\"color\":\"blue\"}

在这类情况下,你需要将参数模式包装成content/<media-type>,如下文所示。schema关键字定义了参数的数据结构以及媒体类型(在这个示例中 — application/json),用作对描写序列化格式的外部规范的引用。

parameters: - in: query name: filter​

GET /usersGET /users?offset=30&limit=10

假定offset的默许值是0,limit的默许值是20,规模是从0到100,那么这些参数的定义将如下所示:

parameters: - in: query name: offset schema: type: integer minimum: 0 default: 0 required: false description: The number of items to skip before starting to collect the result set. - in: query name: limit schema: type: integer minimum: 1 maximum: 100 default: 20 required: false description: The number of items to return.

常见过错

当使用default关键字时,可能会产生两个常见过错:

带有required关键字的参数或属性使用default关键字(例如:路径参数)。这是没成心义的 — 如果某个值是必须的,那么客户端就必需老是发送它,并且永久不会使用默许值。

使用default关键字来指定样本值。这不是默许值的用处,可能会致使某些Swagger工具呈现不可预知的行动。请使用example或examples关键字来实现这类功能(请参考“添加示例”)。

枚举参数

通过将enum添加到参数的schema中,你即可以将参数限制在一个固定的取值规模以内。枚举值必需以及参数的数据类型拥有相同的类型。

parameters: - in: query name: status schema: type: string enum: - available - pending - sold

以上就是微观生活(93wg.com)关于“OpenAPI规范(6)—描写参数”的详细内容,希望对大家有所帮助!

继续阅读
 
小微
  • 版权声明: 本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们(管理员邮箱:81118366@qq.com),情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!
  • 转载请务必保留本文链接:https://93wg.com/17051.html