如何通过云开发工具包 (CDK) 在 API 网关上为 "Integration Request" 定义 "URL Query String Parameters"
How to define "URL Query String Parameters" for "Integration Request" on API Gateway via Cloud Development Kit (CDK)
我在查找有关如何通过云开发工具包 (CDK) 在 API 网关上为“集成请求”创建“URL 查询字符串参数”的示例时遇到问题。我找到的大多数示例都是针对 lambda(我不需要这个)而不是 REST(我需要这个)的,甚至那些也没有涵盖集成请求。
我正在通过 aws-apigateway.SpecRestAPI 创建 api 定义。
const api = new apiGateway.SpecRestApi(this, 'my-api', {
apiDefinition: apiGateway.ApiDefinition.fromInline(openApiDefinition),
我什至不确定我是否将集成绑定到 API。
如何将集成绑定到 API 以及如何像通过 GUI 一样映射集成请求?
我试过导出手动配置的 API 网关,但它不包含有关在何处执行转换的任何信息。
让我知道是否需要添加更多信息,提前致谢!
如果使用 ApiDefinition.fromInline,则请求映射进入 OpenAPI 文件。参见 https://docs.aws.amazon.com/apigateway/latest/developerguide/request-response-data-mappings.html and https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-swagger-extensions-integration-requestParameters.html。
“requestParameters”位于 x-amazon-apigateway-integration 节点下。如果您不知道如何获得 OpenAPI 规范,请创建 API 并像通常那样进行集成,然后通过 https://aws.amazon.com/premiumsupport/knowledge-center/api-gateway-migrate-accounts-regions/
导出文件
另外,为了将集成映射到另一个 AWS 服务(在我的例子中是 SNS),我在实例化集成时没有指定 API 对象。下面是一个工作示例。
const api = new apiGateway.SpecRestApi(this, 'my-api', {
apiDefinition: apiGateway.ApiDefinition.fromInline(openApiDefinition)
)
const snsIntegration = new apiGateway.AwsIntegration(
api,
{
proxy: false,
service: "sns",
action: "PutItem",
}
);
此外,如果您 运行 遇到“指定的映射表达式参数无效”的问题,请确保您在方法请求和集成请求中都定义了参数。
OpenAPI 文件的超级精简版如下:
paths:
/v1/contact:
post:
parameters:
- name: "TopicArn"
in: "query"
required: true
schema:
type: "string"
x-amazon-apigateway-integration:
requestParameters : {
integration.request.querystring.TopicArn : "method.request.header.TopicArn",
integration.request.querystring.Message : "method.request.body",
}
我在查找有关如何通过云开发工具包 (CDK) 在 API 网关上为“集成请求”创建“URL 查询字符串参数”的示例时遇到问题。我找到的大多数示例都是针对 lambda(我不需要这个)而不是 REST(我需要这个)的,甚至那些也没有涵盖集成请求。
我正在通过 aws-apigateway.SpecRestAPI 创建 api 定义。
const api = new apiGateway.SpecRestApi(this, 'my-api', {
apiDefinition: apiGateway.ApiDefinition.fromInline(openApiDefinition),
我什至不确定我是否将集成绑定到 API。
如何将集成绑定到 API 以及如何像通过 GUI 一样映射集成请求?
我试过导出手动配置的 API 网关,但它不包含有关在何处执行转换的任何信息。
让我知道是否需要添加更多信息,提前致谢!
如果使用 ApiDefinition.fromInline,则请求映射进入 OpenAPI 文件。参见 https://docs.aws.amazon.com/apigateway/latest/developerguide/request-response-data-mappings.html and https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-swagger-extensions-integration-requestParameters.html。
“requestParameters”位于 x-amazon-apigateway-integration 节点下。如果您不知道如何获得 OpenAPI 规范,请创建 API 并像通常那样进行集成,然后通过 https://aws.amazon.com/premiumsupport/knowledge-center/api-gateway-migrate-accounts-regions/
导出文件另外,为了将集成映射到另一个 AWS 服务(在我的例子中是 SNS),我在实例化集成时没有指定 API 对象。下面是一个工作示例。
const api = new apiGateway.SpecRestApi(this, 'my-api', {
apiDefinition: apiGateway.ApiDefinition.fromInline(openApiDefinition)
)
const snsIntegration = new apiGateway.AwsIntegration(
api,
{
proxy: false,
service: "sns",
action: "PutItem",
}
);
此外,如果您 运行 遇到“指定的映射表达式参数无效”的问题,请确保您在方法请求和集成请求中都定义了参数。
OpenAPI 文件的超级精简版如下:
paths:
/v1/contact:
post:
parameters:
- name: "TopicArn"
in: "query"
required: true
schema:
type: "string"
x-amazon-apigateway-integration:
requestParameters : {
integration.request.querystring.TopicArn : "method.request.header.TopicArn",
integration.request.querystring.Message : "method.request.body",
}