SlideShare uma empresa Scribd logo
Criando APIs com Node e TypeScript
MEETUP
NEST FRAMEWORK
APIs com Node e TypeScript
Objetivos:
- Consolidar seus conhecimentos em
APIs
- Melhorar a organização do código
- Aplicar padrões de mercado
MEETUP
NEST FRAMEWORK
APIs com Node e TypeScript
Meet the host:
André
Baltieri
Microsoft MVP e CEO balta.io
Head of People na ESX
VEM PRA ESX!!!
#TEMOSVAGAS
vagas@esx.com.br
Por que mudar?
Introdução:
- Motivações do uso de Node
- Motivações do uso de TypeScript
- Motivações do uso do Nest Framework
Ainda MVC?
Prós:
- Completo
- Baseado no modelo “Angular”
- Utiliza TypeScript
- Suporta GraphQL, CQRS,
Microsserviços
Nest Framework
Contras:
- Conteúdo Técnico Online
- Suporte
Setup
Pré-Requisitos:
- Visual Studio Code ou outro editor de código de sua preferência
- Hyper ou outro terminal de sua preferência
- Node 8.9.0 ou superior
code
npm i -g @nestjs/cli
nest new minhaapi
Estrutura do Projeto
Core Files
- Os principais arquivos ficarão na pasta src.
code
src
app.controller.ts
app.module.ts
main.ts
Estrutura do Projeto
Main.ts
- Arquivo principal da aplicação, é nele que tudo é criado/iniciado.
App.Module.ts
- A aplicação precisa ter pelo menos 1 módulo, este é o padrão (Raiz).
App.Controller.ts
- Controller padrão que vem como exemplo
Executando a API
code
npm start
npm run start:dev
Resumo
- Podemos executar a aplicação utilizando os comandos abaixo.
Controllers
Resumo
- São responsáveis por receber requisições, trata-las e devolver
respostas.
- Utilizam um decorador chamado @Controller.
code
nest g controller MeuController
Rotas
Resumo
- São baseadas nos nomes dos controladores.
- Fazem uso dos decoradores @Get, @Post, @Put e @Delete para compor a
rota
Request Object
Resumo
- Toda chamada a um controlador recebe um objeto (Requisição).
- Este objeto em sí, representa a requisição HTTP.
- Na maioria das vezes não será necessário manipular este objeto.
- Podemo utilizar decoradores específicos ao invés disso.
Dedicated Decorators
@Request() req
@Response() res
@Next() next
@Session() req.session
@Param(param?: string) req.params / req.params[param]
@Body(param?: string) req.body / req.body[param]
@Query(param?: string) req.query / req.query[param]
@Headers(param?: string) req.headers / req.headers[param]
Route Wildcards
Resumo
- Podemos definir “coringas” nas
rotas.
Exemplos
- http://localhost:3000/abcd
- http://localhost:3000/ab_cd
- http://localhost:3000/abecd
Outros Caracteres
- Também podemos utilizar outros
caracteres, como ?, +, * e (),
derivados das expressões regulares.
code
@Get(“ab*cd”)
Status Code
Resumo
- Por padrão, o retorno é sempre 200, mas podemos alterá-lo facilmente
utilizando o decorador @HttpCode(CODE).
code
@HttpCode(201)
Headers
Resumo
- Podemos especificar cabeçalhos customizados para as respostas,
utilizando o decorador @Header(CHAVE, VALOR).
code
@Header(‘Cache-Control’, ‘none’)
Parâmetros de Rotas
Resumo
- Podemos especificar que uma rota deve receber um parâmetro
utilizando :NOMEDOPARAMETRO e posteriormente, recebe-lo utilizando o
decorador @Param.
code
@Get(':id')
findOne(@Param() params) {
console.log(params.id);
return `This action returns a #${params.id} cat`;
}
Parâmetros de Rotas
Resumo
- Podemos especificar que uma rota deve receber um parâmetro
utilizando :NOMEDOPARAMETRO e posteriormente, recebe-lo utilizando o
decorador @Param.
code
@Get(':id')
findOne(@Param('id') id) {
return `This action returns a #${id} cat`;
}
Data Transfer Objects
Resumo
- Podemos criar objetos de entrada, que serão automaticamente
convertidos (Como no ASP.NET Core/C#) e configurados nos parâmetros.
code
export class CreateCustomerDto {
public name: string;
public age: number;
}
Data Transfer Objects
Resumo
- Podemos criar objetos de entrada, que serão automaticamente
convertidos (Como no ASP.NET Core/C#) e configurados nos parâmetros.
code
@Post()
create(@Body() dto: CreateCustomerDto) {
return ‘Criado’;
}
DEMO
{crud}
Executando
Resumo
- Com tudo pronto, precisamos informar ao módulo raiz que temos um
controlador.
code
import { Module } from '@nestjs/common';
import { MeuController } from ‘./controllers/meu.controller';
@Module({
controllers: [MeuController],
})
export class ApplicationModule {}
DEMO
{Postman}
Providers
Resumo
- Basicamente, qualquer coisa pode ser considerada um Provider, seja
ele um serviço, um repositório ou outro item.
- Os Providers permitem injetar classes em outras classes, trazendo um
maior desacoplamento e gerenciando dependências automaticamente.
- Na verdade, um Provider nada mais é do que uma classe decorada com
@Injectable().
Services
Resumo
- São Providers que encapsulam métodos e podem ser re-utilizados em
diversas classes (Normalmente em controladores).
Services
code
import { Injectable } from '@nestjs/common';
import { Customer } from ‘./entities/customer';
@Injectable()
export class CustomerService {
private readonly customers: Customer[] = [];
create(customer: customer) {
this.customers.push(customer);
}
}
Services
code
import { Controller, Get, Post, Body } from '@nestjs/common';
import { Customer } from ‘./entities/customer';
import { CustomerService } from ‘./customer.service’;
@Controller(‘customers')
export class CustomerController {
constructor(private readonly service: CustomerService) {}
@Post()
async create(@Body() customer: Customer) {
this.service.create(customer);
}
}
Injeção de Dependência
Resumo
- O que um controlador precisa para trabalhar.
- Não devemos nos preocupar com itens que não da nossa
responsabilidade.
- Criamos dependências de itens externos.
- São injetados via construtor.
- Nest resolve automaticamente.
Scope
Resumo
- Com tudo pronto, basta informar ao módulo sobre o serviço criado.
Scope
code
import { Module } from '@nestjs/common';
import { CustomerController } from ‘./controllers/customer.controller';
import { CustomerService } from ‘./services/customer.service';
@Module({
controllers: [CustomerController],
providers: [CustomerService],
})
export class ApplicationModule {}
Criando APIs com Node e TypeScript
Dúvidas?
hello@balta.io

Mais conteúdo relacionado

ODP
Php 05 Mvc
PDF
PHP Jedi - Boas Práticas e Alta Performance
PPTX
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
PDF
LabMM3 - Aula teórica 09
PDF
PHP: Linguagem + Mysql + MVC + AJAX
PDF
PHP Day - PHP para iniciantes
PDF
Java Web 3 - Servlets e JSP 1
Php 05 Mvc
PHP Jedi - Boas Práticas e Alta Performance
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
LabMM3 - Aula teórica 09
PHP: Linguagem + Mysql + MVC + AJAX
PHP Day - PHP para iniciantes
Java Web 3 - Servlets e JSP 1

Mais procurados (13)

PDF
Memcached, Gearman e Sphinx
PDF
Desenvolvimento ágil com Kohana framework
PDF
Pre vs Pos
PDF
Java Web 5 - JSP, Expression Language e Taglibs
PDF
NoSQL com Zend Framework 2
ODP
tmn - Introdução ao JavaScript
PPT
Apresentação Java Web Si Ufc Quixadá - MVC
PDF
O que mudou no Ruby 1.9
KEY
Yet Another Ruby Framework - Como o Rails funciona por dentro
PPS
CURSO DE PHP PARA INICIANTES - AULA 1
PPTX
Introdução ao PHP - Criação de sites II
PDF
Java Web 4 - Servlets e JSP 2
Memcached, Gearman e Sphinx
Desenvolvimento ágil com Kohana framework
Pre vs Pos
Java Web 5 - JSP, Expression Language e Taglibs
NoSQL com Zend Framework 2
tmn - Introdução ao JavaScript
Apresentação Java Web Si Ufc Quixadá - MVC
O que mudou no Ruby 1.9
Yet Another Ruby Framework - Como o Rails funciona por dentro
CURSO DE PHP PARA INICIANTES - AULA 1
Introdução ao PHP - Criação de sites II
Java Web 4 - Servlets e JSP 2
Anúncio

Semelhante a Criando APIs com Node e TypeScript (20)

PPTX
Node JS - Parte 2
PPTX
Arquitetura API em NodeJS
PDF
NestJS - O framework progressivo
PPTX
IoTizando com JavaScript
PPTX
Introdução ao NodeJS - Utilizando o Nodejs
PDF
Minicurso WebAPI .NET CORE - SemanaTI2018 - UNIVEM
PPTX
Indo alem do_mvc_node_js
PDF
Livro angular2
PDF
Arquitetura Node com NestJS
PPTX
NodeJS - Tutorial de forma simples e pratica.
PPTX
A Web é uma API
ODP
Aula09 - Java Script
PPTX
ASP.NET Core 3.1: Desenvolvimento de APIs Multiplataforma - Março
PDF
Aplicações de Alto Desempenho com JHipster Full Stack
PDF
compreensão geral para estruturar uma api
PPTX
Workshop - Ionic + firebase
PPTX
Apresentação 9 challenge (1).pptx
PDF
Escalando aplicações no front-end com ReactJS
PDF
APIs REST com Spring Boot
PPTX
O front-end moderno e sua lib mais popular: React
Node JS - Parte 2
Arquitetura API em NodeJS
NestJS - O framework progressivo
IoTizando com JavaScript
Introdução ao NodeJS - Utilizando o Nodejs
Minicurso WebAPI .NET CORE - SemanaTI2018 - UNIVEM
Indo alem do_mvc_node_js
Livro angular2
Arquitetura Node com NestJS
NodeJS - Tutorial de forma simples e pratica.
A Web é uma API
Aula09 - Java Script
ASP.NET Core 3.1: Desenvolvimento de APIs Multiplataforma - Março
Aplicações de Alto Desempenho com JHipster Full Stack
compreensão geral para estruturar uma api
Workshop - Ionic + firebase
Apresentação 9 challenge (1).pptx
Escalando aplicações no front-end com ReactJS
APIs REST com Spring Boot
O front-end moderno e sua lib mais popular: React
Anúncio

Mais de Andre Baltieri (20)

PPTX
Clean Code - Promob DevDay 2022
PPTX
31/08/2019 - Flutter Talks
PPTX
Refatorando para Testes de Unidade
PPTX
PWA: State of Art
PPTX
PWAs no seu Desktop
PPTX
Otimizando seu cenário de APIs
PPTX
Turbine sua API no Microsoft Azure
PPTX
Progressive Web Apps: Um novo mundo
PPTX
ASP.NET Core APIs: Performance Tips
PPTX
Progressive Web Apps
PPTX
Migrando para o Angular 2
PPTX
Progressive Web Apps e o futuro do desenvolvimento Web na Plataforma .NET
PPTX
BaaS com Firebase 3
PPTX
Otimizando eu JavaScript com TypeScript
PPTX
Angular 2, TypeScript e Além
PPTX
Introdução ao Native Script
PPTX
Criando aplicações Híbridas com AngularJs, TypeScript e Material Design
PPTX
Trabalhando com WebHooks no ASP.NET
PPTX
Microsoft e o mundo do Desenvolvimento
PPTX
5509 segurança em ap is
Clean Code - Promob DevDay 2022
31/08/2019 - Flutter Talks
Refatorando para Testes de Unidade
PWA: State of Art
PWAs no seu Desktop
Otimizando seu cenário de APIs
Turbine sua API no Microsoft Azure
Progressive Web Apps: Um novo mundo
ASP.NET Core APIs: Performance Tips
Progressive Web Apps
Migrando para o Angular 2
Progressive Web Apps e o futuro do desenvolvimento Web na Plataforma .NET
BaaS com Firebase 3
Otimizando eu JavaScript com TypeScript
Angular 2, TypeScript e Além
Introdução ao Native Script
Criando aplicações Híbridas com AngularJs, TypeScript e Material Design
Trabalhando com WebHooks no ASP.NET
Microsoft e o mundo do Desenvolvimento
5509 segurança em ap is

Último (7)

DOC
CODIGO PARA AUTOMATIZAR A JOGABILIDADE SUPER MARIO
PPTX
Curso de Windows 11 resumido na prática.pptx
DOC
COMO AUTOMATIZR JOGOS SUPER NINTENDO ATRAVES DA PROGRAMAÇÃO
PDF
apresentacao introducao computacao ead.pdf
PPTX
Mapeamento de Objeto para Tabela Relacional
PDF
Evolução em código: algoritmos genéticos com PHP
PDF
Dos requisitos ao código: como criar código rastreável em PHP
CODIGO PARA AUTOMATIZAR A JOGABILIDADE SUPER MARIO
Curso de Windows 11 resumido na prática.pptx
COMO AUTOMATIZR JOGOS SUPER NINTENDO ATRAVES DA PROGRAMAÇÃO
apresentacao introducao computacao ead.pdf
Mapeamento de Objeto para Tabela Relacional
Evolução em código: algoritmos genéticos com PHP
Dos requisitos ao código: como criar código rastreável em PHP

Criando APIs com Node e TypeScript

  • 2. MEETUP NEST FRAMEWORK APIs com Node e TypeScript
  • 3. Objetivos: - Consolidar seus conhecimentos em APIs - Melhorar a organização do código - Aplicar padrões de mercado MEETUP NEST FRAMEWORK APIs com Node e TypeScript
  • 4. Meet the host: André Baltieri Microsoft MVP e CEO balta.io Head of People na ESX
  • 7. Introdução: - Motivações do uso de Node - Motivações do uso de TypeScript - Motivações do uso do Nest Framework Ainda MVC?
  • 8. Prós: - Completo - Baseado no modelo “Angular” - Utiliza TypeScript - Suporta GraphQL, CQRS, Microsserviços Nest Framework Contras: - Conteúdo Técnico Online - Suporte
  • 9. Setup Pré-Requisitos: - Visual Studio Code ou outro editor de código de sua preferência - Hyper ou outro terminal de sua preferência - Node 8.9.0 ou superior code npm i -g @nestjs/cli nest new minhaapi
  • 10. Estrutura do Projeto Core Files - Os principais arquivos ficarão na pasta src. code src app.controller.ts app.module.ts main.ts
  • 11. Estrutura do Projeto Main.ts - Arquivo principal da aplicação, é nele que tudo é criado/iniciado. App.Module.ts - A aplicação precisa ter pelo menos 1 módulo, este é o padrão (Raiz). App.Controller.ts - Controller padrão que vem como exemplo
  • 12. Executando a API code npm start npm run start:dev Resumo - Podemos executar a aplicação utilizando os comandos abaixo.
  • 13. Controllers Resumo - São responsáveis por receber requisições, trata-las e devolver respostas. - Utilizam um decorador chamado @Controller. code nest g controller MeuController
  • 14. Rotas Resumo - São baseadas nos nomes dos controladores. - Fazem uso dos decoradores @Get, @Post, @Put e @Delete para compor a rota
  • 15. Request Object Resumo - Toda chamada a um controlador recebe um objeto (Requisição). - Este objeto em sí, representa a requisição HTTP. - Na maioria das vezes não será necessário manipular este objeto. - Podemo utilizar decoradores específicos ao invés disso.
  • 16. Dedicated Decorators @Request() req @Response() res @Next() next @Session() req.session @Param(param?: string) req.params / req.params[param] @Body(param?: string) req.body / req.body[param] @Query(param?: string) req.query / req.query[param] @Headers(param?: string) req.headers / req.headers[param]
  • 17. Route Wildcards Resumo - Podemos definir “coringas” nas rotas. Exemplos - http://localhost:3000/abcd - http://localhost:3000/ab_cd - http://localhost:3000/abecd Outros Caracteres - Também podemos utilizar outros caracteres, como ?, +, * e (), derivados das expressões regulares. code @Get(“ab*cd”)
  • 18. Status Code Resumo - Por padrão, o retorno é sempre 200, mas podemos alterá-lo facilmente utilizando o decorador @HttpCode(CODE). code @HttpCode(201)
  • 19. Headers Resumo - Podemos especificar cabeçalhos customizados para as respostas, utilizando o decorador @Header(CHAVE, VALOR). code @Header(‘Cache-Control’, ‘none’)
  • 20. Parâmetros de Rotas Resumo - Podemos especificar que uma rota deve receber um parâmetro utilizando :NOMEDOPARAMETRO e posteriormente, recebe-lo utilizando o decorador @Param. code @Get(':id') findOne(@Param() params) { console.log(params.id); return `This action returns a #${params.id} cat`; }
  • 21. Parâmetros de Rotas Resumo - Podemos especificar que uma rota deve receber um parâmetro utilizando :NOMEDOPARAMETRO e posteriormente, recebe-lo utilizando o decorador @Param. code @Get(':id') findOne(@Param('id') id) { return `This action returns a #${id} cat`; }
  • 22. Data Transfer Objects Resumo - Podemos criar objetos de entrada, que serão automaticamente convertidos (Como no ASP.NET Core/C#) e configurados nos parâmetros. code export class CreateCustomerDto { public name: string; public age: number; }
  • 23. Data Transfer Objects Resumo - Podemos criar objetos de entrada, que serão automaticamente convertidos (Como no ASP.NET Core/C#) e configurados nos parâmetros. code @Post() create(@Body() dto: CreateCustomerDto) { return ‘Criado’; }
  • 25. Executando Resumo - Com tudo pronto, precisamos informar ao módulo raiz que temos um controlador. code import { Module } from '@nestjs/common'; import { MeuController } from ‘./controllers/meu.controller'; @Module({ controllers: [MeuController], }) export class ApplicationModule {}
  • 27. Providers Resumo - Basicamente, qualquer coisa pode ser considerada um Provider, seja ele um serviço, um repositório ou outro item. - Os Providers permitem injetar classes em outras classes, trazendo um maior desacoplamento e gerenciando dependências automaticamente. - Na verdade, um Provider nada mais é do que uma classe decorada com @Injectable().
  • 28. Services Resumo - São Providers que encapsulam métodos e podem ser re-utilizados em diversas classes (Normalmente em controladores).
  • 29. Services code import { Injectable } from '@nestjs/common'; import { Customer } from ‘./entities/customer'; @Injectable() export class CustomerService { private readonly customers: Customer[] = []; create(customer: customer) { this.customers.push(customer); } }
  • 30. Services code import { Controller, Get, Post, Body } from '@nestjs/common'; import { Customer } from ‘./entities/customer'; import { CustomerService } from ‘./customer.service’; @Controller(‘customers') export class CustomerController { constructor(private readonly service: CustomerService) {} @Post() async create(@Body() customer: Customer) { this.service.create(customer); } }
  • 31. Injeção de Dependência Resumo - O que um controlador precisa para trabalhar. - Não devemos nos preocupar com itens que não da nossa responsabilidade. - Criamos dependências de itens externos. - São injetados via construtor. - Nest resolve automaticamente.
  • 32. Scope Resumo - Com tudo pronto, basta informar ao módulo sobre o serviço criado.
  • 33. Scope code import { Module } from '@nestjs/common'; import { CustomerController } from ‘./controllers/customer.controller'; import { CustomerService } from ‘./services/customer.service'; @Module({ controllers: [CustomerController], providers: [CustomerService], }) export class ApplicationModule {}

Notas do Editor

  • #2: Abertura // instrudução
  • #3: Tela de apresentação do curso
  • #4: Conheça o instrutor
  • #5: Conheça o instrutor