Skip to content

RestApi ​

The RestApi resource allows you to create and manage AWS ApiGateway RestApis for building and deploying APIs for your applications.

Minimal Example ​

This example demonstrates how to create a basic RestApi with essential properties and a description.

ts
import AWS from "alchemy/aws/control";

const basicApi = await AWS.ApiGateway.RestApi("basicApi", {
  name: "BasicAPI",
  description: "This is a basic API for demonstration purposes.",
  binaryMediaTypes: ["application/octet-stream"],
  tags: [
    { key: "Project", value: "Demo" }
  ]
});

Advanced Configuration ​

Here is an example of creating a RestApi with advanced configuration options, including a policy and endpoint configuration.

ts
const advancedApi = await AWS.ApiGateway.RestApi("advancedApi", {
  name: "AdvancedAPI",
  description: "This API includes advanced settings.",
  policy: {
    Version: "2012-10-17",
    Statement: [
      {
        Effect: "Allow",
        Principal: "*",
        Action: "execute-api:Invoke",
        Resource: "arn:aws:execute-api:us-east-1:123456789012:advancedApi/*"
      }
    ]
  },
  endpointConfiguration: {
    types: ["REGIONAL"],
    vpcEndpointIds: ["vpce-12345678"]
  },
  minimumCompressionSize: 1024,
  tags: [
    { key: "Environment", value: "Production" }
  ]
});

Importing an Existing API ​

This example demonstrates how to clone an existing RestApi and adopt it into your management.

ts
const clonedApi = await AWS.ApiGateway.RestApi("clonedApi", {
  cloneFrom: "arn:aws:execute-api:us-east-1:123456789012:existingApi/*",
  adopt: true
});

Disabling Execute API Endpoint ​

In this example, we create a RestApi with the execute API endpoint disabled, useful for internal APIs.

ts
const internalApi = await AWS.ApiGateway.RestApi("internalApi", {
  name: "InternalAPI",
  description: "This API is internal and does not expose an endpoint.",
  disableExecuteApiEndpoint: true,
  tags: [
    { key: "Access", value: "Internal" }
  ]
});

Configuration with S3 Body Location ​

This example shows how to create a RestApi that specifies an S3 location for the API definition body.

ts
const s3BodyApi = await AWS.ApiGateway.RestApi("s3BodyApi", {
  name: "S3BodyAPI",
  bodyS3Location: {
    bucket: "my-api-definitions",
    key: "api-definition.json",
    version: "latest"
  },
  tags: [
    { key: "Source", value: "S3" }
  ]
});