swagger 在AWS Gateway cdk中使用数组作为响应模型

f2uvfpb9  于 2023-10-18  发布在  其他
关注(0)|答案(1)|浏览(116)

我正试图创建一个类型脚本aws cdk,用这个swagger文档构建一个API网关。有一个简单的端点返回“Supplier”列表,但我们不知道如何在cdk中指定它。
代码如下:

export function CreateSupplierMethods(apigw: apigateway.Resource,restApiId: string, scope: cdk.Construct, api: apigateway.RestApi) {

let suppliers = apigw.addResource('suppliers')

let supplierModel = new apigateway.Model(scope, "supplier-model", {
  modelName: "supplier",
  restApi: api,
  contentType: 'application/json',
  schema: {
    description: "Supplier data",
    title: "Supplier",
    properties: {
      code: { type: apigateway.JsonSchemaType.STRING, minLength: 4, maxLength: 6},
      name: { type: apigateway.JsonSchemaType.STRING, maxLength: 81},
    }
  },
})

let getSuppliers = suppliers.addMethod('GET', new apigateway.MockIntegration(), {
    methodResponses: [{
        statusCode: "200",
        responseModels: {
          "application/json": supplierModel,
        }
    },
    {
        statusCode: "401",
    }]
})
}

正如您所看到的,GET具有作为输出的DataModel。我怎么能说“返回一个列表中的模型”?我希望我可以使用这个模型的供应商列表和供应商的单个示例(如一个GET方法与id作为输入)。
这可能吗?如果是,如何进行?
查看生成的json,我试图有这样的东西:

但我现在得到的是完全不同的:

我怎样才能得到像第一张图片一样的结果?

3j86kqsm

3j86kqsm1#

您正在创建一个模型并将其分配给方法。创建这些模型的数组,然后将该数组分配给方法。

let supplierModelArray = new apigateway.Model(scope, "supplier-model-array", {
  modelName: "supplier-array",
  restApi: api,
  contentType: 'application/json',
  schema: {
    description: "Supplier data",
    title: "Supplier",
    type: apigateway.JsonSchemaType.ARRAY
    items: {type: supplierModel}
  },
})

并将API中的"application/json": supplierModel更改为"application/json": supplierModelArray

相关问题