Mga isyu sa timeout at network

Huling na-update: 3 buwan ang nakalipas

Ang mga problema sa network ay maaaring maging sanhi ng pagkabigo ng mga kahilingan sa API. Narito kung paano haharapin nang maayos ang mga timeout at mga isyu sa koneksyon.

Itakda ang naaangkop na mga timeout

Palaging magtakda ng mga timeout upang maiwasan ang pagbitin ng mga kahilingan:

// JavaScript with fetch
const controller = new AbortController();
const timeout = setTimeout(() => controller.abort(), 30000); // 30s
try {
  const response = await fetch('https://api.cathopic.com/resources', {
    method: 'POST',
    headers: {
      'x-api-key': apiKey,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({ query: 'Jesus' }),
    signal: controller.signal
  });
  
  clearTimeout(timeout);
  return await response.json();
  
} catch (error) {
  clearTimeout(timeout);
  if (error.name === 'AbortError') {
    console.error('Request timed out after 30s');
  } else {
    console.error('Network error:', error);
  }
  throw error;
}
// Python with requests
import requests
from requests.exceptions import Timeout, RequestException
try:
    response = requests.post(
        'https://api.cathopic.com/resources',
        headers={'x-api-key': api_key},
        json={'query': 'Jesus'},
        timeout=30  # 30 seconds
    )
    return response.json()
    
except Timeout:
    print('Request timed out after 30s')
    raise
except RequestException as e:
    print(f'Network error: {e}')
    raise

Mga karaniwang error sa network

Timeout sa koneksyon:

  • Hindi maitatag ang koneksyon sa server

  • Karaniwang isyu sa network o firewall

  • Suriin ang koneksyon sa internet

  • Tiyaking pinapayagan ng firewall ang HTTPS sa api.cathopic.com

Timeout sa pagbabasa:

  • Naitatag ang koneksyon ngunit walang tugon

  • Maaaring mabagal o sobrang karga ang server

  • Dagdagan ang timeout o subukang muli sa ibang pagkakataon

Kabiguan sa resolusyon ng DNS:

  • Hindi ma-resolve ang api.cathopic.com

  • Isyu sa DNS server

  • Subukang muli o suriin ang mga setting ng DNS

Muling subok na may backoff

async function fetchWithRetry(url, options, maxRetries = 3) {
  for (let attempt = 0; attempt < maxRetries; attempt++) {
    try {
      const controller = new AbortController();
      const timeout = setTimeout(() => controller.abort(), 30000);
      
      const response = await fetch(url, {
        ...options,
        signal: controller.signal
      });
      
      clearTimeout(timeout);
      
      if (!response.ok) {
        throw new Error(`HTTP ${response.status}`);
      }
      
      return await response.json();
      
    } catch (error) {
      const isLastAttempt = attempt === maxRetries - 1;
      if (isLastAttempt) {
        console.error(`All ${maxRetries} attempts failed`);
        throw error;
      }
      
      const waitTime = Math.pow(2, attempt) * 1000;
      console.log(`Attempt ${attempt + 1} failed. Retrying in ${waitTime}ms...`);
      
      await new Promise(resolve => setTimeout(resolve, waitTime));
    }
  }
}

Mga inirerekomendang halaga ng timeout

  • Timeout sa koneksyon: 10 seconds

  • Timeout sa pagbabasa: 30 seconds

  • /resources search: 30 seconds

  • /confirm licensing: 30 seconds

Pag-debug ng mga isyu sa network

Gamitin ang curl upang subukan ang koneksyon:

# Test basic connectivity
curl -v https://api.cathopic.com/resources
# Test with timeout
curl --max-time 30 -X POST https://api.cathopic.com/resources \
  -H "x-api-key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query": "test"}'

Suriin kung may:

  • ✓ Niresolba ang DNS para sa api.cathopic.com

  • ✓ Matagumpay ang SSL/TLS na koneksyon

  • ✓ Nakatanggap ng HTTP response

  • ✓ Makatwirang oras ng tugon (<5s karaniwan)

Kung magpapatuloy ang mga isyu, makipag-ugnayan sa support gamit ang mga detalye ng network diagnostic.

Nakatulong ba ang artikulong ito?