SlideShare uma empresa Scribd logo
1 de 22
Arquitetura e
Desenvolvimento de
uma Api em NodeJs
14ª NodeJS BH Meetup – Rethink
API: o melhor caso de uso para NodeJS
• O desejo é alto grau de concorrência
• Menor tempo impactado por Entrada/Saída
• Menos gasto de memória por request, mais
concorrência
• Servidor Web sempre deseja alto grau de paralelismo
Express: a referência em soluções de API
• Framework Server Web mais conhecido em NodeJS
• Resolve de maneira simples as duas principais
necessidades de um servidor de aplicações web:
• Simples configurar como devolver HTML/CSS/assets
• Simples arquitetar como devolver JSON e backend
Partindo do zero
• Da linha de comando, se você começar com...
$ npm install -g express-generator
$ express --view=html
Partindo do zero
... você sai com:
O coração de uma API em Express
Este é o arquivo
app.js inicial
A cascata de rotas Express
• São sempre uma sequência de regras de rota, que
podem interromper a execução ou delegar para a
próxima
• Este é o conceito de middlewares: você invoca
pequenas regras lógicas no meio do caminho
Rotas em um Roteador
Este é um
exemplo de Rota
Rota completa
Esta é uma Rota com
todos os métodos
HTTP possíveis
Explorando algumas bibliotecas consagradas
• Swagger
• Passport
• Joi
• Helmet
• Knex
•Body-parser
•Winston
•JWT
•Bluebird
•Dot-env
Dot-env
• Permite definir um
arquivo .env com os
valores locais para as
variáveis de ambiente
Middlewares “plug and play”
• Vários middlewares são praticamente “features” que
geralmente se espera do Express
• Eles podem ser facilmente adicionados ao App.js e
disponibilizados para todas as rotas
Middlewares “plug and play”
Winston
• Logger usual
• Permite registrar em
vários locais ao mesmo
tempo com um só log
Passport
• Permite adicionar redes
sociais como logins
• Várias “estratégias”
(redes e protocolos) de
autenticação disponíveis
JWT
• Padrão de autenticação
via Header Token
• Pode se integrar
facilmente aos
middlewares
Bluebird
• Antigo padronizador de
Promises em Node
• Ainda útil para lidar
com conversão de
callbacks para Promises
Knex
• Query Builder
• Facilita a padronização
de buscas em bancos de
dados
• Acopla facilmente para
um ORM (BookshelfJS)
Joi
• Validação para input
em API
• Facilita a aplicação de
regras de negócio já na
chamada
Swagger
• Padrão de
documentação de API
• Com middlewares,
pode criar uma página
HTML interativa com
toda a documentação
Bônus: Testes unitários
• App com rotas
separadas permitem
testes unitários
facilmente
• Mocha & Supertest
Obrigado!
14ª NodeJS BH Meetup – Rethink
https://github.com/fmalk/meetup-node-api
Fernando Piancastelli – fernando@rethink.dev

Mais conteúdo relacionado

Mais procurados

LabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHPLabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHPCarlos Santos
 
Frontline - Rails3.1
Frontline - Rails3.1Frontline - Rails3.1
Frontline - Rails3.1Daniel Lopes
 
Desenvolvimento de aplicações assíncronas, orientadas a eventos e poliglotas ...
Desenvolvimento de aplicações assíncronas, orientadas a eventos e poliglotas ...Desenvolvimento de aplicações assíncronas, orientadas a eventos e poliglotas ...
Desenvolvimento de aplicações assíncronas, orientadas a eventos e poliglotas ...Rodrigo Peleias
 
MongoDB: introdução à sua próxima base de dados
MongoDB:  introdução à sua próxima base de dadosMongoDB:  introdução à sua próxima base de dados
MongoDB: introdução à sua próxima base de dadosJordan Kobellarz
 
Node.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizarNode.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizarFilipe Falcão
 
