在swagger文档中使用对象类型查询参数
我有一个GET路径,我想将url中的对象参数编码为查询字符串 在编写swagger文档时,我基本上会遇到一些错误,这些错误不允许我在在swagger文档中使用对象类型查询参数,swagger,swagger-ui,query-parameters,Swagger,Swagger Ui,Query Parameters,我有一个GET路径,我想将url中的对象参数编码为查询字符串 在编写swagger文档时,我基本上会遇到一些错误,这些错误不允许我在查询中使用模式/对象类型类型参数: paths: /mypath/: get: parameters - in: path name: someParam description: some param that works required: true
查询中使用模式
/对象
类型
类型参数:
paths:
/mypath/:
get:
parameters
- in: path
name: someParam
description: some param that works
required: true
type: string
format: timeuuid #good param, works well
- $ref: "#/parameters/mySortingParam" #this yields an error
parameters:
mySortingParam
name: paging
in: query
description: Holds various paging attributes
required: false
schema:
type: object
properties:
pageSize:
type: number
cursor:
type: object
properties:
after:
type: string
format: string
具有对象值的请求查询参数将在实际请求中编码
尽管swagger在屏幕顶部显示了一个错误,但该对象在swagger UI编辑器中被正确呈现,但是该错误会浮在文档顶部。我认为您不能在swagger规范中使用“object”作为查询参数,因为查询参数只支持基元类型()这是可能的,只是OpenAPI 2.0没有。OpenAPI 3.0在此处描述了如何实现这一点:
参数:
-in:查询
名称:过滤器
#将“架构”包装为“内容”
内容:
application/json:#这现在可以通过OpenAPI 3.0实现
参数:
-in:查询
名称:值
模式:
类型:对象
特性:
类型识别码:
类型:整数
作者编号:
类型:整数
标题:
类型:字符串
例子:
{
“类型id”:1,
“作者id”:1
}
风格:形式
爆炸:真的
在这里,您可以使用style
和explode
关键字指定参数应如何序列化
- 样式定义多个值的分隔方式。可能的样式取决于参数位置–路径、查询、标题或cookie
- 分解(真/假)指定数组和对象是否应
为每个数组项或对象属性生成单独的参数
对于上述示例,url将为:
https://ebookstore.build/v1/users/books/search?genre_id=1&author_id=1
有关使用OpenAPI v3描述参数和参数序列化的更多信息,请参阅。对此相当失望,因为swagger.io上的文档另有说明:。请参阅“架构与内容”下的部分。虽然上面的链接描述了如何将对象转换为JSON等内容类型,但它没有给出与OP的查询直接相关的示例。@DanielMaclean:您发布的链接是关于OpenAPI 3.0的,而答案是关于OpenAPI/Swagger 2.0的(2016年没有3.0)。该链接的2.0版本只是一个提示-此示例用于查询字符串中的JSON字符串,即(在URL编码之前)GET/something?filter={“type”:“foo”,“color”:“red”}
。而OP可能希望将对象序列化为查询字符串中的单个键/值参数,即GET/something?type=foo&color=red
。后者在本文中进行了解释。