Desenvolvimento de WebServices RESTFul com NodeJs e MongoDB
Quem somos ● Bruno Wiltemburg – brunoew@gmail.com – Founder / CEO na WebSix – Web Developer desde 2004 – @brunoew ● Rubens Fernandes – contato@rubensfernandes.com.br – Gerente de Projetos / Desenvolvedor MEAN na Websix – Twitter: @rubensdrake | Github: /rubensfernandes
WebService “Fonte de dados acessada por uma rede local ou pela internet”
WebServices ● Permite integração entre aplicações ● Possui baixo acoplamento ● Permite a (re)utilização dos dados em diversas aplicações (web, mobile, desktop)
HTTP ● Hypertext Transfer Protocol ● A base da Web ● Utiliza alguns verbos para realizar a comunicação. – GET (Solicitação de informações, recursos, etc) – POST (Envio de informações) – PUT (Alterações de dados) – DELETE (Exclusão) – OPTIONS – HEAD
REST ● Representational State Transfer – Design de arquitetura construído para servir aplicações em rede. A aplicação mais comum de REST é a própria World Wide Web, que utilizou REST como base para o desenvolvimento do HTTP 1.1 ● Não é um padrão, é uma METODOLOGIA ● Utiliza-se do protocolo HTTP para transporte de dados
REST ● Client-Server – O lado do client consome dados e trata do que será feito com estes dados. Não se importando com o banco de dados, cache, load balance, etc – O lado server não se preocupa com exibição dos dados, experiência do usuário, etc.
REST ● REST é Stateless – Cada requisição deve ser independente. O servidor não armazena nenhuma informação a respeito do cliente. Qualquer informação de estado deve estar no cliente (como sessão, por exemplo)
Padrões de respostas de API’s ● As informações precisam ser disponibilizadas de forma estruturada, organizada e semântica. ● As formas mais comuns de estruturar dados nas APIs – XML ● Estrutura fácil e bem conhecida; ● Muito “pesado” para transmitir em rede ● Muito custoso para decodificar – JSON ● JavaScript Object Notation ● Tem se tornado o padrão para WebServices ● Rápido, fácil de gerar, interpretar e converter para diversas linguagens de programação
NodeJS
Node JS ● https://nodejs.org ● Plataforma para aplicações JavaScript ● Criada por Ryan Dahl em 2009 ● Escrito em cima da engine V8 do Google (usada no Chrome) ● Baseado em eventos ● Não bloqueante ● Permite o desenvolvimento de aplicações escaláveis em rede usando JavaScript no lado do servidor ● É rápido, MUUUITO rápido.
Quem está usando NodeJS?
NPM ● https://www.npmjs.com ● Gerenciador de pacotes do Node ● + de 250.000 módulos hospedados – npm install [package]
ExpressJS ● http://expressjs.com/ ● Programar utilizando apenas a API HTTP nativa é muito trabalhoso! ● Possui as seguintes características: – MVR (Model-View-Routes); – MVC (Model-View-Controller); – Roteamento de urls via callbacks; – Middleware; – Interface RESTFul; – Suporte a File Uploads;
Express JS
Hello World
Mongo DB
Mongo DB ● Humongous – Gigantesco ● Criado pela 10Gen em 2007 que virou MongoDB Inc. ● NoSql - Not Only SQL ● Schemaless ● MRNN - Modelo Relacional Não Normalizado ● Salva os dados em forma de documentos BSON ● BSON = JSON binário – oferece suporte a uma tipagem maior de dados ex: Date, Number, String, Object, Mixed ● Tamanho limite para um BSON document é 16MB.
Mongo DB SQL = mongodb ● tabela = coleções ● colunas = campos ● row = documentos ● Select = find ● insert = insert ● update = update ● delete = remove
Mongo DB – Limitações de SO ● Coleções não podem ter: $ " " null e começar com system. ● Nome de campos não podem ter . ● Windows – As base de dados não podem conter caracteres: /. "$*<>:|? no nome dela. ● Unix – As base de dados não podem conter caracteres: /. "$ ● Mais informações: https://docs.mongodb.com/manual/reference/limits/
Mongo DB – Terminal ● mongo – inicia o mongo ● show dbs – todas as databases ● use nome_da_base – similar ao mysql ● show collections – mostra todas as coleções (tabelas) da base ● db.colecao.comando – manipulando os dados Exemplos ● use animes; ● db.anime.insert({name: “Naruto”, nota: 9.99}); ● db.anime.find({}); ● db.anime.find({name: “Naruto”}); ● db.anime.update({name: “Naruto”}, “{ $set: { nota: 10 } }”); ● db.anime.remove({_id: “576336737fa263cdd363e4f5”});
Exemplo usando driver nativo
No MongoDB não precisamos estruturar as coleções igual o SQL, MAS... Mongo DB
ODM ●Schemaless !== Schemafree ●Object Data Manager ●Permite criar esquemas
Mongoose
Mongoose ● http://mongoosejs.com/ ● Motivação: Fazer lógica de negócios e validações no mongo é uma chatice.
Easy way ;)
Mão na massa