Application Servers e Ruby
Application Servers e RubyApplication Servers e Ruby
Application Servers e RubyRafael Soares
 
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Filosofia Ruby e Rails (UFOP e Inforuso 2010)Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Filosofia Ruby e Rails (UFOP e Inforuso 2010)Daniel Lopes
 
Aula 5 java script
Aula 5   java scriptAula 5   java script
Aula 5 java scriptandreluizlc
 
Desenvolvemos para web?
Desenvolvemos para web?Desenvolvemos para web?
Desenvolvemos para web?Luis Vendrame
 
Precisamos falar sobre MERN stack
Precisamos falar sobre MERN stackPrecisamos falar sobre MERN stack
Precisamos falar sobre MERN stackSidney Roberto
 
Fargate fibonacci - pt br
Fargate   fibonacci - pt brFargate   fibonacci - pt br
Fargate fibonacci - pt brRodrigo Galba
 
Minicurso - Banco de Dados NoSQL com .Net Core
Minicurso - Banco de Dados NoSQL com .Net CoreMinicurso - Banco de Dados NoSQL com .Net Core
Minicurso - Banco de Dados NoSQL com .Net CoreBruno Roldão
 

Mais procurados (20)

LabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHPLabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
 
Frontline - Rails3.1
Frontline - Rails3.1Frontline - Rails3.1
Frontline - Rails3.1
 
Aula de Node
Aula de NodeAula de Node
Aula de Node
 
Desenvolvimento de aplicações assíncronas, orientadas a eventos e poliglotas ...
Desenvolvimento de aplicações assíncronas, orientadas a eventos e poliglotas ...Desenvolvimento de aplicações assíncronas, orientadas a eventos e poliglotas ...
Desenvolvimento de aplicações assíncronas, orientadas a eventos e poliglotas ...
 
MongoDB: introdução à sua próxima base de dados
MongoDB:  introdução à sua próxima base de dadosMongoDB:  introdução à sua próxima base de dados
MongoDB: introdução à sua próxima base de dados
 
Node.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizarNode.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizar
 
Application Servers e Ruby
Application Servers e RubyApplication Servers e Ruby
Application Servers e Ruby
 
MVC na plataforma JEE
MVC na plataforma JEEMVC na plataforma JEE
MVC na plataforma JEE
 
Realtime com node.js e socket.io
Realtime com node.js e socket.ioRealtime com node.js e socket.io
Realtime com node.js e socket.io
 
Boas práticas de API Design
Boas práticas de API DesignBoas práticas de API Design
Boas práticas de API Design
 
Node slide
Node slideNode slide
Node slide
 
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Filosofia Ruby e Rails (UFOP e Inforuso 2010)Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
 
JSPs parte 2
JSPs parte 2JSPs parte 2
JSPs parte 2
 
Aula 5 java script
Aula 5   java scriptAula 5   java script
Aula 5 java script
 
Desenvolvemos para web?
Desenvolvemos para web?Desenvolvemos para web?
Desenvolvemos para web?
 
Coffe script
Coffe scriptCoffe script
Coffe script
 
Precisamos falar sobre MERN stack
Precisamos falar sobre MERN stackPrecisamos falar sobre MERN stack
Precisamos falar sobre MERN stack
 
Fargate fibonacci - pt br
Fargate   fibonacci - pt brFargate   fibonacci - pt br
Fargate fibonacci - pt br
 
PHP
PHPPHP
PHP
 
Minicurso - Banco de Dados NoSQL com .Net Core
Minicurso - Banco de Dados NoSQL com .Net CoreMinicurso - Banco de Dados NoSQL com .Net Core
Minicurso - Banco de Dados NoSQL com .Net Core
 

Semelhante a Arquitetura API em NodeJS

NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.Filipe Morelli
 
O bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.jsO bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.jsNuno Paz
 
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...Renato Groff
 
Apache CouchDB
Apache CouchDBApache CouchDB
Apache CouchDBHugo Souza
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHPFelipe Ribeiro
 
