ScavioScavio
ProductoPreciosDocumentación
Iniciar sesionComenzar
  1. Inicio
  2. Tutoriales
  3. Cómo configurar un patrón de conmutación por error de la API de búsqueda
Tutorial

Cómo configurar un patrón de conmutación por error de la API de búsqueda

Cree una función de búsqueda resistente con API principal, respaldo secundario y respaldo de resultados en caché. Incluye lógica de reintento y retroceso exponencial en Python.

Obtener clave API gratisDocumentacion API

Un patrón de conmutación por error de la API de búsqueda enruta las solicitudes a una API principal, recurre a una secundaria en caso de error y devuelve resultados almacenados en caché si ambas fallan. Esto evita el tiempo de inactividad del agente cuando un único proveedor sufre una interrupción.

Requisitos previos

  • Python 3.9+
  • Clave API de Scavio
  • Una clave API de búsqueda de respaldo (Brave o Serper)
  • solicitudes, herramientas funcionales

Guia paso a paso

Paso 1: Definir configuraciones de proveedor

Enumere sus proveedores en orden de prioridad con sus implementaciones de llamadas API.

Python
import requests

PROVIDERS = [
    {
        "name": "scavio",
        "fn": lambda query, n: requests.post(
            "https://api.scavio.dev/api/v1/search",
            json={"query": query, "num_results": n},
            headers={"x-api-key": "your-scavio-api-key"},
            timeout=10
        ).json().get("organic_results", [])
    },
    {
        "name": "brave",
        "fn": lambda query, n: requests.get(
            "https://api.search.brave.com/res/v1/web/search",
            params={"q": query, "count": n},
            headers={"X-Subscription-Token": "your-brave-key"},
            timeout=10
        ).json().get("web", {}).get("results", [])
    }
]

Paso 2: Cree la función de búsqueda de conmutación por error

Pruebe los proveedores en orden. Detecte excepciones y pase al siguiente proveedor.

Python
import time
from functools import lru_cache

_CACHE: dict = {}

def search_with_failover(query: str, n: int = 5) -> list:
    for provider in PROVIDERS:
        try:
            results = provider["fn"](query, n)
            if results:
                _CACHE[query] = results  # Update cache on success
                print(f"[search] Used: {provider['name']}")
                return results
        except Exception as e:
            print(f"[search] {provider['name']} failed: {e}")
            time.sleep(0.5)

    # All providers failed: return cached result
    if query in _CACHE:
        print("[search] Returning cached results")
        return _CACHE[query]

    return []  # Total failure

Paso 3: Agregar retroceso exponencial para reintentos

Vuelva a intentarlo con un solo proveedor hasta 2 veces antes de pasar al respaldo.

Python
def call_with_retry(fn, query: str, n: int, max_retries: int = 2) -> list:
    for attempt in range(max_retries + 1):
        try:
            result = fn(query, n)
            if result:
                return result
        except Exception as e:
            if attempt < max_retries:
                wait = 2 ** attempt  # 1s, 2s
                print(f"Retry {attempt + 1} in {wait}s...")
                time.sleep(wait)
            else:
                raise e
    return []

def search_resilient(query: str, n: int = 5) -> list:
    for provider in PROVIDERS:
        try:
            results = call_with_retry(provider["fn"], query, n)
            if results:
                _CACHE[query] = results
                return results
        except Exception as e:
            print(f"{provider['name']} exhausted after retries: {e}")

    return _CACHE.get(query, [])

Ejemplo en Python

Python
import requests
import time
from datetime import datetime

SCAVIO_KEY = "your-scavio-api-key"
BRAVE_KEY = "your-brave-key"  # Optional backup

PROVIDERS = [
    {"name": "scavio", "fn": lambda q, n: requests.post(
        "https://api.scavio.dev/api/v1/search",
        json={"query": q, "num_results": n},
        headers={"x-api-key": SCAVIO_KEY}, timeout=10
    ).json().get("organic_results", [])},
    {"name": "brave", "fn": lambda q, n: requests.get(
        "https://api.search.brave.com/res/v1/web/search",
        params={"q": q, "count": n},
        headers={"X-Subscription-Token": BRAVE_KEY}, timeout=10
    ).json().get("web", {}).get("results", [])}
]

_CACHE: dict = {}

def call_with_retry(fn, query, n, retries=2):
    for i in range(retries + 1):
        try:
            r = fn(query, n)
            if r: return r
        except Exception as e:
            if i < retries:
                time.sleep(2 ** i)
            else:
                raise
    return []

