Desenvolvimento de WebServices RESTFul com NodeJs e MongoDB
Quem somos
Bruno [email protected]
Founder / CEO na WebSix
Web Developer desde 2004
@brunoew
Rubens [email protected]
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 integrao entre aplicaes
Possui baixo acoplamento
Permite a (re)utilizao dos dados em diversas aplicaes (web, mobile, desktop)
HTTP
Hypertext Transfer Protocol
A base da Web
Utiliza alguns verbos para realizar a comunicao. GET (Solicitao de informaes, recursos, etc)
POST (Envio de informaes)
PUT (Alteraes de dados)
DELETE (Excluso)
OPTIONS
HEAD
REST
Representational State TransferDesign de arquitetura construdo para servir aplicaes em rede. A aplicao mais comum de REST a prpria World Wide Web, que utilizou REST como base para o desenvolvimento do HTTP 1.1
No um padro, uma METODOLOGIA
Utiliza-se do protocolo HTTP para transporte de dados
REST
Client-ServerO lado do client consome dados e trata do que ser feito com estes dados. No se importando com o banco de dados, cache, load balance, etc
O lado server no se preocupa com exibio dos dados, experincia do usurio, etc.
REST
REST StatelessCada requisio deve ser independente. O servidor no armazena nenhuma informao a respeito do cliente. Qualquer informao de estado deve estar no cliente (como sesso, por exemplo)
Padres de respostas de APIs
As informaes precisam ser disponibilizadas de forma estruturada, organizada e semntica.
As formas mais comuns de estruturar dados nas APIsXMLEstrutura fcil e bem conhecida;
Muito pesado para transmitir em rede
Muito custoso para decodificar
JSONJavaScript Object Notation
Tem se tornado o padro para WebServices
Rpido, fcil de gerar, interpretar e converter para diversas linguagens de programao
NodeJS
Node JS
https://nodejs.org
Plataforma para aplicaes JavaScript
Criada por Ryan Dahl em 2009
Escrito em cima da engine V8 do Google (usada no Chrome)
Baseado em eventos
No bloqueante
Permite o desenvolvimento de aplicaes escalveis em rede usando JavaScript no lado do servidor
rpido, MUUUITO rpido.
Quem est usando NodeJS?
NPM
https://www.npmjs.com
Gerenciador de pacotes do Node
+ de 250.000 mdulos hospedadosnpm install [package]
ExpressJS
http://expressjs.com/
Programar utilizando apenas a API HTTP nativa muito trabalhoso!
Possui as seguintes caractersticas: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 No Normalizado
Salva os dados em forma de documentos BSON
BSON = JSON binrio 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 = colees
colunas = campos
row = documentos
Select = find
insert = insert
update = update
delete = remove
Mongo DB Limitaes de SO
Colees no podem ter: $ " " null e comear com system.
Nome de campos no podem ter .
Windows As base de dados no podem conter caracteres: /\. "$*:|? no nome dela.
UnixAs base de dados no podem conter caracteres: /\. "$
Mais informaes: 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 colees (tabelas) da base
db.colecao.comando manipulando os dadosExemplos
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 no precisamos estruturar as colees igual o SQL, MAS...
Mongo DB
ODM
Schemaless !== Schemafree
Object Data Manager
Permite criar esquemas
Mongoose
Mongoose
http://mongoosejs.com/
Motivao: Fazer lgica de negcios e validaes no mongo uma chatice.
Easy way ;)
Mo na massa