Desenvolvendo APIs seguras com ASP.NET Core, JWT, Docker e Azure Web App for ...
Desenvolvendo APIs seguras com ASP.NET Core, JWT, Docker e Azure Web App for ...Desenvolvendo APIs seguras com ASP.NET Core, JWT, Docker e Azure Web App for ...
Desenvolvendo APIs seguras com ASP.NET Core, JWT, Docker e Azure Web App for ...Renato Groff
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkMario Guedes
 
Hangout Tempo Real Eventos - Nodejs - Os Primeiros Passos
Hangout  Tempo Real Eventos - Nodejs - Os Primeiros PassosHangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos
Hangout Tempo Real Eventos - Nodejs - Os Primeiros PassosJackson F. de A. Mafra
 
JustJava 2005: Web Services em Java com o JWSDP 1.5
JustJava 2005: Web Services em Java com o JWSDP 1.5JustJava 2005: Web Services em Java com o JWSDP 1.5
JustJava 2005: Web Services em Java com o JWSDP 1.5Helder da Rocha
 
Introdução ao ASP .NET Web API
Introdução ao ASP .NET Web APIIntrodução ao ASP .NET Web API
Introdução ao ASP .NET Web APIVinicius Mussak
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBAri Stopassola Junior
 
ASP.NET Core 3.1: Desenvolvimento de APIs Multiplataforma - Março
ASP.NET Core 3.1: Desenvolvimento de APIs Multiplataforma - MarçoASP.NET Core 3.1: Desenvolvimento de APIs Multiplataforma - Março
ASP.NET Core 3.1: Desenvolvimento de APIs Multiplataforma - MarçoRenato Groff
 
Sistemas Distribuídos baseados na Web
Sistemas Distribuídos baseados na WebSistemas Distribuídos baseados na Web
Sistemas Distribuídos baseados na WebRafael Chagas
 
Desenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São CarlosDesenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São CarlosRodolfo Fadino Junior
 
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018Renato Groff
 
Node.js - Devo adotar na minha empresa?
Node.js - Devo adotar na minha empresa?Node.js - Devo adotar na minha empresa?
Node.js - Devo adotar na minha empresa?Pablo Souza
 
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018Renato Groff
 

Semelhante a Arquitetura API em NodeJS (20)

Node js - Javascript Server Side
Node js - Javascript Server SideNode js - Javascript Server Side
Node js - Javascript Server Side
 
NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.
 
Como um grande sistema REST funciona
Como um grande sistema REST funcionaComo um grande sistema REST funciona
Como um grande sistema REST funciona
 
O bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.jsO bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.js
 
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
 
Apache CouchDB
Apache CouchDBApache CouchDB
Apache CouchDB
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHP
 
Desenvolvendo APIs seguras com ASP.NET Core, JWT, Docker e Azure Web App for ...
Desenvolvendo APIs seguras com ASP.NET Core, JWT, Docker e Azure Web App for ...Desenvolvendo APIs seguras com ASP.NET Core, JWT, Docker e Azure Web App for ...
Desenvolvendo APIs seguras com ASP.NET Core, JWT, Docker e Azure Web App for ...
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST Framework
 
Hangout Tempo Real Eventos - Nodejs - Os Primeiros Passos
Hangout  Tempo Real Eventos - Nodejs - Os Primeiros PassosHangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos
Hangout Tempo Real Eventos - Nodejs - Os Primeiros Passos
 
JustJava 2005: Web Services em Java com o JWSDP 1.5
JustJava 2005: Web Services em Java com o JWSDP 1.5JustJava 2005: Web Services em Java com o JWSDP 1.5
JustJava 2005: Web Services em Java com o JWSDP 1.5
 
Introdução ao ASP .NET Web API
Introdução ao ASP .NET Web APIIntrodução ao ASP .NET Web API
Introdução ao ASP .NET Web API
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDB
 
