Interface RestApiAttributes
- All Superinterfaces:
software.amazon.jsii.JsiiSerializable
- All Known Implementing Classes:
RestApiAttributes.Jsii$Proxy
@Generated(value="jsii-pacmak/1.84.0 (build 5404dcf)",
date="2023-06-19T16:30:45.075Z")
@Stability(Stable)
public interface RestApiAttributes
extends software.amazon.jsii.JsiiSerializable
Attributes that can be specified when importing a RestApi.
Example:
import software.amazon.awscdk.core.App;
import software.amazon.awscdk.core.CfnOutput;
import software.amazon.awscdk.core.NestedStack;
import software.amazon.awscdk.core.NestedStackProps;
import software.amazon.awscdk.core.Stack;
import software.constructs.Construct;
import software.amazon.awscdk.services.apigateway.Deployment;
import software.amazon.awscdk.services.apigateway.Method;
import software.amazon.awscdk.services.apigateway.MockIntegration;
import software.amazon.awscdk.services.apigateway.PassthroughBehavior;
import software.amazon.awscdk.services.apigateway.RestApi;
import software.amazon.awscdk.services.apigateway.Stage;
/**
* This file showcases how to split up a RestApi's Resources and Methods across nested stacks.
*
* The root stack 'RootStack' first defines a RestApi.
* Two nested stacks BooksStack and PetsStack, create corresponding Resources '/books' and '/pets'.
* They are then deployed to a 'prod' Stage via a third nested stack - DeployStack.
*
* To verify this worked, go to the APIGateway
*/
public class RootStack extends Stack {
public RootStack(Construct scope) {
super(scope, "integ-restapi-import-RootStack");
RestApi restApi = RestApi.Builder.create(this, "RestApi")
.deploy(false)
.build();
restApi.root.addMethod("ANY");
PetsStack petsStack = new PetsStack(this, new ResourceNestedStackProps()
.restApiId(restApi.getRestApiId())
.rootResourceId(restApi.getRestApiRootResourceId())
);
BooksStack booksStack = new BooksStack(this, new ResourceNestedStackProps()
.restApiId(restApi.getRestApiId())
.rootResourceId(restApi.getRestApiRootResourceId())
);
new DeployStack(this, new DeployStackProps()
.restApiId(restApi.getRestApiId())
.methods(petsStack.methods.concat(booksStack.getMethods()))
);
CfnOutput.Builder.create(this, "PetsURL")
.value(String.format("https://%s.execute-api.%s.amazonaws.com/prod/pets", restApi.getRestApiId(), this.region))
.build();
CfnOutput.Builder.create(this, "BooksURL")
.value(String.format("https://%s.execute-api.%s.amazonaws.com/prod/books", restApi.getRestApiId(), this.region))
.build();
}
}
public class ResourceNestedStackProps extends NestedStackProps {
private String restApiId;
public String getRestApiId() {
return this.restApiId;
}
public ResourceNestedStackProps restApiId(String restApiId) {
this.restApiId = restApiId;
return this;
}
private String rootResourceId;
public String getRootResourceId() {
return this.rootResourceId;
}
public ResourceNestedStackProps rootResourceId(String rootResourceId) {
this.rootResourceId = rootResourceId;
return this;
}
}
public class PetsStack extends NestedStack {
public final Method[] methods;
public PetsStack(Construct scope, ResourceNestedStackProps props) {
super(scope, "integ-restapi-import-PetsStack", props);
IRestApi api = RestApi.fromRestApiAttributes(this, "RestApi", RestApiAttributes.builder()
.restApiId(props.getRestApiId())
.rootResourceId(props.getRootResourceId())
.build());
Method method = api.root.addResource("pets").addMethod("GET", MockIntegration.Builder.create()
.integrationResponses(List.of(IntegrationResponse.builder()
.statusCode("200")
.build()))
.passthroughBehavior(PassthroughBehavior.NEVER)
.requestTemplates(Map.of(
"application/json", "{ \"statusCode\": 200 }"))
.build(), MethodOptions.builder()
.methodResponses(List.of(MethodResponse.builder().statusCode("200").build()))
.build());
this.methods.push(method);
}
}
public class BooksStack extends NestedStack {
public final Method[] methods;
public BooksStack(Construct scope, ResourceNestedStackProps props) {
super(scope, "integ-restapi-import-BooksStack", props);
IRestApi api = RestApi.fromRestApiAttributes(this, "RestApi", RestApiAttributes.builder()
.restApiId(props.getRestApiId())
.rootResourceId(props.getRootResourceId())
.build());
Method method = api.root.addResource("books").addMethod("GET", MockIntegration.Builder.create()
.integrationResponses(List.of(IntegrationResponse.builder()
.statusCode("200")
.build()))
.passthroughBehavior(PassthroughBehavior.NEVER)
.requestTemplates(Map.of(
"application/json", "{ \"statusCode\": 200 }"))
.build(), MethodOptions.builder()
.methodResponses(List.of(MethodResponse.builder().statusCode("200").build()))
.build());
this.methods.push(method);
}
}
public class DeployStackProps extends NestedStackProps {
private String restApiId;
public String getRestApiId() {
return this.restApiId;
}
public DeployStackProps restApiId(String restApiId) {
this.restApiId = restApiId;
return this;
}
private Method[] methods;
public Method[] getMethods() {
return this.methods;
}
public DeployStackProps methods(Method[] methods) {
this.methods = methods;
return this;
}
}
public class DeployStack extends NestedStack {
public DeployStack(Construct scope, DeployStackProps props) {
super(scope, "integ-restapi-import-DeployStack", props);
Deployment deployment = Deployment.Builder.create(this, "Deployment")
.api(RestApi.fromRestApiId(this, "RestApi", props.getRestApiId()))
.build();
if (props.getMethods()) {
for (Object method : props.getMethods()) {
deployment.node.addDependency(method);
}
}
Stage.Builder.create(this, "Stage").deployment(deployment).build();
}
}
new RootStack(new App());
-
Nested Class Summary
Nested ClassesModifier and TypeInterfaceDescriptionstatic final classA builder forRestApiAttributesstatic final classAn implementation forRestApiAttributes -
Method Summary
Modifier and TypeMethodDescriptionstatic RestApiAttributes.Builderbuilder()The ID of the API Gateway RestApi.The resource ID of the root resource.Methods inherited from interface software.amazon.jsii.JsiiSerializable
$jsii$toJson
-
Method Details
-
getRestApiId
The ID of the API Gateway RestApi. -
getRootResourceId
The resource ID of the root resource. -
builder
- Returns:
- a
RestApiAttributes.BuilderofRestApiAttributes
-