API - Documentação e Guia de Uso
A API do FinBoost+ oferece uma interface RESTful moderna com documentação interativa via Scalar, proporcionando uma experiência superior para explorar, testar e integrar com todos os endpoints disponíveis.
Acesso Rápido
URLs Principais
# Backend Local
http://localhost:8080/api
# Documentação Interativa (Scalar)
http://localhost:8080/docs/scalar
# Swagger UI Alternativo
http://localhost:8080/swagger-ui.html
# OpenAPI Spec
http://localhost:8080/v3/api-docs
Autenticação
Todas as rotas protegidas requerem JWT Token no header:
Quick Start - 3 Passos
1. Obter Token de Acesso
# Login
curl -X POST http://localhost:8080/api/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "admin@finboost.com",
"password": "admin123"
}'
Resposta:
{
"success": true,
"data": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"user": { "id": 1, "name": "Admin User" }
}
}
2. Testar na Interface Scalar
- Acesse: http://localhost:8080/docs/scalar
- Clique em "Authorize" no topo
- Cole:
Bearer SEU_TOKEN_AQUI
- Teste qualquer endpoint com "Try it out"
3. Fluxo Básico de Teste
# 1. Listar grupos
GET /api/groups
# 2. Criar grupo
POST /api/groups
{
"name": "Viagem de Férias",
"description": "Despesas da praia"
}
# 3. Adicionar despesa
POST /api/groups/{id}/expenses
{
"title": "Combustível",
"amount": 200.50,
"category": "Transporte",
"splitBetween": [1, 2, 3]
}
Principais Endpoints
Autenticação
POST /auth/register # Registrar usuário
POST /auth/login # Fazer login
POST /auth/refresh # Renovar token
Grupos e Despesas
GET /groups # Listar grupos
POST /groups # Criar grupo
GET /groups/{id} # Detalhes do grupo
GET /groups/{id}/expenses # Despesas do grupo
POST /groups/{id}/expenses # Criar despesa
Dashboard
Documentação Interativa - Scalar
Por que Scalar?
graph LR
subgraph "Vantagens do Scalar"
A[Design Moderno]
B[Busca Global Ctrl+K]
C[Dark Mode Nativo]
D[Mobile Friendly]
E[Performance Superior]
end
subgraph "Developer Experience"
F[Exemplos Interativos]
G[Auto-sync com Código]
H[Copy/Paste Fácil]
I[Teste Inline]
end
A --> F
B --> G
C --> H
D --> I
E --> I
Recursos Principais
Busca Global - Ctrl+K
- Encontrar endpoints por nome ou método
- Buscar parâmetros específicos
- Filtrar por tags
Try It Out
- Testar requisições diretamente na interface
- Editar parâmetros em tempo real
- Copiar comandos cURL automaticamente
Code Generation
- JavaScript/TypeScript
- Python
- cURL
- Múltiplas linguagens
Estruturas de Dados Principais
UserDTO
GroupDTO
{
"id": 1,
"name": "string",
"description": "string",
"ownerId": 1,
"memberCount": 3,
"totalExpenses": 1250.75,
"createdAt": "2024-08-20T10:00:00Z"
}
ExpenseDTO
{
"id": 1,
"title": "string",
"amount": 150.50,
"category": "Transporte",
"paidBy": { "id": 1, "name": "João" },
"splitBetween": [1, 2, 3],
"date": "2024-08-20",
"createdAt": "2024-08-20T10:00:00Z"
}
Validações e Regras
Campos Obrigatórios
Usuário
name
: 2-100 caracteresemail
: formato válido e únicopassword
: mínimo 6 caracteres
Grupo
name
: 2-100 caracteresdescription
: máximo 500 caracteres (opcional)
Despesa
title
: 2-200 caracteresamount
: valor positivocategory
: uma das categorias válidassplitBetween
: array com IDs de membros válidos
Categorias Válidas
Formato de Respostas
Sucesso
{
"success": true,
"message": "Operação realizada com sucesso",
"data": { /* dados da resposta */ },
"timestamp": "2024-08-20T10:00:00Z"
}
Erro
{
"success": false,
"error": "Validation failed",
"details": {
"field": "email",
"message": "Email inválido"
},
"timestamp": "2024-08-20T10:00:00Z"
}
Paginação
{
"success": true,
"data": {
"content": [/* array de itens */],
"pagination": {
"page": 1,
"size": 10,
"totalElements": 25,
"totalPages": 3
}
}
}
Códigos de Status
Código | Significado | Uso |
---|---|---|
200 |
OK | Operação bem-sucedida |
201 |
Created | Recurso criado |
400 |
Bad Request | Dados inválidos |
401 |
Unauthorized | Token ausente/inválido |
403 |
Forbidden | Sem permissão |
404 |
Not Found | Recurso não encontrado |
422 |
Validation Error | Erro de validação |
500 |
Server Error | Erro interno |
Integração Frontend
JavaScript/React
const API_BASE_URL = 'http://localhost:8080/api'
const apiCall = async (endpoint, options = {}) => {
const token = localStorage.getItem('authToken')
const response = await fetch(`${API_BASE_URL}${endpoint}`, {
headers: {
'Content-Type': 'application/json',
...(token && { Authorization: `Bearer ${token}` })
},
...options
})
const data = await response.json()
if (!response.ok) throw new Error(data.error)
return data
}
// Hook personalizado para React
export const useApi = (endpoint, dependencies = []) => {
const [data, setData] = useState(null)
const [loading, setLoading] = useState(true)
const [error, setError] = useState(null)
useEffect(() => {
apiCall(endpoint)
.then(result => setData(result.data))
.catch(err => setError(err.message))
.finally(() => setLoading(false))
}, dependencies)
return { data, loading, error }
}
Geração de Cliente TypeScript
# Instalar gerador
npm install @openapitools/openapi-generator-cli
# Gerar cliente
npx openapi-generator-cli generate \
-i http://localhost:8080/v3/api-docs \
-g typescript-fetch \
-o src/generated-api
Configuração Técnica
Dependências Maven
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.7.0</version>
</dependency>
Configuração Spring
@OpenAPIDefinition(
info = @Info(
title = "FinBoost+ API",
version = "1.0.0",
description = "API para controle financeiro compartilhado"
)
)
@Configuration
public class OpenApiConfig {
@Bean
public OpenAPI customOpenAPI() {
return new OpenAPI()
.components(new Components()
.addSecuritySchemes("bearer-jwt",
new SecurityScheme()
.type(SecurityScheme.Type.HTTP)
.scheme("bearer")
.bearerFormat("JWT")
)
);
}
}
Troubleshooting
Problemas Comuns
"Failed to fetch" no Try it out
Token Expirado (401)
# Renovar token
curl -X POST http://localhost:8080/api/auth/refresh \
-H "Authorization: Bearer SEU_REFRESH_TOKEN"
Erro de validação (422)
- Verificar campos obrigatórios
- Confirmar formatos (email, datas, etc.)
Health Check
Rate Limiting
- Endpoints públicos: 100 req/hora por IP
- Endpoints autenticados: 1000 req/hora por usuário
- Headers de resposta:
X-RateLimit-*
Links Relacionados
- Arquitetura - Visão geral do sistema
- Backend README - Setup local
- Frontend README - Integração
Documentação Sempre Atualizada
A documentação Scalar é gerada automaticamente do código fonte. Sempre que a API é atualizada, a documentação reflete as mudanças imediatamente.