Skip to content

Resty

Fast, unopinionated, minimalist REST framework for building efficient and scalable applications. It uses modern TypeScript and combines elements of OOP, Functional Programming and Reactive Programming.

Resty has unique features:

  • Dependency Injection
  • Method Interceptors
  • Modular Application Design
  • Request Interceptors
  • Routing (Dynamic & Static)
  • AWS Lambda Adapter
  • Supports MVC Structure

Documentation will be updated and each decorator and interface will be explained in separate section.

Usage

In example below you can find basic application server starter:

import {
  pipeServer, Controller, Inject, ResolvedRoute, 
  GET, POST, OnError, RootModule, Logger, Router, 
  addRequestInterceptor, BodyAsBufferInterceptor
} from "@typeix/resty";
import {IncomingMessage, ServerResponse, createServer} from "http";
// resty supports http, https, http2

@Controller({
  path: "/",
  interceptors: [], // controller request interceptors executed in order
  providers: []  // providers created on each request
})
class HomeController {

  @Inject()
  private request: IncomingMessage;

  @Inject()
  private response: ServerResponse;

  @ResolvedRoute()
  private route: IResolvedRoute;

  @GET()
  actionGet() {
    return this.route.method.toUpperCase() + " ACTION";
  }

  @POST()
  @addRequestInterceptor(BodyAsBufferInterceptor)
  actionAjax(body: Buffer) {
    return JSON.stringify(body.toString());
  }

  // will match all routes on this controller
  @OnError("*") 
  errorCase() {
    return "FIRE ERROR CASE";
  }

  @GET("redirect")
  actionRedirect() {
    this.response.setHeader("Location", "/mypage");
    this.response.writeHead(307);
    this.response.end();
  }
}

// DEFINE MODULE 
@RootModule({
  imports: [], // import other modules, created at application bootstrap
  shared_providers: [
    {
      provide: Logger,
      useFactory: () => new Logger({ options: {level: "debug"}})
    },
    Router
  ],
  providers: [], // providers created at application bootstrap
  controllers: [HomeController] // define controllers
})
class ApplicationModule {}

// START SERVER
const server = createServer();
pipeServer(server, ApplicationModule);
server.listen(4000);