2.5.0 • Published 8 months ago

@pyriter/unrest v2.5.0

Weekly downloads
-
License
GPL
Repository
github
Last release
8 months ago

Unrest

Patreon

Description

Request routing for AWS Lambda running Nodejs, written in Typescript

Motivation: Existing routing libraries are inefficient. This library uses a trie data structure with local caching to improve lookup and response time. (More latency data to come)

Install

npm install @pyriter/unrest

Features

  1. Define routes
  2. Define controllers
  3. Type the request body

One Time Setup

Set the "noStrictGenericChecks" to true in your tsconfig to avoid typescript errors

{
  "compilerOptions": {
    ...
    "noStrictGenericChecks": true,
    ...
  }
}

Usage

Simple HTTP GET examples

import { StatusType, Unrest } from "@pyriter/unrest";
import { APIGatewayProxyEvent } from "aws-lambda";
import { UnrestResponse } from "./unrestResponse";
import { RequestProps } from "./route";

class ApiServiceHandler {
  private readonly unrest: Unrest;

  constructor() {
    this.unrest = Unrest.builder()
      .withRoute({
        method: MethodType.GET,
        path: "/api/v1/ping",
        handler: async (): Promise<Response> => {
          return Response.builder()
            .withStatusCode(StatusType.OK)
            .withBody({
              message: "success"
            }).build();
        }
      })
      .withRoute({
        method: MethodType.GET,
        path: "/api/v1/user/{userId}",
        handler: async (props: RequestProps<undefined>): Promise<Response> => {
          const { urlParams } = props;
          const { userId } = urlParams;

          console.log(`The user id from request is `, userId);

          return Response.builder()
            .withStatusCode(StatusType.OK)
            .withBody({
              message: "success"
            }).build();
        }
      })
      .withRoute({
        method: MethodType.POST,
        path: "/api/v1/user/{userId}",
        handler: async (props: RequestProps<User>): Promise<Response> => {
          const { urlParams, body } = props;
          const { userId } = urlParams;

          console.log(`The user id from request is `, userId);
          console.log(`The user object from the request body is `, body);

          return Response.builder()
            .withStatusCode(StatusType.OK)
            .withBody({
              message: "success"
            }).build();
        }
      })
      .withRoute({
        method: MethodType.GET,
        path: "/api/v1/quote",
        handler: async (props: RequestProps<undefined>): Promise<Response> => {

          const { queryStringParams } = props;
          console.log(`query string params from request url`, queryStringParams);

          return Response.builder()
            .withStatusCode(StatusType.OK)
            .withBody({
              message: "success"
            }).build();
        }
      })
      .build();
  }

  async handle(event: APIGatewayProxyEvent):
    Promise<UnrestResponse> {
    return await this.unrest.execute(event);
  }
}

Additional Route Examples

You can use openApi style URL params to define key value pairs like this {keyName}.

const unrest = Unrest.builder()
  .withRoute({
    method: MethodType.GET,
    path: '/api/v1/ping',
    handler: pingController.getPing,
    thisReference: pingController
  })
  .withRoute({
    method: MethodType.POST,
    path: '/api/v1/account',
    handler: accountController.postAccount,
    thisReference: accountController
  })
  .withRoute({
    method: MethodType.PUT,
    path: '/api/v1/account/{accountId}',
    handler: accountController.putAccount,
    thisReference: accountController
  })
  .withRoute({
    method: MethodType.DELETE,
    path: '/api/v1/account/{accountId}',
    handler: accountController.deleteAccount,
    thisReference: accountController
  })
  .withRoute({
    method: MethodType.GET,
    path: '/api/v1/user/{userId}/order/{orderId}',
    handler: orderController.getOrderFromUser,
    thisReference: orderController
  })
  .build();

API

Unrest

The routing library itself. It can execute an APIGatewayEvent and invoke the desired controller.

Unrest.builder()

Returns the builder for creating an instance of the unrest object.

2.4.0

10 months ago

2.3.0

10 months ago

2.5.0

8 months ago

1.2.0

2 years ago

1.0.0

2 years ago

1.4.1

2 years ago

1.4.0

2 years ago

1.2.1

2 years ago

2.2.0

1 year ago

2.0.0

1 year ago

1.1.0

2 years ago

1.5.0

1 year ago

1.3.2

2 years ago

1.3.1

2 years ago

1.3.0

2 years ago

2.1.0

1 year ago

0.14.1

2 years ago

0.14.0

2 years ago

0.12.0

2 years ago

0.13.0

2 years ago

0.11.0

2 years ago

0.10.0

2 years ago

0.9.0

2 years ago

0.8.0

2 years ago

0.7.0

2 years ago

0.6.7

2 years ago

0.6.6

2 years ago

0.6.9

2 years ago

0.6.8

2 years ago

0.6.10

2 years ago

0.6.11

2 years ago

0.6.5

2 years ago

0.6.3

2 years ago

0.6.2

2 years ago

0.6.4

2 years ago

0.6.1

2 years ago

0.6.0

2 years ago

0.5.0

2 years ago

0.1.0

2 years ago

0.3.0

2 years ago

0.2.0

2 years ago

0.0.10

2 years ago

0.0.9

2 years ago

0.0.8

2 years ago

0.0.5

2 years ago

0.0.7

2 years ago

0.0.6

2 years ago

0.0.4

2 years ago

0.0.3

2 years ago

0.0.2

2 years ago

0.0.1

2 years ago