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

Use an array as response model in AWS Gateway cdk

我正在尝试创建一个打字稿 aws cdk 来构建一个 API 带有自己的 swagger 文档的网关。 有一个简单的端点返回“供应商”列表,但我们不知道如何在 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 将 supplierModel 作为输出。 我怎么说“returns supplierModel 列表”?我希望我可以将此模型用于供应商列表和供应商的单个实例(例如以 id 作为输入的 GET 方法)。

这可能吗?如果是,如何?

查看生成的 json,我正在尝试这样的内容:

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

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

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

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