@aws-cdk/aws-apigateway
Version:
The CDK Construct Library for AWS::ApiGateway
537 lines (536 loc) • 18.1 kB
TypeScript
import * as cloudwatch from '@aws-cdk/aws-cloudwatch';
import { IVpcEndpoint } from '@aws-cdk/aws-ec2';
import * as iam from '@aws-cdk/aws-iam';
import { IResource as IResourceBase, Resource } from '@aws-cdk/core';
import { Construct } from 'constructs';
import { ApiDefinition } from './api-definition';
import { ApiKeyOptions, IApiKey } from './api-key';
import { CfnAccount, CfnRestApi } from './apigateway.generated';
import { Deployment } from './deployment';
import { DomainName, DomainNameOptions } from './domain-name';
import { GatewayResponse, GatewayResponseOptions } from './gateway-response';
import { Method } from './method';
import { Model, ModelOptions } from './model';
import { RequestValidator, RequestValidatorOptions } from './requestvalidator';
import { IResource, ResourceOptions } from './resource';
import { Stage, StageOptions } from './stage';
import { UsagePlan, UsagePlanProps } from './usage-plan';
export interface IRestApi extends IResourceBase {
/**
* The ID of this API Gateway RestApi.
* @attribute
*/
readonly restApiId: string;
/**
* The resource ID of the root resource.
* @attribute
*/
readonly restApiRootResourceId: string;
/**
* API Gateway deployment that represents the latest changes of the API.
* This resource will be automatically updated every time the REST API model changes.
* `undefined` when no deployment is configured.
*/
readonly latestDeployment?: Deployment;
/**
* API Gateway stage that points to the latest deployment (if defined).
*/
deploymentStage: Stage;
/**
* Represents the root resource ("/") of this API. Use it to define the API model:
*
* api.root.addMethod('ANY', redirectToHomePage); // "ANY /"
* api.root.addResource('friends').addMethod('GET', getFriendsHandler); // "GET /friends"
*
*/
readonly root: IResource;
/**
* Gets the "execute-api" ARN
* @returns The "execute-api" ARN.
* @default "*" returns the execute API ARN for all methods/resources in
* this API.
* @param method The method (default `*`)
* @param path The resource path. Must start with '/' (default `*`)
* @param stage The stage (default `*`)
*/
arnForExecuteApi(method?: string, path?: string, stage?: string): string;
}
/**
* Represents the props that all Rest APIs share
*/
export interface RestApiBaseProps {
/**
* Indicates if a Deployment should be automatically created for this API,
* and recreated when the API model (resources, methods) changes.
*
* Since API Gateway deployments are immutable, When this option is enabled
* (by default), an AWS::ApiGateway::Deployment resource will automatically
* created with a logical ID that hashes the API model (methods, resources
* and options). This means that when the model changes, the logical ID of
* this CloudFormation resource will change, and a new deployment will be
* created.
*
* If this is set, `latestDeployment` will refer to the `Deployment` object
* and `deploymentStage` will refer to a `Stage` that points to this
* deployment. To customize the stage options, use the `deployOptions`
* property.
*
* A CloudFormation Output will also be defined with the root URL endpoint
* of this REST API.
*
* @default true
*/
readonly deploy?: boolean;
/**
* Options for the API Gateway stage that will always point to the latest
* deployment when `deploy` is enabled. If `deploy` is disabled,
* this value cannot be set.
*
* @default - Based on defaults of `StageOptions`.
*/
readonly deployOptions?: StageOptions;
/**
* Retains old deployment resources when the API changes. This allows
* manually reverting stages to point to old deployments via the AWS
* Console.
*
* @default false
*/
readonly retainDeployments?: boolean;
/**
* A name for the API Gateway RestApi resource.
*
* @default - ID of the RestApi construct.
*/
readonly restApiName?: string;
/**
* Custom header parameters for the request.
* @see https://docs.aws.amazon.com/cli/latest/reference/apigateway/import-rest-api.html
*
* @default - No parameters.
*/
readonly parameters?: {
[key: string]: string;
};
/**
* A policy document that contains the permissions for this RestApi
*
* @default - No policy.
*/
readonly policy?: iam.PolicyDocument;
/**
* Indicates whether to roll back the resource if a warning occurs while API
* Gateway is creating the RestApi resource.
*
* @default false
*/
readonly failOnWarnings?: boolean;
/**
* Configure a custom domain name and map it to this API.
*
* @default - no domain name is defined, use `addDomainName` or directly define a `DomainName`.
*/
readonly domainName?: DomainNameOptions;
/**
* Automatically configure an AWS CloudWatch role for API Gateway.
*
* @default true
*/
readonly cloudWatchRole?: boolean;
/**
* Export name for the CfnOutput containing the API endpoint
*
* @default - when no export name is given, output will be created without export
*/
readonly endpointExportName?: string;
/**
* A list of the endpoint types of the API. Use this property when creating
* an API.
*
* @default EndpointType.EDGE
*/
readonly endpointTypes?: EndpointType[];
/**
* Specifies whether clients can invoke the API using the default execute-api
* endpoint. To require that clients use a custom domain name to invoke the
* API, disable the default endpoint.
* @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html
*
* @default false
*/
readonly disableExecuteApiEndpoint?: boolean;
}
/**
* Represents the props that all Rest APIs share.
* @deprecated - superseded by `RestApiBaseProps`
*/
export interface RestApiOptions extends RestApiBaseProps, ResourceOptions {
}
/**
* Props to create a new instance of RestApi
*/
export interface RestApiProps extends RestApiOptions {
/**
* A description of the purpose of this API Gateway RestApi resource.
*
* @default - No description.
*/
readonly description?: string;
/**
* The list of binary media mime-types that are supported by the RestApi
* resource, such as "image/png" or "application/octet-stream"
*
* @default - RestApi supports only UTF-8-encoded text payloads.
*/
readonly binaryMediaTypes?: string[];
/**
* A nullable integer that is used to enable compression (with non-negative
* between 0 and 10485760 (10M) bytes, inclusive) or disable compression
* (when undefined) on an API. When compression is enabled, compression or
* decompression is not applied on the payload if the payload size is
* smaller than this value. Setting it to zero allows compression for any
* payload size.
*
* @default - Compression is disabled.
*/
readonly minimumCompressionSize?: number;
/**
* The ID of the API Gateway RestApi resource that you want to clone.
*
* @default - None.
*/
readonly cloneFrom?: IRestApi;
/**
* The source of the API key for metering requests according to a usage
* plan.
*
* @default - Metering is disabled.
*/
readonly apiKeySourceType?: ApiKeySourceType;
/**
* The EndpointConfiguration property type specifies the endpoint types of a REST API
* @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-restapi-endpointconfiguration.html
*
* @default EndpointType.EDGE
*/
readonly endpointConfiguration?: EndpointConfiguration;
}
/**
* Props to instantiate a new SpecRestApi
*/
export interface SpecRestApiProps extends RestApiBaseProps {
/**
* An OpenAPI definition compatible with API Gateway.
* @see https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-import-api.html
*/
readonly apiDefinition: ApiDefinition;
}
/**
* Base implementation that are common to various implementations of IRestApi
*/
export declare abstract class RestApiBase extends Resource implements IRestApi {
/**
* Checks if the given object is an instance of RestApiBase.
* @internal
*/
static _isRestApiBase(x: any): x is RestApiBase;
/**
* API Gateway deployment that represents the latest changes of the API.
* This resource will be automatically updated every time the REST API model changes.
* This will be undefined if `deploy` is false.
*/
get latestDeployment(): Deployment | undefined;
/**
* The first domain name mapped to this API, if defined through the `domainName`
* configuration prop, or added via `addDomainName`
*/
get domainName(): DomainName | undefined;
/**
* The ID of this API Gateway RestApi.
*/
abstract readonly restApiId: string;
/**
* The resource ID of the root resource.
*
* @attribute
*/
abstract readonly restApiRootResourceId: string;
/**
* Represents the root resource of this API endpoint ('/').
* Resources and Methods are added to this resource.
*/
abstract readonly root: IResource;
/**
* API Gateway stage that points to the latest deployment (if defined).
*
* If `deploy` is disabled, you will need to explicitly assign this value in order to
* set up integrations.
*/
deploymentStage: Stage;
/**
* A human friendly name for this Rest API. Note that this is different from `restApiId`.
* @attribute
*/
readonly restApiName: string;
private _latestDeployment?;
private _domainName?;
protected cloudWatchAccount?: CfnAccount;
constructor(scope: Construct, id: string, props?: RestApiBaseProps);
/**
* Returns the URL for an HTTP path.
*
* Fails if `deploymentStage` is not set either by `deploy` or explicitly.
*/
urlForPath(path?: string): string;
/**
* Defines an API Gateway domain name and maps it to this API.
* @param id The construct id
* @param options custom domain options
*/
addDomainName(id: string, options: DomainNameOptions): DomainName;
/**
* Adds a usage plan.
*/
addUsagePlan(id: string, props?: UsagePlanProps): UsagePlan;
arnForExecuteApi(method?: string, path?: string, stage?: string): string;
/**
* Adds a new gateway response.
*/
addGatewayResponse(id: string, options: GatewayResponseOptions): GatewayResponse;
/**
* Add an ApiKey
*/
addApiKey(id: string, options?: ApiKeyOptions): IApiKey;
/**
* Returns the given named metric for this API
*/
metric(metricName: string, props?: cloudwatch.MetricOptions): cloudwatch.Metric;
/**
* Metric for the number of client-side errors captured in a given period.
*
* Default: sum over 5 minutes
*/
metricClientError(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
/**
* Metric for the number of server-side errors captured in a given period.
*
* Default: sum over 5 minutes
*/
metricServerError(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
/**
* Metric for the number of requests served from the API cache in a given period.
*
* Default: sum over 5 minutes
*/
metricCacheHitCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
/**
* Metric for the number of requests served from the backend in a given period,
* when API caching is enabled.
*
* Default: sum over 5 minutes
*/
metricCacheMissCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
/**
* Metric for the total number API requests in a given period.
*
* Default: sample count over 5 minutes
*/
metricCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
/**
* Metric for the time between when API Gateway relays a request to the backend
* and when it receives a response from the backend.
*
* Default: average over 5 minutes.
*/
metricIntegrationLatency(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
/**
* The time between when API Gateway receives a request from a client
* and when it returns a response to the client.
* The latency includes the integration latency and other API Gateway overhead.
*
* Default: average over 5 minutes.
*/
metricLatency(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
/**
* Internal API used by `Method` to keep an inventory of methods at the API
* level for validation purposes.
*
* @internal
*/
_attachMethod(method: Method): void;
/**
* Associates a Deployment resource with this REST API.
*
* @internal
*/
_attachDeployment(deployment: Deployment): void;
/**
* Associates a Stage with this REST API
*
* @internal
*/
_attachStage(stage: Stage): void;
/**
* @internal
*/
protected _configureCloudWatchRole(apiResource: CfnRestApi): void;
/**
* @deprecated This method will be made internal. No replacement
*/
protected configureCloudWatchRole(apiResource: CfnRestApi): void;
/**
* @deprecated This method will be made internal. No replacement
*/
protected configureDeployment(props: RestApiBaseProps): void;
/**
* @internal
*/
protected _configureDeployment(props: RestApiBaseProps): void;
/**
* @internal
*/
protected _configureEndpoints(props: RestApiProps): CfnRestApi.EndpointConfigurationProperty | undefined;
private cannedMetric;
}
/**
* Represents a REST API in Amazon API Gateway, created with an OpenAPI specification.
*
* Some properties normally accessible on @see {@link RestApi} - such as the description -
* must be declared in the specification. All Resources and Methods need to be defined as
* part of the OpenAPI specification file, and cannot be added via the CDK.
*
* By default, the API will automatically be deployed and accessible from a
* public endpoint.
*
*
* @resource AWS::ApiGateway::RestApi
*/
export declare class SpecRestApi extends RestApiBase {
/**
* The ID of this API Gateway RestApi.
*/
readonly restApiId: string;
/**
* The resource ID of the root resource.
*
* @attribute
*/
readonly restApiRootResourceId: string;
readonly root: IResource;
constructor(scope: Construct, id: string, props: SpecRestApiProps);
}
/**
* Attributes that can be specified when importing a RestApi
*/
export interface RestApiAttributes {
/**
* The ID of the API Gateway RestApi.
*/
readonly restApiId: string;
/**
* The resource ID of the root resource.
*/
readonly rootResourceId: string;
}
/**
* Represents a REST API in Amazon API Gateway.
*
* Use `addResource` and `addMethod` to configure the API model.
*
* By default, the API will automatically be deployed and accessible from a
* public endpoint.
*/
export declare class RestApi extends RestApiBase {
/**
* Import an existing RestApi.
*/
static fromRestApiId(scope: Construct, id: string, restApiId: string): IRestApi;
/**
* Import an existing RestApi that can be configured with additional Methods and Resources.
*/
static fromRestApiAttributes(scope: Construct, id: string, attrs: RestApiAttributes): IRestApi;
readonly restApiId: string;
readonly root: IResource;
readonly restApiRootResourceId: string;
/**
* The list of methods bound to this RestApi
*/
readonly methods: Method[];
/**
* This list of deployments bound to this RestApi
*/
private readonly deployments;
constructor(scope: Construct, id: string, props?: RestApiProps);
/**
* The deployed root URL of this REST API.
*/
get url(): string;
/**
* Adds a new model.
*/
addModel(id: string, props: ModelOptions): Model;
/**
* Adds a new request validator.
*/
addRequestValidator(id: string, props: RequestValidatorOptions): RequestValidator;
/**
* Internal API used by `Method` to keep an inventory of methods at the API
* level for validation purposes.
*
* @internal
*/
_attachMethod(method: Method): void;
/**
* Attaches a deployment to this REST API.
*
* @internal
*/
_attachDeployment(deployment: Deployment): void;
/**
* Performs validation of the REST API.
*/
protected validate(): string[];
}
/**
* The endpoint configuration of a REST API, including VPCs and endpoint types.
*
* EndpointConfiguration is a property of the AWS::ApiGateway::RestApi resource.
*/
export interface EndpointConfiguration {
/**
* A list of endpoint types of an API or its custom domain name.
*
* @default EndpointType.EDGE
*/
readonly types: EndpointType[];
/**
* A list of VPC Endpoints against which to create Route53 ALIASes
*
* @default - no ALIASes are created for the endpoint.
*/
readonly vpcEndpoints?: IVpcEndpoint[];
}
export declare enum ApiKeySourceType {
/**
* To read the API key from the `X-API-Key` header of a request.
*/
HEADER = "HEADER",
/**
* To read the API key from the `UsageIdentifierKey` from a custom authorizer.
*/
AUTHORIZER = "AUTHORIZER"
}
export declare enum EndpointType {
/**
* For an edge-optimized API and its custom domain name.
*/
EDGE = "EDGE",
/**
* For a regional API and its custom domain name.
*/
REGIONAL = "REGIONAL",
/**
* For a private API and its custom domain name.
*/
PRIVATE = "PRIVATE"
}