Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Une API from scratch avec NestJS

paul souche
September 29, 2021

Une API from scratch avec NestJS

NestJS est un framework Node.js progressif permettant de développer des applications côté serveur. Il est écrit en TypeScript, s'inspire de l'architecture d'Angular et permet de construire des APIs Rest, GraphQL ou WebSocket. NestJS offre aussi de nombreux modules utiles pour développer vos application (OpenAPI, TypeORM, CQRS, ...) dont un permettant la mise en oeuvre des microservices.

Depuis quelques mois le framework est devenu très populaire dans la communauté Node.js, notamment grâce à la productivité qu'il procure. C'est pourquoi dans cette session, nous vous proposons de découvrir son éfficacité en développant une API "production ready" en partant de zéro !

paul souche

September 29, 2021
Tweet

More Decks by paul souche

Other Decks in Programming

Transcript

  1. #DevoxxFR Devoxx France 2021 Une API from scratch avec NestJS

    Sylvain Pontoreau @spontoreau Paul Souche @paulsouche 1
  2. Main file import { NestFactory } from '@nestjs/core'; import {

    AppModule } from './app.module'; async function bootstrap() { const app = await NestFactory .create(AppModule); await app.listen(3000); } bootstrap(); 5
  3. Premier module import { Module } from '@nestjs/common'; import {

    AppController } from './app.controller'; import { AppService } from './app.service'; @Module({ controllers: [AppController], providers: [AppService], }) export class AppModule {} 6
  4. Un exemple de controller import { Controller, Get } from

    '@nestjs/common'; @Controller('/') export class AppController { @Get() hello(): string { return 'Hello Devoxx 2021'; } } 7
  5. L'injection import { Controller, Get } from '@nestjs/common'; import {

    AppService } from './app.service'; @Controller('/') export class AppController { constructor( private readonly service: AppService ) {} @Get() findAll(): string { return this.service.sayHello(); } } 8
  6. Un framework opiniated import { Module } from '@nestjs/common'; import

    { JwtModule } from '@nestjs/jwt'; import { PassportModule } from '@nestjs/passport'; @Module({ imports: [ JwtModule.register({ secretOrPrivateKey: process.ENV.JWT_SECRET, signOptions: { expiresIn: 3600, }, }), PassportModule.register({ defaultStrategy: 'jwt' }), ], }) export class AppModule {} 9
  7. #DevoxxFR Le pattern CQRS • CQS • Command : exécuter

    une tâche • Query : retourner une information • CQRS • Responsabilités ségrégées • Lecture != Écriture • Pure • https://www.eventstore.com/a-beginners-guide-to-cqrs 12
  8. Première Query import { IQuery } from '@nestjs/cqrs'; export class

    SayHelloQuery implements IQuery { constructor( readonly name: string ) { } } 13
  9. Handler import { QueryHandler, IQueryHandler } from '@nestjs/cqrs'; import {

    SayHelloQuery } from './sayHelloQuery'; @QueryHandler(SayHelloQuery) export class SayHelloQueryHandler implements IQueryHandler<SayHelloQuery, string> { execute({ name }: SayHelloQuery) { return `Hello ${ name }`; } } 14
  10. Utilisation dans un contrôleur import { Controller, Get, Param }

    from '@nestjs/common'; import { QueryBus } from '@nestjs/cqrs'; import { SayHelloQuery } from './sayHello.query'; @Controller('/') export class AppController { constructor( private readonly queryBus: QueryBus ) { } @Get(':name') async sayHello(@Param() name: string) { return this.queryBus.execute( new SayHelloQuery(name) ); } } 15
  11. Déclaration dans un module import { Module } from '@nestjs/common';

    import { CqrsModule } from '@nestjs/cqrs'; import { SayHelloQueryHandler } from './sayHello.handler'; @Module({ imports: [CqrsModule], controllers: [AppController], providers: [SayHelloQueryHandler], }) export class AppModule {} 16
  12. Ressources 1 9 NestJS • Website : https://nestjs.com/ • Doc:

    https://docs.nestjs.com/ • TypeORM : https://docs.nestjs.com/recipes/sql-typeorm • CQRS: https://docs.nestjs.com/recipes/cqrs • Swagger: https://docs.nestjs.com/openapi/introduction Sample https://github.com/paulsouche/devoxx-cfp-api CQRS (guide) https://www.eventstore.com/a-beginners-guide-to-cqrs