Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Preparando a retaguarda dos seus apps com Node.js e MongoDB

Preparando a retaguarda dos seus apps com Node.js e MongoDB

Ione Souza Junior

May 08, 2017
Tweet

More Decks by Ione Souza Junior

Other Decks in Technology

Transcript

  1. Globalcode – Open4education Trilha – Mobile Ione Souza Junior Desenvolvedor

    web e mobile Preparando a retaguarda dos seus apps com Node.js e MongoDB
  2. Globalcode – Open4education Agenda Quem usa API? Para que? O

    que iremos desenvolver? Preparando o ambiente Iniciando o projeto Criando as rotas Integrando a API com o MongoDB Organizando rotas e models Versionamento de API Autenticação Criptografia Logs Documentação Demo
  3. Globalcode – Open4education Quem usa API? Para que? A maioria

    dos aplicativos ( para não dizer todos ) E ainda tem pessoas que nem sabem disso… Sites / Blogs Integração com Facebook, Twitter, Analytics… Sistemas em geral Integração com sistemas de terceiros
  4. Globalcode – Open4education O que iremos desenvolver? Uma REST API

    para uma agenda de contatos. Iremos desenvolver as operações básicas Create Read Update Delete
  5. Globalcode – Open4education O que iremos desenvolver? Endpoints da API

    GET /contact POST /contact GET /contact/:id PUT /contact/:id DELETE /contact/:id
  6. Globalcode – Open4education Preparando o ambiente Você precisará do Node.js,

    npm e MongoDB instalado https://nodejs.org/en/download/ https://www.mongodb.com/download- center#community
  7. Globalcode – Open4education Criando as rotas Consumindo a API $

    curl \ -X GET \ http://localhost:3000/contact {"api":"GET result"} Resultado
  8. Globalcode – Open4education Criando as rotas Consumindo a API $

    curl \ -X POST \ -d '{"name":"TDC"}' \ http://localhost:3000/contact {"api":"POST result”} Resultado ONDE ESTÁ O BODY??
  9. Globalcode – Open4education Criando as rotas Consumindo a API $

    curl \ -X POST \ -H "Content-Type: application/json" \ -d '{"name":"TDC"}' \ http://localhost:3000/contact {"api":"POST result","body":{"name":"TDC"}} Resultado
  10. Globalcode – Open4education Criando as rotas Consumindo a API {"api":"GET

    result","id":"123"} Resultado $ curl \ -X GET \ http://localhost:3000/contact/123
  11. Globalcode – Open4education Criando as rotas Consumindo a API {"api":"PUT

    result","id":"123","body":{"name":"TDC 2017"}} Resultado $ curl \ -X PUT \ -H "Content-Type: application/json" \ -d '{"name":"TDC 2017"}' \ http://localhost:3000/contact/123
  12. Globalcode – Open4education Criando as rotas Consumindo a API $

    curl \ -X DELETE \ http://localhost:3000/contact/123 {"api":"DELETE result","id":"123"} Resultado
  13. Globalcode – Open4education Integrando a API com o MongoDB Por

    enquanto, trabalhamos apenas com informações estáticas. Como integrar o MongoDB? Existe uma biblioteca chamada Mongoose http://mongoosejs.com
  14. Globalcode – Open4education Integrando a API com o MongoDB ContactModel.find()

    - lista tudo ContactModel.find({ }) - lista tudo com condições ContactModel.findById(…) - carrega pela PK ContactModel.save({ }) - salva um objeto ContactModel.remove({ }) - apaga baseado em uma condição
  15. Globalcode – Open4education Integrando a API com o MongoDB Consumindo

    a API $ curl \ -X GET \ http://localhost:3000/contact [ { objeto1… }, { objeto2 …}, { objeto3… } ] Resultado
  16. Globalcode – Open4education Integrando a API com o MongoDB Consumindo

    a API $ curl \ -X POST \ -H "Content-Type: application/json" \ -d '{"name":"Teste", "email":"teste", "is_active":true}' \ http://localhost:3000/contact { "_id":"87b8b98765a798","name":"Teste", "email":"teste", "is_active":true } Resultado
  17. Globalcode – Open4education Integrando a API com o MongoDB Consumindo

    a API $ curl \ -X GET \ http://localhost:3000/contact/87b8b98765a798 { "_id":"87b8b98765a798","name":"Teste 2", “email":"teste 2", "is_active":true } Resultado
  18. Globalcode – Open4education Integrando a API com o MongoDB Consumindo

    a API $ curl \ -X PUT \ -H "Content-Type: application/json" \ -d '{"name":"Teste 2", "email":"teste 2", "is_active":false}' \ http://localhost:3000/contact/87b8b98765a798 { "_id":"87b8b98765a798","name":"Teste 2", "email":"teste 2", "is_active":false } Resultado
  19. Globalcode – Open4education Integrando a API com o MongoDB Consumindo

    a API $ curl \ -X DELETE \ http://localhost:3000/contact/123
  20. Globalcode – Open4education Versionamento de API Minha API precisa evoluir,

    mas ainda tenho usuários que não atualizaram o app e estão utilizando uma versão antiga dela, o que fazer? Controlar as versões de sua API pode ser uma boa idéia. Mas como?
  21. Globalcode – Open4education Versionamento de API Consumindo a API $

    curl \ -X GET \ http://localhost:3000/v1.0/contact [ { objeto1… }, { objeto2 …}, { objeto3… } ] Resultado
  22. Globalcode – Open4education Versionamento de API Consumindo a API $

    curl \ -X GET \ http://localhost:3000/v2.0/contact [ { objeto1… }, { objeto2 …}, { objeto3… } ] Resultado
  23. Globalcode – Open4education Autenticação Você precisa restringir acesso à sua

    API, como fazer? Basic Authentication é uma alternativa
  24. Globalcode – Open4education Autenticação Consumindo a API $ curl \

    -X GET \ -H "Authorization: Basic USUARIO-SENHA-BASE64" \ http://localhost:3000/v1.0/contact
  25. Globalcode – Open4education Criptografia Nem pense colocar uma API no

    ar sem criptografia! Apple Store já exige que seus apps consumam APIs que trafeguem utilizando HTTPS Como fazer?
  26. Globalcode – Open4education Criptografia Você precisa gerar um certificado para

    o seu domínio Para testes, você pode utilizar esta documentação http://www.akadia.com/services/ ssh_test_certificate.html Para produção, você pode utilizar o Certbot para gerar seu certificado e instalá-lo no servidor, é grátis https://certbot.eff.org
  27. Globalcode – Open4education Criptografia Instalar fs e https $ npm

    install fs --save [ { objeto1… }, { objeto2 …}, { objeto3… } ] $ npm install https --save
  28. Globalcode – Open4education Criptografia Colocando a API no ar $

    sudo node . $ curl \ --insecure \ -X GET \ https://localhost/v1.0/contact Testando com curl
  29. Globalcode – Open4education Logs Quantos acessos tem a sua API?

    Quem acessa? Que tal implementar os logs de acesso para podermos conferir?
  30. Globalcode – Open4education Logs Quantidade de acessos geral por IP

    cat log/log.txt | awk '{print $1}' | sort | uniq -c 166 ::1 46 ::ffff:127.0.0.1 8 ::ffff:192.168.0.11 Resultado
  31. Globalcode – Open4education Logs Quantidade de acessos geral por dia

    cat log/log.txt | awk '{print $4,$5,$6,$7}' | sort | uniq -c 8 [Mon, 24 Apr 2017 174 [Sun, 23 Apr 2017 22 [Tue, 02 May 2017 16 [Wed, 03 May 2017 Resultado
  32. Globalcode – Open4education Logs Status HTTP geral das requisições cat

    log/log.txt | awk '{print $13}' | sort | uniq -c 171 200 23 201 9 400 9 401 7 404 1 500 Resultado
  33. Globalcode – Open4education Documentação Você terminou a API e agora

    precisa montar aquela documentação para o cliente. Como fazer? Word Arquivo texto Isso parece um pouco amador. Será que existe uma maneira elegante de criar documentação de API? Tem sim, você pode utilizar APIDOC
  34. Globalcode – Open4education Documentação As coisas não acontecem automaticamente, precisaremos

    de fato documentar a API Como utilizar o APIDOC http://apidocjs.com
  35. Globalcode – Open4education Documentação Crie uma pasta para gerar a

    documentação. Neste caso, vou utilizar a pasta doc na raiz do projeto. Depois, você pode gerar a documentação. $ ./node_modules/apidoc/bin/apidoc -i src/ -o doc/
  36. Globalcode – Open4education Demo Vamos conferir um exemplo desta API

    implementada com Node.js e MongoDB https://github.com/ionixjunior/nodejs-contact-rest- api