Desenvolvimento de WebServices RESTful com NodeJS e MongoDB

  • 1.
  • 2.
    Quem somos ● BrunoWiltemburg – brunoew@gmail.com – Founder / CEO na WebSix – Web Developer desde 2004 – @brunoew ● Rubens Fernandes – contato@rubensfernandes.com.br – Gerente de Projetos / Desenvolvedor MEAN na Websix – Twitter: @rubensdrake | Github: /rubensfernandes
  • 3.
    WebService “Fonte de dadosacessada por uma rede local ou pela internet”
  • 4.
    WebServices ● Permite integraçãoentre aplicações ● Possui baixo acoplamento ● Permite a (re)utilização dos dados em diversas aplicações (web, mobile, desktop)
  • 5.
    HTTP ● Hypertext TransferProtocol ● A base da Web ● Utiliza alguns verbos para realizar a comunicação. – GET (Solicitação de informações, recursos, etc) – POST (Envio de informações) – PUT (Alterações de dados) – DELETE (Exclusão) – OPTIONS – HEAD
  • 6.
    REST ● Representational StateTransfer – Design de arquitetura construído para servir aplicações em rede. A aplicação mais comum de REST é a própria World Wide Web, que utilizou REST como base para o desenvolvimento do HTTP 1.1 ● Não é um padrão, é uma METODOLOGIA ● Utiliza-se do protocolo HTTP para transporte de dados
  • 7.
    REST ● Client-Server – Olado do client consome dados e trata do que será feito com estes dados. Não se importando com o banco de dados, cache, load balance, etc – O lado server não se preocupa com exibição dos dados, experiência do usuário, etc.
  • 8.
    REST ● REST éStateless – Cada requisição deve ser independente. O servidor não armazena nenhuma informação a respeito do cliente. Qualquer informação de estado deve estar no cliente (como sessão, por exemplo)
  • 9.
    Padrões de respostasde API’s ● As informações precisam ser disponibilizadas de forma estruturada, organizada e semântica. ● As formas mais comuns de estruturar dados nas APIs – XML ● Estrutura fácil e bem conhecida; ● Muito “pesado” para transmitir em rede ● Muito custoso para decodificar – JSON ● JavaScript Object Notation ● Tem se tornado o padrão para WebServices ● Rápido, fácil de gerar, interpretar e converter para diversas linguagens de programação
  • 11.
  • 12.
    Node JS ● https://nodejs.org ●Plataforma para aplicações JavaScript ● Criada por Ryan Dahl em 2009 ● Escrito em cima da engine V8 do Google (usada no Chrome) ● Baseado em eventos ● Não bloqueante ● Permite o desenvolvimento de aplicações escaláveis em rede usando JavaScript no lado do servidor ● É rápido, MUUUITO rápido.
  • 13.
  • 14.
    NPM ● https://www.npmjs.com ● Gerenciadorde pacotes do Node ● + de 250.000 módulos hospedados – npm install [package]
  • 15.
    ExpressJS ● http://expressjs.com/ ● Programarutilizando apenas a API HTTP nativa é muito trabalhoso! ● Possui as seguintes características: – MVR (Model-View-Routes); – MVC (Model-View-Controller); – Roteamento de urls via callbacks; – Middleware; – Interface RESTFul; – Suporte a File Uploads;
  • 16.
  • 17.
  • 18.
  • 19.
    Mongo DB ● Humongous– Gigantesco ● Criado pela 10Gen em 2007 que virou MongoDB Inc. ● NoSql - Not Only SQL ● Schemaless ● MRNN - Modelo Relacional Não Normalizado ● Salva os dados em forma de documentos BSON ● BSON = JSON binário – oferece suporte a uma tipagem maior de dados ex: Date, Number, String, Object, Mixed ● Tamanho limite para um BSON document é 16MB.
  • 20.
    Mongo DB SQL =mongodb ● tabela = coleções ● colunas = campos ● row = documentos ● Select = find ● insert = insert ● update = update ● delete = remove
  • 21.
    Mongo DB –Limitações de SO ● Coleções não podem ter: $ " " null e começar com system. ● Nome de campos não podem ter . ● Windows – As base de dados não podem conter caracteres: /. "$*<>:|? no nome dela. ● Unix – As base de dados não podem conter caracteres: /. "$ ● Mais informações: https://docs.mongodb.com/manual/reference/limits/
  • 22.
    Mongo DB –Terminal ● mongo – inicia o mongo ● show dbs – todas as databases ● use nome_da_base – similar ao mysql ● show collections – mostra todas as coleções (tabelas) da base ● db.colecao.comando – manipulando os dados Exemplos ● use animes; ● db.anime.insert({name: “Naruto”, nota: 9.99}); ● db.anime.find({}); ● db.anime.find({name: “Naruto”}); ● db.anime.update({name: “Naruto”}, “{ $set: { nota: 10 } }”); ● db.anime.remove({_id: “576336737fa263cdd363e4f5”});
  • 23.
  • 24.
    No MongoDB nãoprecisamos estruturar as coleções igual o SQL, MAS... Mongo DB
  • 25.
    ODM ●Schemaless !== Schemafree ●ObjectData Manager ●Permite criar esquemas
  • 26.
  • 27.
    Mongoose ● http://mongoosejs.com/ ● Motivação:Fazer lógica de negócios e validações no mongo é uma chatice.
  • 28.
  • 29.