npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@parkhub/aws-api-gateway

v2.3.1

Published

The complete AWS API Gateway Framework, powered by [Serverless Components](https://github.com/serverless/components).

Downloads

74

Readme

aws-api-gateway

The complete AWS API Gateway Framework, powered by Serverless Components.

Features

  • Create & manage new API Gateway REST APIs with very simple configuration.
  • Extend Existing API Gateway REST APIs without disrupting other services.
  • Integrate with AWS Lambda via the aws-lambda component
  • Authorize requests with AWS Lambda authorizers

(coming soon)

  • Serverless custom endpoints
  • HTTP API endpoints (websockets and apigatewayv2 endpoints)
  • apikey management
  • domain name management

Options

You have two sets of options, base options that apply to the whole gateway and per endpoint options. The base options appear under the inputs field of the base object below, all are optional:

restApi:
  component: "@parkhub/aws-api-gateway"
  inputs:
    name: API Name
    id: ID of existing api
    description: Description of API purpose
    minimumCompressionSize: 1048575       # Set size that gateway starts compressing return size
    binaryMediaTypes:                     # Extra media types to add to gateway
      - multipart/form-data
    deploymentDescription: description
    stage: development
    mode: update mode (merge | overwrite)
    cors: true                            # Setup Cross-Origin

The above default as:

{
name: 'Test API',
region: 'us-east-1',
description: 'Public API',
minimumCompressionSize: 1048576,
binaryMediaTypes: ['multipart/form-data'],
deploymentDescription: new Date().toISOString(),
mode: 'overwrite'
}

Per Endpoint options are set on each of the elements of the endpoint array. Currently two types of enpoints are accepted custom http and lambda proxy. You use http by specifying a URI to hit and lambda by specifying a function. Function trumps url.

restApi:
  component: "@parkhub/aws-api-gateway"
  inputs:
    description: Serverless REST API
    endpoints:
      - path: /users
        method: POST
        function: Function Name
        authorizer: Authorizer Name
      - path: /users
        method: GET
        URI: http://example.com/users
  • path: gateway path
  • method: gateway method
  • function: lambda proxy function name (required if no URI)
  • URI: uri of the service endpoint to hit
  • authorizer: Gateway authorizer name
  • validator: gateway input validator (0: Body, 1:BodyAndParams, 2: Params, def: NONE)
  • params: input parameters to setup
    • path: path is setup from root path, param path is used for documentation only
    • querystrings: takes either {key:bool} for simple required/not, {key:obj} for documentation, and {key:string} for hardcoding a value
      • key:
        • value: Bool (required/not)
        • type: documenting type
        • def: documenting default
        • example: documenting example
        • description: documenting description
  • headers: takes the same set of values as params
  • keys: - value - description
  • template: string velocity code for input transformation
  • responses: array of objects
    • code: http return code
    • model: json schema for validating return
    • template: velocity code for output transformation

Recommendations

Use @parkhub/config https://github.com/parkhub/config to setup environment and stage variables and handle them in the configuration. With the config endpoint you can pass flags with defaults, import other yaml files and setup variables that can use eachother as variables to make env changes simple and automatic.

config:
  component: "@parkhub/config"
  inputs:
    flags:
      stage: dev
    files:
      outputModels: "./outputModels.yml"
      inputModels: "./inputModels.yml"
    environment:
      HOST: (custom.(flags.stage)-host)
    custom:
      dev-host: http://dev.example.com
      qa-host: http://qa.example.com

For reusable configurations use yaml pointers and other conviences. Declare them at the top of the file and reference them later.

headers: &headers
  Content-type: application/json
  
*headers

Example

Table of Contents

  1. Install
  2. Configure
  3. Deploy

1. Install

$ npm install -g serverless

2. Configure

You can configure the component to either create a new REST API from scratch, or extend an existing one.

Creating REST APIs

You can create new REST APIs by specifying the endpoints you'd like to create, and optionally passing a name and description for your new REST API. You may also choose between a lambda proxy, or http integration by using the function or URI field respectively. The default api settings are:

{
  "name": "Test API",
  "region": "us-east-1",
  "description": "Public API",
  "minimumCompressionSize": 1048576,
  "binaryMediaTypes": ["multipart/form-data"],
  "deploymentDescription": "new Date().toISOString()",
  "mode": "overwrite"
}

The following is an example with all available options:

restApi:
  component: "@parkhub/aws-api-gateway"
  inputs:
    name: Developer API
    description: Rest API
    minimumCompressionSize: 1048576
    binaryMediaTypes:
      - multipart/form-data
    deploymentDescription: "Deploying api"
    stage: dev
    cors: true
    mode: merge
    endpoints:
      - path: /events
        mehtod: GET
        function: getEvents-${stage} # refer to functions with name only
        authorizer: authorize-events # custom lambda authorizer supported
        validator: 2 # validation type to use 0: Body only, 1: Body and Params, 2: Params only

      - path: /events
        method: POST
        function: ${createUser.name}
        authorizer: ${auth.name}
      - path: /users
        method: GET
        function: ${getUsers.arn}
        authorizer: ${auth.name}
      - path: /users
        method: PUT
        proxyURI: https://example.com/users
        authorizer: ${auth.arn}

Extending REST APIs

You can extend existing REST APIs by specifying the REST API ID. This will only create, remove & manage the specified endpoints without removing or disrupting other endpoints.

# serverless.yml

createUser:
  component: "@serverless/aws-lambda"
  inputs:
    code: ./code
    handler: index.createUser
getUsers:
  component: "@serverless/aws-lambda"
  inputs:
    code: ./code
    handler: index.getUsers

restApi:
  component: "@serverless/aws-api-gateway"
  inputs:
    id: qwertyuiop # specify the REST API ID you'd like to extend
    endpoints:
      - path: /users
        method: POST
        function: ${createUser.name}
      - path: /users
        method: GET
        function: ${getUsers.name}

3. Deploy

$ serverless

 

New to Components?

Checkout the Serverless Components repo for more information.