谷歌云终端机构阵列
问题描述:
我们有一个用Java编写的(用Wildfly托管的)其他API。我们的服务以kubernetes(GKE)运行。我们希望利用云端点来跟踪API的使用情况和响应速度。这个API并不是什么新东西,我们一直在运送与它交互多年的软件。它也相当大(数千种公共方法)。我们的API有Swagger文档,并且没有验证错误。当我尝试使用我们的Swagger时:谷歌云终端机构阵列
gcloud beta service-management deploy swagger.yaml
这并不成功。我碰到下面的错误重复237次:
ERROR: unknown location: http: body field path 'body' must be a non-repeated message.
我已经跟踪它到237种方法,包括在身体参数JSON数组。在我们的API中,这些是接受或返回对象列表的方法。 有什么办法可以让我接受service-management deploy
?改变我们的API不是一种选择,但我们真的希望能够使用端点。
例如,这种方法签名:
@PUT
@Path ("/foobars/undelete")
@Consumes (MediaType.APPLICATION_JSON)
@Produces (MediaType.APPLICATION_JSON)
@ApiOperation (value = "Undelete foobars")
@ApiResponses (value =
{
@ApiResponse (
code = 200,
message = "foobars undeleted",
response = FooBar.class,
responseContainer = "List"
) , @ApiResponse (
code = 206,
message = "Not all foobars undeleted",
response = FooBar.class,
responseContainer = "List"
) , @ApiResponse (
code = 410,
message = "Not found"
) , @ApiResponse (
code = 500,
message = "Server Error"
)
})
public Response undeleteFooBars (@ApiParam (value = "FooBar ID List") List<UUID> entityIds)
生成此招摇片段:
"/foobars/undelete":
put:
tags:
- foo
summary: Undelete FooBars
description: ''
operationId: undeleteFooBars
consumes:
- application/json
produces:
- application/json
parameters:
- in: body
name: body
description: FooBar ID List
required: false
schema:
type: array
items:
type: string
format: uuid
responses:
'200':
description: Foo Bars undeleted
schema:
type: array
items:
"$ref": "#/definitions/FooBar"
'206':
description: Not all FooBars undeleted
schema:
type: array
items:
"$ref": "#/definitions/FooBar"
'410':
description: Not found
'500':
description: Server Error
答
我曾与端点,完全相同的问题也似乎不能认为传递一个对象数组作为主体参数有效。我通过使用通用对象和体面的描述来解决这个问题。描述不会以编程方式修复任何内容,但使用通用对象允许端点工作,并且描述为API的使用者提供了预期内容的信息。
parameters:
- in: body
name: body
description: Array of FooBar objects
required: false
schema:
type: object
这恕我直言,似乎是在端点队的疏忽为使用对象的数组,在格兰体符合OpenAPI的规范之内罚款和各种工具的工作原理是http://editor.swagger.io/