Desenvolvimento de WebServices RESTful com NodeJS e MongoDB
O documento apresenta Bruno Wiltemburg e Rubens Fernandes como desenvolvedores da empresa Websix e descreve brevemente os conceitos de webservices, REST, HTTP, NodeJS e MongoDB.
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
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
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.
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;
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 –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”});