Uso da API - Guia para Integradores
Endpoints atuais:
POST /api/auth/signin(local) ePOST /api/auth/external-login(IdP). Ver autenticacao.md.
Este guia explica como usar a API do ecosif-auth para autenticação e operações administrativas.
Autenticação
Todos os endpoints protegidos requerem autenticação via token JWT no header:
Authorization: Bearer <seu-token-jwt>
Veja Autenticação para obter um token.
Endpoints Disponíveis
Autenticação
POST /api/auth/signin
Autentica um usuário e retorna token JWT.
Autenticação: Não requerida
Métodos suportados: - Autenticação local (username/password) - Autenticação Azure AD (username apenas)
Exemplo:
curl -X POST http://localhost:8080/api/auth/signin \
-H "Content-Type: application/json" \
-d '{
"username": "usuario@exemplo.com",
"password": "senha123",
"azure": false
}'
Veja Autenticação para mais detalhes.
POST /api/auth/external-login
Login externo (Microsoft/Google). Envie o id_token obtido no browser.
Autenticação: Não requerida
Exemplo:
curl -X POST http://localhost:8080/api/auth/external-login \
-H "Content-Type: application/json" \
-d '{
"provider": "AZURE",
"token": "<id_token>",
"tokenType": "ID_TOKEN"
}'
Veja Autenticação para mais detalhes.
Administrativos
GET /api/admin/docker-logs
Obtém logs de um container Docker.
Autenticação: Requerida (Bearer Token)
Parâmetros:
- service (query, obrigatório): Nome do serviço
- lines (query, opcional): Número de linhas (padrão: 100, máximo: 1000)
Serviços disponíveis:
- ecosif-auth
- ecosif-masterdata
- ecosif-moviments
- ecosif-querys
- ecosif-reports
- ecosif-compliance
- ecosif-angular
- nginx
- postgres
Exemplo:
TOKEN="seu-token-jwt"
curl -X GET "http://localhost:8080/api/admin/docker-logs?service=ecosif-auth&lines=100" \
-H "Authorization: Bearer $TOKEN"
Resposta:
{
"service": "ecosif-auth",
"containerName": "ecosif-auth",
"lines": 100,
"logs": "2024-01-01 10:00:00.000 INFO [main] Application started...\n..."
}
GET /api/admin/docker-logs/services
Lista serviços disponíveis para visualização de logs.
Autenticação: Requerida (Bearer Token)
Exemplo:
TOKEN="seu-token-jwt"
curl -X GET "http://localhost:8080/api/admin/docker-logs/services" \
-H "Authorization: Bearer $TOKEN"
Resposta:
{
"services": [
"ecosif-auth",
"ecosif-masterdata",
"ecosif-moviments",
"ecosif-querys",
"ecosif-reports",
"ecosif-compliance",
"ecosif-angular",
"nginx",
"postgres"
],
"serviceToContainer": {
"ecosif-auth": "ecosif-auth",
"postgres": "ecosif-postgres"
}
}
Monitoramento
GET /actuator/health
Health check da aplicação.
Autenticação: Não requerida
Exemplo:
curl http://localhost:8080/actuator/health
Resposta:
{
"status": "UP",
"components": {
"db": {
"status": "UP"
}
}
}
GET /actuator/info
Informações da aplicação.
Autenticação: Não requerida
GET /actuator/prometheus
Métricas Prometheus.
Autenticação: Não requerida
Documentação
GET /swagger-ui.html
Interface Swagger UI para testes interativos.
Autenticação: Não requerida
Acesso: Abra no navegador: http://localhost:8080/swagger-ui.html
GET /v3/api-docs
Especificação OpenAPI 3.0 em formato JSON.
Autenticação: Não requerida
Exemplo:
curl http://localhost:8080/v3/api-docs
Formato de Requisições
Content-Type
Todas as requisições POST devem usar:
Content-Type: application/json
Body JSON
Exemplo de body para requisições POST:
{
"campo1": "valor1",
"campo2": "valor2"
}
Formato de Respostas
Sucesso (200 OK)
{
"accessToken": "eyJhbGciOiJIUzI1NiJ9...",
"user": {
"id": "1",
"displayName": "João Silva",
"email": "joao.silva@exemplo.com",
"roles": ["ADMIN"],
"tenant": "empresa-exemplo"
},
"tenantName": "empresa-exemplo"
}
Erro (400/401/404/500)
{
"success": false,
"message": "Mensagem de erro descritiva"
}
Códigos de Status HTTP
| Código | Significado | Quando Ocorre |
|---|---|---|
| 200 | OK | Requisição bem-sucedida |
| 201 | Created | Recurso criado com sucesso |
| 400 | Bad Request | Dados inválidos ou incompletos |
| 401 | Unauthorized | Não autenticado ou credenciais inválidas |
| 403 | Forbidden | Não autorizado |
| 404 | Not Found | Recurso não encontrado |
| 500 | Internal Server Error | Erro interno do servidor |
Tratamento de Erros
Erro 401 (Unauthorized)
Token inválido ou expirado:
if (response.status === 401) {
// Fazer login novamente
const loginResponse = await fazerLogin();
// Tentar requisição novamente com novo token
}
Erro 400 (Bad Request)
Dados inválidos:
if (response.status === 400) {
const error = await response.json();
console.error('Erro:', error.message);
// Exibir mensagem para o usuário
}
Erro 500 (Internal Server Error)
Erro do servidor:
if (response.status === 500) {
// Log do erro e notificar administrador
console.error('Erro interno do servidor');
}
Rate Limiting
Atualmente, não há rate limiting implementado. Em produção, considere implementar no lado do cliente.
Timeouts
Configure timeouts apropriados nas requisições:
const controller = new AbortController();
const timeoutId = setTimeout(() => controller.abort(), 5000); // 5 segundos
fetch(url, {
signal: controller.signal
})
.then(response => {
clearTimeout(timeoutId);
return response.json();
});
Retry Logic
Para operações críticas, implemente retry logic:
async function fazerRequisicaoComRetry(url, options, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
try {
const response = await fetch(url, options);
if (response.ok) {
return await response.json();
}
if (response.status === 401) {
// Token expirado, fazer login novamente
await renovarToken();
options.headers.Authorization = `Bearer ${novoToken}`;
continue;
}
} catch (error) {
if (i === maxRetries - 1) throw error;
await new Promise(resolve => setTimeout(resolve, 1000 * (i + 1)));
}
}
}
Versão da API
Versão atual: 0.7.01.202511271
A API segue versionamento semântico. Mudanças que quebram compatibilidade serão sinalizadas.
Próximos Passos
- Exemplos: Veja exemplos completos
- Erros Comuns: Resolva problemas frequentes
- Autenticação: Aprenda mais sobre autenticação