谷歌云终端机构阵列

问题描述:

我们有一个用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/