🌐 Atividade 14: Modelagem de APIs REST e Swagger
🎯 Objetivo da Aula
Ao final desta atividade, você será capaz de:
- Mapear recursos de sistemas no formato e boas práticas de APIs REST.
- Utilizar os Verbos HTTP (GET, POST, PUT, DELETE) e os Códigos de Retorno (Status Codes) corretos.
- Escrever payloads estruturados em formato JSON (JavaScript Object Notation).
- Interpretar e projetar documentações no padrão Swagger/OpenAPI.
🏢 O Cenário Prático (Seu Desafio)
Na TecProExpress, os motoristas que usam o aplicativo Android precisam enviar em tempo real a geolocalização do caminhão para o painel de controle do SAC. Além disso, o app precisa buscar a lista de entregas pendentes direto do servidor central. No entanto, os desenvolvedores Mobile e os programadores de Backend não combinaram o "formato de dados" e a comunicação travou!
O app móvel mandava POST /api/enviar_localizacao e o servidor dava erro de conexão porque esperava receber um formato diferente do JSON enviado pelo celular!
"Seu desafio como Designer de APIs é desenhar o contrato profissional de endpoints para a TecProExpress. Você criará a modelagem de recursos RESTful para
/api/entregase/api/motoristas/localizacao, definindo os verbos corretos, os dados em formato JSON e gerando a especificação profissional baseada em Swagger/OpenAPI."
🧠 Fundamentos: A Teoria Traduzida
Uma API (Application Programming Interface) é uma porta que permite que sistemas diferentes conversem de forma organizada. REST é o estilo arquitetural padrão da web.
Regras de Ouro do Design REST:
- Recursos são Substantivos no Plural: Evite verbos no endereço!
- Errado:
POST /api/salvarMotorista - Certo:
POST /api/motoristas
- Errado:
- Use os Verbos HTTP Adequados:
GET: Busca um ou vários registros (Ex:GET /api/entregas).POST: Cria um novo registro (Ex:POST /api/entregas).PUT: Atualiza o registro inteiro por completo.DELETE: Exclui um registro da base de dados.
- Comunique-se por Status Codes:
200 OK: Requisição de consulta ou alteração com sucesso.201 Created: Novo registro criado com sucesso (retorno típico de POST).400 Bad Request: Envio de dados incorretos ou campos faltantes.404 Not Found: O registro ou endpoint consultado não existe.500 Internal Server Error: Falha técnica no servidor (bug).
📊 Visualizando a Comunicação HTTP
📖 Exemplo Guiado: Especificação Swagger e Spring Boot
Abaixo, veja como expor e documentar um endpoint de criação de entrega.
🛠️ Código Java 17 no Spring Boot (O Controller REST):
@RestController
@RequestMapping("/api/entregas")
@Tag(name = "Entregas", description = "Gerenciamento de entregas da TecProExpress")
public class DeliveryRestController {
@Autowired
private DeliveryService service;
@PostMapping
@Operation(summary = "Criar nova entrega", description = "Cria uma entrega no banco de dados e aguarda motorista")
public ResponseEntity<DeliveryResponse> criarEntrega(@RequestBody DeliveryRequest request) {
DeliveryResponse response = service.criar(request);
return ResponseEntity.status(HttpStatus.CREATED).body(response);
}
}
📄 O Contrato JSON enviado pelo App Mobile (Payload):
{
"clienteId": 45,
"enderecoDestino": "Av. Paulista, 1000 - São Paulo, SP",
"pesoCarga": 12.5,
"tipoNotificacao": "SMS"
}
📄 Documentação Swagger (OpenAPI YAML) correspondente:
openapi: 3.0.3
info:
title: API TecProExpress
version: 1.0.0
paths:
/api/entregas:
post:
summary: Criar nova entrega
tags:
- Entregas
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- clienteId
- enderecoDestino
properties:
clienteId:
type: integer
enderecoDestino:
type: string
pesoCarga:
type: number
responses:
'201':
description: Criado com sucesso
🛠️ Prática Obrigatória 1: Tabela de Endpoints da API
Cenário: O projeto semestral da sua equipe.
- Mapeie 3 endpoints críticos que o seu sistema precisará expor para um aplicativo celular ou sistema parceiro.
- Organize-os em uma tabela contendo: Verbo HTTP, Caminho (URL), O que faz (Descrição) e Status Code de Sucesso (ex: 200, 201).
🏁 Resultado Esperado (Para sua Referência)
Uma tabela com o roteiro de comunicação REST detalhando as requisições principais de forma limpa e seguindo as boas práticas.
🛠️ Prática Obrigatória 2: O Payload JSON e Contrato Swagger
Cenário: Detalhando os dados de tráfego.
- Para o endpoint principal de inserção de dados da Prática 1 (Ex: criar agendamento, realizar venda), escreva o payload em formato JSON real que o cliente enviará.
- Escreva a especificação profissional simplificada no padrão Swagger/OpenAPI (formato YAML) que descreve esse endpoint e o corpo da requisição de forma estruturada.
📤 Instruções de Entrega (Microsoft Teams)
Após validar o seu design de API:
- Salve o arquivo contendo a tabela de endpoints, o JSON e a especificação Swagger YAML com o nome
Atividade_14.mdna pastaes-atv-14-apis-swagger/do seu repositório GitHub. - Certifique-se de fazer o commit e push para o repositório público.
- Submeta o link do seu repositório no Microsoft Teams para avaliação do professor.
💡 Checkpoint de Lógica
GET /api/entregas/excluir?id=5) em vez do correto DELETE (ex: DELETE /api/entregas/5)? (Resposta: Pela natureza idempotente e segura dos verbos HTTP. Navegadores e proxies de cache assumem que requisições GET são seguras e não causam efeitos colaterais. Se você usar GET para excluir, um robô de busca de indexação automática da internet ao varrer os links do seu sistema poderia, acidentalmente, apagar o banco de dados inteiro da empresa!). 🧠🛡️📊 Rubrica Formativa de Avaliação
| Critério de Avaliação | Insuficiente (0% - 40%) | Regular (41% - 70%) | Excelente (71% - 100%) |
|---|---|---|---|
| Design de Endpoints REST & Verbos HTTP | Usa verbos incorretos (ex: GET para exclusão) ou URLs fora do padrão RESTful. | Mapeia os 3 endpoints mas omite códigos de status de resposta (Status Codes). | Tabela de endpoints impecável com verbos HTTP semânticos (GET, POST, PUT, DELETE) e Status Codes corretos (200, 201, 204). |
| Payload JSON & Especificação Swagger OpenAPI YAML | Erros na sintaxe JSON ou formato YAML desalinhado. | Escreve o JSON mas omite a especificação Swagger YAML. | Payload JSON de requisição perfeito e contrato OpenAPI 3.0 YAML completamente válido. |
| Entrega no GitHub | Entrega fora da pasta `es-atv-14-apis-swagger/`. | Arquivo entregue mas com formatação YAML quebrada. | Submete `Atividade_14.md` com formatação limpa e blocos de código formatados no repositório. |
🏗️ Atividade 13: Arquitetura de Software e Padrões
Bem-vindo a mais uma etapa do seu desenvolvimento técnico! Agora que você domina a modelagem de processos e dados, daremos o passo mais importante para quem quer se tornar um desenvolvedor sênior ou gestor técnico: projetar a arquitetura interna do software. Hoje, aprenderemos a organizar sistemas profissionais em camadas usando o padrão MVC (Model-View-Controller) corporativo com Java 17, Spring Boot 3.5.x, Thymeleaf e HTMX, além de aplicar o padrão de projeto criacional Factory. 🛡️🧩
🌿 Atividade 15: GitFlow e Trabalho Colaborativo
Bem-vindo a mais uma etapa prática de Engenharia de Software! Até agora, você criou especificações e diagramas. Mas na vida real de desenvolvimento corporativo, as equipes trabalham juntas em uma base de código única. Como fazer para que 10 programadores editem o mesmo arquivo do Spring Boot ao mesmo tempo sem que um apague a alteração do outro? Hoje, aprenderemos a dominar o controle de versão profissional usando o Git e a metodologia estratégica GitFlow. 🛡️🧩