def search(query: str, n: int = 5) -> dict:
    for provider in PROVIDERS:
        try:
            results = call_with_retry(provider["fn"], query, n)
            if results:
                _CACHE[query] = results
                return {"results": results, "provider": provider["name"], "cached": False}
        except Exception as e:
            print(f"[{provider['name']}] failed: {e}")
    if query in _CACHE:
        return {"results": _CACHE[query], "provider": "cache", "cached": True}
    return {"results": [], "provider": "none", "cached": False}

if __name__ == "__main__":
    for q in ["best AI coding tools 2026", "vector database pricing"]:
        result = search(q)
        print(f"Q: {q}")
        print(f"   Provider: {result['provider']} | Results: {len(result['results'])} | Cached: {result['cached']}")

Ejemplo en JavaScript

JavaScript
const SCAVIO_KEY = 'your-scavio-api-key';
const BRAVE_KEY = 'your-brave-key';

const cache = new Map();

const PROVIDERS = [
  {
    name: 'scavio',
    fn: async (query, n) => {
      const res = await fetch('https://api.scavio.dev/api/v1/search', {
        method: 'POST', signal: AbortSignal.timeout(10000),
        headers: { 'Content-Type': 'application/json', 'x-api-key': SCAVIO_KEY },
        body: JSON.stringify({ query, num_results: n })
      });
      return (await res.json()).organic_results ?? [];
    }
  }
];

async function search(query, n = 5) {
  for (const provider of PROVIDERS) {
    try {
      const results = await provider.fn(query, n);
      if (results.length) { cache.set(query, results); return { results, provider: provider.name }; }
    } catch (e) {
      console.log(`${provider.name} failed: ${e.message}`);
    }
  }
  if (cache.has(query)) return { results: cache.get(query), provider: 'cache' };
  return { results: [], provider: 'none' };
}

const r = await search('best AI coding tools 2026');
console.log(`Provider: ${r.provider} | Results: ${r.results.length}`);

Salida esperada

JSON
[scavio] Used primary
Q: best AI coding tools 2026
   Provider: scavio | Results: 5 | Cached: False

# If Scavio is down:
[scavio] failed: Connection timeout
[brave] Used fallback
Q: best AI coding tools 2026
   Provider: brave | Results: 5 | Cached: False

# If both down:
[scavio] failed: Connection timeout
[brave] failed: API error 503
Q: best AI coding tools 2026
   Provider: cache | Results: 5 | Cached: True

Tutoriales relacionados

  • Cómo agregar límites de presupuesto de búsqueda a un agente de IA
  • Cómo crear un agente de investigación de fuentes múltiples
  • Cómo conectar Scavio a LangChain RAG

Preguntas frecuentes

La mayoria de los desarrolladores completan este tutorial en 15 a 30 minutos. Necesitaras una clave API de Scavio (el plan gratuito funciona) y un entorno de Python o JavaScript.

Python 3.9+. Clave API de Scavio. Una clave API de búsqueda de respaldo (Brave o Serper). solicitudes, herramientas funcionales. Una clave API de Scavio te da 50 creditos gratuitos al registrarte.

Si. El plan gratuito incluye 50 creditos al registrarte, mas que suficiente para completar este tutorial y crear un prototipo funcional.

Scavio tiene un paquete nativo de LangChain (langchain-scavio), un servidor MCP y una API REST simple que funciona con cualquier cliente HTTP. Este tutorial usa the raw REST API, pero puedes adaptarlo al framework que prefieras.

Recursos relacionados

Best Of

Mejor API de datos comerciales locales en 2026

Read more
Best Of

Mejor API de autoridad de dominio en 2026

Read more
Comparison

Google Places API vs SERP Local Pack API

Read more
Solution

Alternativa de confiabilidad de API de sonda

Read more
Solution

Migrar de Brave Search API a Scavio para Mayor Cobertura

Read more
Use Case

Herramientas de búsqueda de agentes simples de Python

Read more

Empieza a construir

Cree una función de búsqueda resistente con API principal, respaldo secundario y respaldo de resultados en caché. Incluye lógica de reintento y retroceso exponencial en Python.

Obtener clave API gratuitaLeer la documentacion
ScavioScavio

API de busqueda en tiempo real para agentes de IA. Busca en todas las plataformas, no solo en Google.

Producto

  • Funciones
  • Precios
  • Panel
  • Afiliados

Desarrolladores

  • Documentacion
  • Referencia de API
  • Inicio rapido
  • Integracion MCP
  • Python SDK

Alternativas

  • Alternativa a Tavily
  • Alternativa a SerpAPI
  • Alternativa a Firecrawl
  • Alternativa a Exa

Herramientas

  • Formateador JSON
  • cURL a codigo
  • Contador de tokens
  • Todas las herramientas

© 2026 Scavio. Todos los derechos reservados.

Featured on TAAFT
Terminos de servicioPolitica de privacidad