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

Angular SP - API REST em Node.js: Boas práticas...

Angular SP - API REST em Node.js: Boas práticas em produção

Rodrigo Kamada

October 25, 2022
Tweet

More Decks by Rodrigo Kamada

Other Decks in Technology

Transcript

  1. • Especialista em Tecnologia na Zenvia • AWS Community Builder

    - Front-End Web & Mobile • Auth0 Ambassador • Criador de conteúdo técnico • Contribuidor de código aberto • Natural de Tupã • Formado em Ciência da Computação • Casado, 1 filha, 1 filho e 1 cachorrinha Apresentação
  2. • Application Programming Interface (ou Interface de Programação de Aplicações)

    • Conjunto de rotinas e padrões estabelecidos por um software para a utilização de suas funcionalidades. • API pode ser um sistema WEB, sistema operacional, banco de dados, hardware ou biblioteca de software. • Conceito API First. • API WEB: ◦ Protocolo: HTTP ◦ Formatos: JSON ou XML ◦ Padrões: REST, SOAP, GraphQL ou gRPC O que é API?
  3. • Representational State Transfer (ou Transferência Representacional de Estado). •

    Protocolo de comunicação HTTP. • Ação indicada no método HTTP. • Endpoint representado por substantivos no plural que representam a entidade. • Verbos correspondem às operações CRUD. • JSON é o formato padrão para envio e recebimento dos dados. • Códigos de status HTTP para definir o resultado da ação. • Controle de versão. • Filtro, ordenação, paginação e limite. REST: Conceitos, fundamentos e padrões
  4. • Adote Endpoints • Evite GET /books ou /books/:id POST

    /books PUT /books/:id PATCH /books/:id DELETE /books/:id GET /get-books GET /book
  5. • Adote JSON (JavaScript Object Notation) • Evite POST /v2/books

    { "title": "Some Title 1", "author": "Some Author 1" } { "id": "4e38aa8e-5466-11ed-ba22-73073584cbaf", "title": "Some Title 1", "author": "Some Author 1" } POST /books/v2 { "title": "Some Title 2", "author": "Some Author 2" } { "success": true }
  6. • 200: Sucesso no geral • 201: Sucesso na criação

    • 400: Requisição inválida • 401: Requisição não autorizada • 403: Requisição sem permissão • 404: Endpoint não existe • 429: Muitas requisições • 500: Erro interno Códigos de status HTTP
  7. • Filtro Filtro, ordenação, paginação e limite • Ordenação ?title=SomeTitle

    ?sort=+title ?sort=+title,-author • Paginação ?page=1 • Limite ?limit=100
  8. • API Keys Autenticação • OAuth x-api-key: abc123... ou x-api-token:

    abc123... ◦ JWT (JSON WEB Token) ◦ Perfil ◦ Permissão ◦ Expiração • Basic authentication ◦ Usuário e senha codificado em Base64
  9. • SSL (Secure Sockets Layer)/TLS (Transport Layer Security) • CORS

    (Cross-Origin Resource Sharing). Biblioteca: cors Access-Control-Allow-Origin: Informa as origens permitidas. Access-Control-Allow-Methods: Informa os métodos HTTP permitidos. Access-Control-Allow-Headers: Informa os cabeçalhos HTTP permitidos. • Cabeçalhos HTTP. Biblioteca: helmet Content-Security-Policy: Evita ataques de cross-site scripting. Strict-Transport-Security: Informa do navegador para preferir o uso do HTTPS. X-Frame-Options: Evita ataques de clickjacking. X-Powered-By: Remove esse cabeçalho que retorna informações do servidor. Segurança
  10. • Swagger → OpenAPI • OpenAPI Specification (OAS): Define um

    padrão para APIs REST independente da linguagem de programação. • Referências: ◦ https://www.openapis.org/ ◦ https://swagger.io/ • Biblioteca: tsoa e swagger-ui-express Documentação
  11. • Ambiente de execução de JavaScript assíncrono orientado a eventos.

    • Single thread (event loop). • Construído sobre o motor JavaScript V8 do Google Chrome. • JavaScript no servidor. • npm (Node Package Manager): Gerenciador de pacotes. • Multiplataforma (Linux, Mac OS, Windows, entre outras). • Frameworks WEB: Express.js, Nest.js, Koa.js, Hapi.js, entre outros. • Empresas que usam: Netflix, Twitter, Uber, LinkedIn e Zenvia. Node.js
  12. • Organização das variáveis de configuração por ambiente usando a

    variável NODE_ENV. • Biblioteca: config Configuração
  13. • Registro de eventos de uma aplicação • Observabilidade •

    Análise • Bibliotecas: winston e express-winston Log
  14. • GitHub: https://github.com/zenvia/zenvia-openapi-spec/ • OpenAPI: https://zenvia.github.io/zenvia-openapi-spec/ • SDK: https://www.npmjs.com/package/@zenvia/sdk •

    Sandbox: https://app.zenvia.com/sandbox Zenvia • Exemplo de envio de uma mensagem do canal SMS POST https://api.zenvia.com/v2/channels/sms/messages x-api-token: hKp94crjv9OF3UGrCpSX1Jw1-UYHhRvLaNLt { "from": "5510999999999", "to": "55108888888888", "contents": [ { "type": "text", "text": "Hi Zenvia!" } ] }