1 / 11
Modulo 7 / APIs REST

Documentação e Testes

Documentando APIs e testando com Postman, Thunder Client e scripts.

school Aula 34 schedule 2 horas

Importancia

Por que documentar?

groups Para o time

Outros devs precisam entender como usar a API sem ler o codigo fonte.

handshake Para parceiros

Integradores externos dependem da documentacao para conectar seus sistemas.

psychology Para voce

Documentar ajuda a encontrar inconsistencias e pensar melhor na API.

Uma boa documentacao inclui: endpoints, metodos, parametros, body esperado, formatos de resposta, codigos de status e exemplos.

Manual

Documentacao no README

description Exemplo de README.md

# API de Produtos ## Autenticacao Todas as rotas de escrita precisam do header: Authorization: Bearer <token> ## Endpoints ### POST /api/auth/registrar Body: { "nome": "string", "email": "string", "senha": "string" } Resposta: 201 { "token": "..." } ### GET /api/produtos Query params: ?categoria=X&pagina=1&limite=10&ordem=preco Resposta: 200 { "produtos": [...], "total": 47, "pagina": 1, "paginas": 5 } ### POST /api/produtos (requer auth) Body: { "nome": "string", "preco": number, "categoria": "enum" } Resposta: 201 { produto criado } ### PUT /api/produtos/:id (requer auth) Resposta: 200 { produto atualizado } ### DELETE /api/produtos/:id (requer auth) Resposta: 204 (sem body)

Automatizado

Swagger / OpenAPI

O que e?

  • Padrao aberto para descrever APIs REST
  • Gera documentacao interativa automaticamente
  • Interface visual para testar endpoints
  • Usado por empresas como Google, Microsoft, Stripe

Instalacao no Express

$ npm install swagger-ui-express swagger-jsdoc // No index.js const swaggerUi = require('swagger-ui-express'); const swaggerJsdoc = require('swagger-jsdoc'); const specs = swaggerJsdoc({ definition: { openapi: '3.0.0', info: { title: 'API Produtos', version: '1.0.0' } }, apis: ['./routes/*.js'] }); app.use('/docs', swaggerUi.serve, swaggerUi.setup(specs) );

Swagger

Anotacoes JSDoc

code routes/produtoRoutes.js

/** * @swagger * /api/produtos: * get: * summary: Lista todos os produtos * tags: [Produtos] * parameters: * - in: query * name: categoria * schema: * type: string * description: Filtrar por categoria * - in: query * name: pagina * schema: * type: integer * default: 1 * responses: * 200: * description: Lista de produtos * post: * summary: Cria um novo produto * tags: [Produtos] * security: * - bearerAuth: [] * requestBody: * required: true * content: * application/json: * schema: * type: object * required: [nome, preco, categoria] * properties: * nome: * type: string * preco: * type: number * categoria: * type: string * enum: [Eletronicos, Roupas, Alimentos, Livros, Outros] * responses: * 201: * description: Produto criado * 401: * description: Nao autorizado */

Ferramentas

Testando com Postman

science O que e o Postman?

  • Ferramenta gratuita para testar APIs
  • Interface visual para montar requests
  • Organiza requests em colecoes
  • Variaveis de ambiente (URL base, token)
  • Historico de chamadas

electric_bolt Thunder Client (VS Code)

  • Extensao leve integrada ao VS Code
  • Mesma funcionalidade basica do Postman
  • Sem necessidade de sair do editor
  • Colecoes, variaveis de ambiente
  • Ideal para desenvolvimento rapido

Organizacao

Collections e variaveis

Estrutura de colecao

API Produtos/ Auth/ POST Registrar POST Login Produtos/ GET Listar todos GET Buscar por ID POST Criar produto PUT Atualizar produto DELETE Remover produto

Variaveis de ambiente

// Definir variaveis base_url = http://localhost:3000 token = (preenchido apos login) // Usar nas requests URL: {{base_url}}/api/produtos Auth: Bearer {{token}} // Script pos-login (Postman) const data = pm.response.json(); pm.environment.set( "token", data.token );

Testes

Testes automatizados

Postman Tests (assertions)

// Na aba "Tests" do Postman pm.test("Status 200", () => { pm.response.to.have.status(200); }); pm.test("Retorna array", () => { const data = pm.response.json(); pm.expect(data.produtos) .to.be.an('array'); }); pm.test("Tem paginacao", () => { const data = pm.response.json(); pm.expect(data) .to.have.property('total'); pm.expect(data) .to.have.property('paginas'); });

Fluxo de testes

1. POST /auth/registrar (criar usuario)
2. POST /auth/login (pegar token)
3. POST /produtos (criar com token)
4. GET /produtos (verificar listagem)
5. PUT /produtos/:id (atualizar)
6. DELETE /produtos/:id (remover)
7. GET /produtos/:id (confirmar 404)

Boas praticas

Checklist de qualidade

Documentacao

  • URL base e versao da API
  • Todos os endpoints com metodo e URL
  • Parametros obrigatorios e opcionais
  • Formato do body (JSON com tipos)
  • Status codes possiveis
  • Exemplos de request e response
  • Como autenticar

Testes

  • Testar todos os endpoints (happy path)
  • Testar erros (404, 400, 401)
  • Testar com e sem autenticacao
  • Testar validacoes (body invalido)
  • Testar paginacao e filtros
  • Verificar formato das respostas
  • Testar idempotencia (PUT, DELETE)

Hora de praticar

Exercicio pratico

description Documentar e testar a API de Produtos

  1. Crie um README.md completo documentando toda a API
  2. Instale swagger-ui-express e swagger-jsdoc
  3. Adicione as anotacoes @swagger nas rotas
  4. Acesse /docs e veja a documentacao interativa
  5. Crie uma colecao no Postman/Thunder Client com todos os endpoints
  6. Adicione testes automatizados em cada request
lightbulb Desafio: exporte a colecao do Postman como JSON e adicione ao repositorio do projeto.
Modulo 7 concluido

Aula 35

Introducao a seguranca web (OWASP, XSS, CSRF).

task_alt O que aprendemos hoje

  • check_circlePor que documentar APIs
  • check_circleDocumentacao manual no README
  • check_circleSwagger/OpenAPI com swagger-jsdoc
  • check_circlePostman e Thunder Client para testes
  • check_circleColecoes, variaveis e testes automatizados
Proxima aula
auto_stories Referencia: OpenAPI Specification
Leandro Medeiros