ASP.NET Core 3.1: Desenvolvimento de APIs Multiplataforma - Março
ASP.NET Core 3.1: Desenvolvimento de APIs Multiplataforma - MarçoASP.NET Core 3.1: Desenvolvimento de APIs Multiplataforma - Março
ASP.NET Core 3.1: Desenvolvimento de APIs Multiplataforma - Março
 
Sistemas Distribuídos baseados na Web
Sistemas Distribuídos baseados na WebSistemas Distribuídos baseados na Web
Sistemas Distribuídos baseados na Web
 
Desenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São CarlosDesenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São Carlos
 
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018
 
Node.js - Devo adotar na minha empresa?
Node.js - Devo adotar na minha empresa?Node.js - Devo adotar na minha empresa?
Node.js - Devo adotar na minha empresa?
 
Curso AngularJS - Parte 1
Curso AngularJS - Parte 1Curso AngularJS - Parte 1
Curso AngularJS - Parte 1
 
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018
 

Arquitetura API em NodeJS

  • 1. Arquitetura e Desenvolvimento de uma Api em NodeJs 14ª NodeJS BH Meetup – Rethink
  • 2. API: o melhor caso de uso para NodeJS • O desejo é alto grau de concorrência • Menor tempo impactado por Entrada/Saída • Menos gasto de memória por request, mais concorrência • Servidor Web sempre deseja alto grau de paralelismo
  • 3. Express: a referência em soluções de API • Framework Server Web mais conhecido em NodeJS • Resolve de maneira simples as duas principais necessidades de um servidor de aplicações web: • Simples configurar como devolver HTML/CSS/assets • Simples arquitetar como devolver JSON e backend
  • 4. Partindo do zero • Da linha de comando, se você começar com... $ npm install -g express-generator $ express --view=html
  • 5. Partindo do zero ... você sai com:
  • 6. O coração de uma API em Express Este é o arquivo app.js inicial
  • 7. A cascata de rotas Express • São sempre uma sequência de regras de rota, que podem interromper a execução ou delegar para a próxima • Este é o conceito de middlewares: você invoca pequenas regras lógicas no meio do caminho
  • 8. Rotas em um Roteador Este é um exemplo de Rota
  • 9. Rota completa Esta é uma Rota com todos os métodos HTTP possíveis
  • 10. Explorando algumas bibliotecas consagradas • Swagger • Passport • Joi • Helmet • Knex •Body-parser •Winston •JWT •Bluebird •Dot-env
  • 11. Dot-env • Permite definir um arquivo .env com os valores locais para as variáveis de ambiente
  • 12. Middlewares “plug and play” • Vários middlewares são praticamente “features” que geralmente se espera do Express • Eles podem ser facilmente adicionados ao App.js e disponibilizados para todas as rotas
  • 14. Winston • Logger usual • Permite registrar em vários locais ao mesmo tempo com um só log
  • 15. Passport • Permite adicionar redes sociais como logins • Várias “estratégias” (redes e protocolos) de autenticação disponíveis
  • 16. JWT • Padrão de autenticação via Header Token • Pode se integrar facilmente aos middlewares
  • 17. Bluebird • Antigo padronizador de Promises em Node • Ainda útil para lidar com conversão de callbacks para Promises
  • 18. Knex • Query Builder • Facilita a padronização de buscas em bancos de dados • Acopla facilmente para um ORM (BookshelfJS)
  • 19. Joi • Validação para input em API • Facilita a aplicação de regras de negócio já na chamada
  • 20. Swagger • Padrão de documentação de API • Com middlewares, pode criar uma página HTML interativa com toda a documentação
  • 21. Bônus: Testes unitários • App com rotas separadas permitem testes unitários facilmente • Mocha & Supertest
  • 22. Obrigado! 14ª NodeJS BH Meetup – Rethink https://github.com/fmalk/meetup-node-api Fernando Piancastelli – fernando@rethink.dev