Save 37% off PRO during our Black Friday Sale! »

Une API from scratch avec NestJS

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 !

9298dcce5b2b0e88d8ffbb837192ca98?s=128

Sylvain Pontoreau

September 29, 2021
Tweet

Transcript

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

    Sylvain Pontoreau @spontoreau Paul Souche @paulsouche 1
  2. Présentation 2 Paul Souche @paulsouche Développeur @aircall Sylvain Pontoreau @spontoreau

    Chômeur @pole_emploi
  3. #DevoxxFR Au programme 3 Introduction Auth CQRS TypeORM Swagger

  4. #DevoxxFR 4 Introduction à NestJS

  5. 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
  6. 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
  7. Un exemple de controller import { Controller, Get } from

    '@nestjs/common'; @Controller('/') export class AppController { @Get() hello(): string { return 'Hello Devoxx 2021'; } } 7
  8. 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
  9. 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
  10. #DevoxxFR 10 Demo

  11. #DevoxxFR 11 CQRS avec NestJS

  12. #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
  13. Première Query import { IQuery } from '@nestjs/cqrs'; export class

    SayHelloQuery implements IQuery { constructor( readonly name: string ) { } } 13
  14. 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
  15. 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
  16. 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
  17. #DevoxxFR 17 Demo

  18. #DevoxxFR Conclusion 18 https://github.com/paulsouche/devoxx-cfp-api

  19. 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
  20. #DevoxxFR 20 Des questions ?

  21. #DevoxxFR 21 Merci