Assinatura GraphQL (WebSocket)
Esta página explica como conectar ao WebSocket da API GraphQL de Recompensas para atualizações em tempo real
A API GraphQL de Recompensas fornece uma única assinatura WebSocket (StatusUpdate) que entrega notificações em tempo real para:
- Mudanças de XP e nível
- Atualizações de saldo de moeda virtual
- Concessões e uso de tokens da roda
- Progresso e conclusão de desafios
- Prêmios bônus
Todas as atualizações têm escopo de usuário e requerem autenticação.
Configuração da Conexão
Endpoint
Protocolo
O WebSocket usa o protocolo graphql-ws (também conhecido como graphql-transport-ws). Este é o protocolo moderno GraphQL sobre WebSocket, NÃO o protocolo legado subscriptions-transport-ws.
Ao estabelecer a conexão, o cliente deve:
- Fazer upgrade da conexão HTTP para WebSocket
- Enviar uma mensagem connection_init com parâmetros de autenticação
- Aguardar connection_ack antes de se inscrever
Autenticação
A autenticação acontece durante o handshake WebSocket via connectionParams (enviado na mensagem connection_init).
Parâmetros obrigatórios:
| Parâmetro | Tipo | Descrição |
|---|---|---|
connection_id | string | Obrigatório. Um identificador único para esta conexão (ex: UUID). Usado para rastrear múltiplas conexões por usuário. |
Authorization | string | Recomendado. Token JWT Bearer (ex: Bearer eyJhbGci...). |
Você deve fornecer Authorization. O cabeçalho Authorization com um JWT é o método preferido.
Requisitos do Token JWT:
- Deve ser um JWT válido assinado com o segredo configurado (RSA ou HMAC)
- Deve conter claims de identidade do usuário
- A expiração do token é validada
Parâmetros de Conexão
Inscrevendo-se nas Atualizações
Uma vez conectado e autenticado, inscreva-se na assinatura StatusUpdate:
Assinatura GraphQL:
Formato de Resposta:
| Campo | Tipo | Descrição |
|---|---|---|
Type | string | O tipo de atualização (veja Tipos de Evento) |
Timestamp | string | Timestamp ISO 8601 de quando a atualização ocorreu |
UserID | int | O ID do usuário a quem esta atualização pertence |
Data | string | Payload codificado em JSON com detalhes da atualização |
Lidando com Desconexões
Conexões WebSocket podem ser interrompidas por várias razões:
- Problemas de rede
- Reinicializações do servidor
- Expiração do token
- Timeout por inatividade
Estratégia de Reconexão Recomendada
Implemente backoff exponencial com jitter:
Gerenciamento de Estado da Conexão
Rastreie estados de conexão e lide com transições:
- Conectando - Tentativa de conexão inicial
- Conectado - Recebeu connection_ack
- Inscrito - Assinatura ativa, recebendo eventos
- Desconectado - Conexão perdida, deve tentar reconectar
- Erro - Falha na autenticação ou erro irrecuperável