Skip to content

Resource ​

The ApiGateway Resource allows you to manage AWS ApiGateway Resources for creating and configuring API endpoints.

Minimal Example ​

Create a basic ApiGateway Resource under a specified parent resource:

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

const apiResource = await AWS.ApiGateway.Resource("apiResource", {
  ParentId: "abc123xyz", // Replace with an actual ParentId
  PathPart: "users", // The path part for the resource
  RestApiId: "xyz789abc", // Replace with an actual RestApiId
  adopt: true // Adopt existing resource if it already exists
});

Advanced Configuration ​

Configure an ApiGateway Resource with additional settings such as enabling CORS:

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

const corsApiResource = await AWS.ApiGateway.Resource("corsApiResource", {
  ParentId: "abc123xyz", // Replace with an actual ParentId
  PathPart: "products", // The path part for the resource
  RestApiId: "xyz789abc", // Replace with an actual RestApiId
  adopt: true // Adopt existing resource if it already exists
});

// Assuming the use of a separate method to configure CORS
await AWS.ApiGateway.Method("corsMethod", {
  HttpMethod: "OPTIONS",
  ResourceId: corsApiResource.id,
  RestApiId: "xyz789abc", // Replace with an actual RestApiId
  AuthorizationType: "NONE",
  MethodResponses: [{
    StatusCode: "200",
    ResponseParameters: {
      "method.response.header.Access-Control-Allow-Origin": true,
      "method.response.header.Access-Control-Allow-Headers": true,
      "method.response.header.Access-Control-Allow-Methods": true
    }
  }],
  RequestParameters: {
    "method.request.header.Origin": true
  },
  Integration: {
    Type: "MOCK",
    RequestTemplates: {
      "application/json": '{"statusCode": 200}'
    }
  }
});

Creating Nested Resources ​

Create a nested ApiGateway Resource under an existing resource:

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

const nestedResource = await AWS.ApiGateway.Resource("nestedResource", {
  ParentId: "xyz789abc", // Replace with an actual ParentId of the parent resource
  PathPart: "orders", // The path part for the nested resource
  RestApiId: "xyz789abc", // Replace with an actual RestApiId
  adopt: false // Do not adopt existing resource; fail if it exists
});

Using the Resource in a Method ​

Demonstrate how to use an ApiGateway Resource in conjunction with a method:

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

const methodApiResource = await AWS.ApiGateway.Resource("methodApiResource", {
  ParentId: "abc123xyz", // Replace with an actual ParentId
  PathPart: "login", // The path part for the resource
  RestApiId: "xyz789abc", // Replace with an actual RestApiId
  adopt: true // Adopt existing resource if it already exists
});

await AWS.ApiGateway.Method("loginMethod", {
  HttpMethod: "POST",
  ResourceId: methodApiResource.id,
  RestApiId: "xyz789abc", // Replace with an actual RestApiId
  AuthorizationType: "AWS_IAM", // Example of authorization type
  RequestModels: {
    "application/json": "LoginRequest"
  },
  MethodResponses: [{
    StatusCode: "200",
    ResponseModels: {
      "application/json": "LoginResponse"
    }
  }]
});