能否通过AWS CDK或CLI创建含多资源及对应方法的API Gateway?
用AWS CDK或CLI创建带多资源与方法的API Gateway
完全不需要依赖AWS控制台,用AWS CDK或者CLI都可以实现这个需求,甚至CDK是更推荐的方式——基础设施即代码,支持版本控制、复用和自动化部署。
一、用AWS CDK实现(以TypeScript为例)
CDK提供了高层级的API Gateway构造,能快速定义资源和方法,还能直接关联Lambda等后端服务。示例代码如下:
import * as cdk from 'aws-cdk-lib'; import * as apigateway from 'aws-cdk-lib/aws-apigateway'; import { Construct } from 'constructs'; export class ApiGatewayStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // 创建基础Rest API const api = new apigateway.RestApi(this, 'MyMultiResourceApi', { restApiName: 'Multi-Resource API', description: 'API with multiple resources and methods' }); // 第一个资源:/users,绑定GET方法(Mock集成示例,可替换为Lambda等后端) const usersResource = api.root.addResource('users'); usersResource.addMethod('GET', new apigateway.MockIntegration({ integrationResponses: [{ statusCode: '200' }], passthroughBehavior: apigateway.PassthroughBehavior.NEVER, requestTemplates: { 'application/json': '{ "statusCode": 200 }' } }), { methodResponses: [{ statusCode: '200' }] }); // 第二个资源:/users/{userId},绑定GET和PUT方法 const userResource = usersResource.addResource('{userId}'); // GET方法 userResource.addMethod('GET', new apigateway.MockIntegration({ integrationResponses: [{ statusCode: '200' }], passthroughBehavior: apigateway.PassthroughBehavior.NEVER, requestTemplates: { 'application/json': '{ "statusCode": 200 }' } }), { methodResponses: [{ statusCode: '200' }] }); // PUT方法 userResource.addMethod('PUT', new apigateway.MockIntegration({ integrationResponses: [{ statusCode: '200' }], passthroughBehavior: apigateway.PassthroughBehavior.NEVER, requestTemplates: { 'application/json': '{ "statusCode": 200 }' } }), { methodResponses: [{ statusCode: '200' }] }); } }
这段代码会创建一个包含/users(GET)和/users/{userId}(GET、PUT)的API,你可以把Mock集成替换为LambdaIntegration、HttpIntegration等实际后端。
二、用AWS CLI实现
如果偏好命令行操作,也可以通过CLI分步创建:
- 创建Rest API
aws apigateway create-rest-api --name "MyMultiResourceApi" --description "API with multiple resources"
执行后会返回API的id和根资源的id(rootResourceId),记下来后续使用。
- 创建/users资源
aws apigateway create-resource --rest-api-id <你的API ID> --parent-id <根资源ID> --path-part "users"
保存返回的id作为usersResourceId。
- 创建/users/{userId}资源
aws apigateway create-resource --rest-api-id <你的API ID> --parent-id <usersResourceId> --path-part "{userId}"
保存返回的id作为userResourceId。
- 为/users添加GET方法
aws apigateway put-method --rest-api-id <你的API ID> --resource-id <usersResourceId> --http-method GET --authorization-type "NONE"
- 为/users/{userId}添加GET和PUT方法
# GET方法 aws apigateway put-method --rest-api-id <你的API ID> --resource-id <userResourceId> --http-method GET --authorization-type "NONE" # PUT方法 aws apigateway put-method --rest-api-id <你的API ID> --resource-id <userResourceId> --http-method PUT --authorization-type "NONE"
- 设置方法集成(以Mock为例)
以/users的GET方法为例:
aws apigateway put-integration --rest-api-id <你的API ID> --resource-id <usersResourceId> --http-method GET --type MOCK --request-templates '{"application/json": "{ \"statusCode\": 200 }"}'
- 部署API到环境
aws apigateway create-deployment --rest-api-id <你的API ID> --stage-name prod
完成后,API就可以通过https://<你的API ID>.execute-api.<区域>.amazonaws.com/prod访问了。
内容的提问来源于stack exchange,提问作者Karim Fayed
相关产品推荐
相关产品推荐

