Slide 1

Slide 1 text

API REST em Node.js Boas práticas em produção

Slide 2

Slide 2 text

● 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

Slide 3

Slide 3 text

● 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?

Slide 4

Slide 4 text

● 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

Slide 5

Slide 5 text

● Adote Endpoints ● Evite GET /books ou /books/:id POST /books PUT /books/:id PATCH /books/:id DELETE /books/:id GET /get-books GET /book

Slide 6

Slide 6 text

● 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 }

Slide 7

Slide 7 text

● 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

Slide 8

Slide 8 text

● Endpoint Controle de versão ● Parâmetro GET /v2/books ?version=v2 ● Cabeçalho HTTP x-version: v2

Slide 9

Slide 9 text

● Filtro Filtro, ordenação, paginação e limite ● Ordenação ?title=SomeTitle ?sort=+title ?sort=+title,-author ● Paginação ?page=1 ● Limite ?limit=100

Slide 10

Slide 10 text

● 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

Slide 11

Slide 11 text

● 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

Slide 12

Slide 12 text

● 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

Slide 13

Slide 13 text

● 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

Slide 14

Slide 14 text

● Organização das variáveis de configuração por ambiente usando a variável NODE_ENV. ● Biblioteca: config Configuração

Slide 15

Slide 15 text

● Registro de eventos de uma aplicação ● Observabilidade ● Análise ● Bibliotecas: winston e express-winston Log

Slide 16

Slide 16 text

● Identificação de problemas. ● Redução de falhas. ● Qualidade. ● Biblioteca: jest Testes

Slide 17

Slide 17 text

● 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!" } ] }

Slide 18

Slide 18 text

● Vamos lá! ● https://github.com/rodrigokamada/angularsp-202210 Mão na massa

Slide 19

Slide 19 text

Obrigado! rodrigo@kamada.com.br https://rodrigo.kamada.com.br https://www.linkedin.com/in/rodrigokamada https://twitter.com/rodrigokamada https://github.com/rodrigokamada