0.0.8 • Published 5 months ago

api-gateway-direct-dynamodb v0.0.8

Weekly downloads
-
License
ISC
Repository
-
Last release
5 months ago

api-gateway-direct-dynamodb

Overview

This AWS CDK high level construct is built upon the aws-apigateway-dynamodb.

Besides provisioning an API Gateway with direction DynamoDB integration, this construct offers the added convenience of default templates for all four CRUD operations.

Installation

npm install -D api-gateway-direct-dynamodb

Usage

  1. Create a new secret in AWS Secrets Manager whose text value will be the API Gateway's API key that all clients must supply via the HTTP header x-api-key. Note the name and value of the secret. In this example, it is assumed the secret in AWS Secrets Manager is arbitrarily named MyTopSecretApiKey and a string value of 12345ABCDE12345ABCDE.

  2. In your Stack definition, add this minimal deployable pattern definition:

import { RestApiDynamoDB, RestApiDynamoDBProps } from 'api-gateway-direct-dynamodb';

const props: RestApiDynamoDBProps = {
    apiProps: {
        // Name must be identical to name of secret in Secrets Manager.
        apiKeySecretName: 'MyTopSecretApiKey',
        createTemplate: { allow: true }, // Enable Create operation.
        readTemplate: { allow: true }, // Enable Read operation.
        updateTemplate: { allow: true }, // Enable Update operation.
        deleteTemplate: { allow: true }, // Enable Delete operation.
    },
    // Arbitrary prefix when naming internal constructs.
    namingPrefix: 'SolutionA',
    tableProps: {
        // Name of new DynamoDB table to be created.
        tableName: 'EmployeesTable',
        // List of attribute names in the JSON payload to be sent 
        // by clients for saving into the DynamoDB table.
        otherStringAttribNames: ['username', 'gender', 'remarks'],
    }
};

new RestApiDynamoDB(this, 'test-api-gateway-direct-dynamodb', props);

Default Settings

Once the the minimal pattern above has been deployed successfully, you may invoke the four CRUD endpoints using the format as shown by these examples:

CREATE

Sample request:

POST https://{api-id}.{region}.amazonaws.com/dev/
Content-Type: application/json
x-api-key: {value_of_the_secret_in_secrets_manager}

{
    "username": "johnsmith",
    "gender": "M",
    "remarks": "Sits at level two of the corporate building."
}

Sample response:

{
  "description": "OK!",
  "id": "LsKqiFrZyQ0FTcw="
}

READ

Sample request:

GET https://{api-id}.{region}.amazonaws.com/dev/{item_id}
x-api-key: {value_of_the_secret_in_secrets_manager}

Sample response:

{
  "Count": 1,
  "Items": [
    {
      "createdDate": {
        "S": "1697125512"
      },
      "username": {
        "S": "johnsmith"
      },
      "ttlExpiry": {
        "S": "1704901512"
      },
      "id": {
        "S": "LsKqiFrZyQ0FTcw="
      },
      "updatedDate": {
        "S": "1697125512"
      },
      "remarks": {
        "S": "Sits at level two of the corporate building."
      },
      "gender": {
        "S": "M"
      }
    }
  ],
  "ScannedCount": 1
}

UPDATE

Sample request:

PUT https://{api-id}.{region}.amazonaws.com/dev/{item_id}
Content-Type: application/json
x-api-key: {value_of_the_secret_in_secrets_manager}

{
    "remarks": "User has shifted to new building."
}

Sample response:

{
  "Attributes": {
    "createdDate": {
      "S": "1697125512"
    },
    "username": {
      "S": "johnsmith"
    },
    "id": {
      "S": "LsKqiFrZyQ0FTcw="
    },
    "remarks": {
      "S": "User has shifted to new building."
    },
    "ttlExpiry": {
      "S": "1704901898"
    },
    "updatedDate": {
      "S": "1697125898"
    },
    "gender": {
      "S": "M"
    }
  }
}

DELETE

Sample request:

DELETE https://{api-id}.{region}.amazonaws.com/dev/{item_id}
x-api-key: {value_of_the_secret_in_secrets_manager}

Sample response:

{
  "Attributes": {
    "createdDate": {
      "S": "1697125512"
    },
    "username": {
      "S": "johnsmith"
    },
    "id": {
      "S": "LsKqiFrZyQ0FTcw="
    },
    "remarks": {
      "S": "User has shifted to new building."
    },
    "ttlExpiry": {
      "S": "1704901898"
    },
    "updatedDate": {
      "S": "1697125898"
    },
    "gender": {
      "S": "M"
    }
  }
}
0.0.8

5 months ago

0.0.7

7 months ago

0.0.6

7 months ago

0.0.5

7 months ago

0.0.4

7 months ago

0.0.3

7 months ago