我有一个服务,它可以基于Content-Type
头有两种不同的主体参数。
例如。对于路径/Pet
:
>
如果使用 Content-Type: application/somecustom.resource json
,则 POST 可以将 Pet
作为正文参数。
如果使用了Content-Type: Application/somecustom.functionjson
,那么POST应该使用一些不同的主体参数来调用函数并返回不同的响应。
关于如何在OpenAPI(Swagger)中体现这一点,有什么建议吗?
不,不可能在同一路径项中为同一操作定义两个不同的主体参数。路径项名称是唯一的,因为它是属性名称(因此也是JSON键值映射中的“键”),Swager规范允许在给定操作中最多有一个主体参数。
有几种替代方法可以满足这一需求:
创建两个单独的路径项
例如:
/pets/createFromDescription:
post:
summary: Create a pet from a basic description
operationId: createPetFromDescription
parameters:
- name: petDescription
in: body
required: true
schema:
$ref: "#/definitions/PetDescriptionObject"
responses:
200:
description: OK
/pets/createFromCatalog:
post:
summary: Create a pet from a standard catalog entry
operationId: createPetFromCatalogEntry
parameters:
- name: petCatalogEntry
in: body
required: true
schema:
$ref: "#/definitions/PetCatalogEntry"
responses:
200:
description: OK
使用鉴别器创建子类型
在Swagger–open API 2.0规范中有所描述。
例:
/pets:
post:
summary: Create a pet
operationId: createPet
parameters:
- name: petSource
in: body
description: Structured pet information, from which to create the object
required: true
schema:
$ref: "#/definitions/CreatePet_Request"
responses:
200:
description: OK
definitions:
CreatePet_Request:
type: object
properties:
requestVariant:
type: string
required:
- requestVariant
discriminator: requestVariant
PetDescriptionObject:
allOf:
- $ref: "#/definitions/CreatePet_Request"
- type: object
properties:
name:
type: string
description:
type: string
PetCatalogEntry:
allOf:
- $ref: "#/definitions/CreatePet_Request"
- type: object
properties:
SKU:
type: string
Breed:
type: string
Comments:
type: string
这些方法都不是请求的媒体类型。虽然请求可能接受多种媒体类型,但如果使用特定媒体类型意味着对请求正文的某些要求,则必须在操作或正文参数的描述
属性中记录该要求。
OpenAPI 3.0 支持每种媒体类型的不同架构。
openapi: 3.0.0
...
paths:
/pet:
post:
requestBody:
required: true
content:
application/somecustom.resource+json:
schema:
$ref: '#/components/schemas/Pet'
application/somecustom.function+json:
schema:
$ref: '#/components/schemas/Foo'
我想为我的Swagger API创建一个递归规范。这个概念似乎没有出现在Swagger文档中,所以我怀疑这是不可能的。因此,我也愿意接受任何由Swagger支持的替代解决方案。 例如,我试图创建一个类似文档的结构。每个文档都有部分,每个部分都有文本和自己的部分。我计划使用这样的APIendpoint: http://a.b.com/docs/{文档ID} http://a.b.com/docs/{
如何为这些参数编写OpenAPI(Swagger)定义?
给定以下带有springfox-swagger2注释的REST方法: null 我是不是漏掉了什么?有没有办法告诉swagger为每个HTTP/OK状态代码呈现两个不同的模型?
我已经开始为CDC测试实施PACT。我如何处理我们在不同环境的路径中传递不同参数的场景? 例如,我的测试调用一个函数,该函数通过命中endpoint并传递一些参数来请求服务中的一些数据。非常标准。 E、 G: 对于不同的环境(QA、UAT等),必须传递特定于该环境的唯一数据,以获得有效的200响应。因此,在我的示例中,每个env的carId和userId需要不同。当我最初设置测试时,我使用了我们的
我试图用一个静态的swagger文件来记录一个API,该文件可以返回一些JSON,其中包含一个类似如下的数组: 我尝试了几种不同的方法来定义规范,使用多态性或显式定义多个示例。这些例子要么最终看起来像: 或者只是: 有没有办法在我的swagger规范中定义一个示例,以便swagger-ui显示的示例有效负载将包含一个数组,该数组包含一个A类型的示例和一个B类型的示例,就像我编写的第一个JSON一样