📖 Descrição
Endpoint de Server-Sent Events (SSE) que transmite os preços atuais (ask/bid) de cada criptomoeda configurada no Looker, uma vez por segundo. Os preços são lidos diretamente doRealtimePriceCache, que é alimentado em tempo real pelos handlers WebSocket das exchanges.
Os preços dependem do fluxo WebSocket estar habilitado (
ENABLED_WEBSOCKET=1). Exchanges não cobertas por WebSocket retornarão eventos com stale: true.🛠️ Requisição
Método
GET
URL
Parâmetros de Caminho
Headers Necessários
Exemplo de Requisição (curl)
Exemplo de Requisição (JavaScript)
📤 Resposta
Headers da Resposta
Frequência de Emissão
A cada 1 segundo, são emitidos N eventos — um por cripto configurada no Looker (máximo 6). Todos os eventos do mesmo ciclo são seguidos de umFlush() para entrega atômica.
Formato dos Eventos SSE
Estrutura do Payload JSON
Campos do Payload
📝 Códigos de Resposta
200 OK +
Content-Type: text/event-stream: Stream aberto com sucesso. A conexão permanece aberta até o cliente fechar.400 Bad Request:
id parameter is required — Parâmetro id não informado na URL.404 Not Found:
looker not found — Looker com o ID fornecido não existe no banco.500 Internal Server Error:
SSE not supported by this server ou Failed to load looker.💡 Integração no Frontend (hook React)
O projeto já fornece o hookuseLookerStream em src/hooks/useLookerStream.js:
Retorno do Hook
⚠️ Considerações
Quando
stale: true, exiba um indicador visual (ícone de aviso, cor diferente) ao usuário para indicar que o dado pode estar desatualizado. O campo é true quando o último tick recebido pelo WebSocket foi há mais de 10 segundos.Exchanges como Mercado Bitcoin e Novadax não possuem WebSocket público. Para cryptos monitoradas nessas exchanges, todos os eventos terão
stale: true. Uma melhoria futura pode adicionar fallback REST com polling de 5s para essas exchanges.A conexão SSE é mantida até o cliente desconectar (navegação, fechamento de aba). O servidor detecta a desconexão via
r.Context().Done() e encerra a goroutine imediatamente, sem leak de recursos.