SelectwinDOCS

Proibição de Polling

A API Selectwin proíbe explicitamente o uso de polling (consultas recorrentes e frequentes) como método para obter atualizações de status de recursos. Esta política foi implementada para garantir a es

Visão Geral

A API Selectwin proíbe explicitamente o uso de polling (consultas recorrentes e frequentes) como método para obter atualizações de status de recursos. Esta política foi implementada para garantir a estabilidade, eficiência e escalabilidade da plataforma, bem como para proporcionar uma experiência consistente para todos os integradores.


O que é Polling?

Polling é a prática de verificar repetidamente o status de um recurso em intervalos regulares através de requisições consecutivas à API. Por exemplo:

// Exemplo de polling (PRÁTICA PROIBIDA)
async function verificarStatusTransacao(transactionId) {
  let status = 'processing';
  
  while (status === 'processing') {
    // Espera 1 segundo
    await new Promise(resolve => setTimeout(resolve, 1000));
    
    // Faz uma nova requisição para verificar o status
    const response = await fetch(`https://api.selectwin.io/v1/transactions/${transactionId}`, {
      headers: { 'SelectKey': 'sua_chave_api' }
    });
    
    const data = await response.json();
    status = data.status;
  }
  
  return status;
}

Por que o Polling é Proibido?

1. Consumo Excessivo de Recursos

O polling gera um volume significativo de requisições, muitas das quais não produzem alterações no estado do recurso. Este padrão:

  • Sobrecarrega os servidores com requisições desnecessárias
  • Reduz a capacidade de atendimento para outras solicitações legítimas
  • Aumenta os custos de infraestrutura sem benefício proporcional

2. Escalabilidade Comprometida

À medida que o número de usuários e transações cresce, o impacto negativo do polling se multiplica:

  • Cada cliente que utiliza polling pode gerar centenas de requisições desnecessárias
  • Em horários de pico, o efeito cumulativo pode degradar a performance para todos os usuários
  • Torna-se insustentável manter a qualidade de serviço sob volume elevado

3. Rate Limiting Inevitável

O uso de polling frequentemente resulta em:

  • Atingir rapidamente os limites de taxa (rate limits) impostos pela API
  • Aumento das requisições rejeitadas com código de status HTTP 429 (Too Many Requests)
  • Degradação da experiência para o usuário final

4. Ineficiência Operacional

O polling é inerentemente ineficiente pois:

  • Consome largura de banda desnecessariamente
  • Aumenta a latência da aplicação
  • Desperdiça ciclos de CPU tanto no cliente quanto no servidor
  • Eleva o consumo de energia, tornando-se menos sustentável

Alternativas Recomendadas

A Selectwin oferece alternativas mais eficientes para monitorar mudanças de estado:

1. Webhooks (Método Recomendado)

Os webhooks permitem receber notificações em tempo real quando ocorrem alterações no estado de um recurso:

// Exemplo de rota Express para receber webhooks
const express = require('express');
const app = express();

app.post('/webhook/transactions', express.json(), (req, res) => {
  const event = req.body;
  
  // Verifica a assinatura do webhook (importante para segurança)
  // O header é enviado no formato: X-Selectwin-Signature: sha256=<hex>
  if (!isValidSignature(req.headers['x-selectwin-signature'], event, webhookSecret)) {
    return res.status(401).send('Assinatura inválida');
  }
  
  // Processa o evento com base no tipo
  switch (event.type) {
    case 'transaction.approved':
      // Lógica para transação aprovada
      break;
    case 'transaction.dispute':
      // Lógica para transação em disputa
      break;
    case 'transaction.refunded':
      // Lógica para transação estornada
      break;
  }
  
  // Sempre retorne 200 para confirmar o recebimento
  res.status(200).send('Webhook recebido com sucesso');
});

Configuração de Webhooks

Para configurar um endpoint de webhook:

curl -X POST "https://api.selectwin.io/v1/webhooks/endpoints" \
     -H "SelectKey: sl_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ" \
     -H "Content-Type: application/json" \
     -d '{
       "name": "Facebook Integration",
       "endpoint": "https://webhooks.mydomain.com/selectwin",
       "forceActivities": true,
       "authorization": {
           "type": "basic",
           "value": "YOUR_KEY_HERE"
       },
       "events": ["transaction.approved", "customer.updated"]
     }'

2. Notificação por E-mail ou SMS (Para Baixo Volume)

Para casos de baixo volume de operações ou notificações críticas:

  • Configure notificações por e-mail ou SMS através do painel administrativo
  • Utilize essas notificações como gatilho para verificação pontual da API
  • Não dependa exclusivamente deste método para processamento automático

Recursos Adicionais

On this page