fastify-resty

⚔️ Declarative NodeJS web framework with REST API route auto-generation, DI, and decorators, build on top of Fastify and TypeScript.

MIT License

Downloads
125
Stars
83
Committers
1

Modern and declarative REST API framework for superfast and oversimplification backend development, build on top of Fastify and TypeScript.

Benefits 🎯

  • Zero configuration - Generates RESTful API routes for your data out the box
  • JSON Schema validation - Build JSON Schemas to validate and speedup your requests and replies
  • Highly customizable - provides a lot of possible configurations for your application
  • Purely TypeScript - Written in TypeScript and comes with all the required typings
  • Declarative interface - Uses decorators for routes and models definitions
  • Fastify compatible - Built with Fastify and supports all its features and plugins
  • Built-in DI - Provides simple Dependency Injection interface to bind your entries

Install 📌

Core module

$ npm install @fastify-resty/core fastify

TypeORM connector

$ npm install @fastify-resty/typeorm typeorm

Usage 🚀

TypeORM Entity (author.entity.ts):
import { Entity, Column, PrimaryGeneratedColumn, CreateDateColumn } from 'typeorm';

@Entity()
export default class Author {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  firstname: string;

  @Column()
  lastname: string;

  @CreateDateColumn()
  created_at: Date;
}
Entity controller (author.controller.ts):
import { EntityController } from '@fastify-resty/core';
import AuthorEntity from './author.entity';

@EntityController(AuthorEntity, '/authors')
export default class AuthorController {}
Bootstrap (app.ts):
import fastify from 'fastify';
import { createConnection } from 'typeorm';
import { bootstrap } from '@fastify-resty/core';
import typeorm from '@fastify-resty/typeorm';
import AuthorController from './author.controller';

async function main() {
  const app = fastify();
  const connection = await createConnection();

  app.register(typeorm, { connection });
  app.register(bootstrap, { controllers: [AuthorController] });

  app.listen(8080, (err, address) => {
    console.log(app.printRoutes());
  });
}

main();
Generated routes:
└── /
    └── users (DELETE|GET|PATCH|POST|PUT)
        └── / (DELETE|GET|PATCH|POST|PUT)
            └── :id (DELETE)
                :id (GET)
                :id (PATCH)
                :id (PUT)

Documentation 📚

Packages 📦

Examples 🔬

Issues and contributions 📝

Contributors are welcome, please fork and send pull requests! If you find a bug or have any ideas on how to improve this project please submit an issue.

License

MIT License

Icons made by Eucalyp from www.flaticon.com