Skip to main content

Control de los límites de frecuencia de la API

El Copilot Chat puede ayudar a controlar los límites de frecuencia de la API mediante la sugerencia de código que detecta e implementa la lógica de reintento.

Al realizar solicitudes a las API, es habitual encontrar límites de frecuencia que restringen el número de llamadas que se pueden realizar dentro de un período de tiempo determinado. El GitHub Copilot Chat puede ayudarte a controlar estos límites al sugerir código para detectar respuestas de límite de frecuencia y reintentar realizar las solicitudes después de un retraso de forma automática.

Escenario de ejemplo

El siguiente código de Python captura datos meteorológicos de una API externa. Si la API tiene límites de frecuencia, las solicitudes pueden generar errores cuando se superan dichos límites y es posible que la aplicación necesite una forma de controlar estas respuestas de manera correcta mediante la implementación de lógica de reintento.

from flask import Flask, request
import requests

app = Flask(__name__)

WEATHER_API_URL = "https://api.example.com/weather"

@app.route('/get_weather', methods=['GET'])
def get_weather():
    city = request.args.get('city')
    # Simulate an API request to the external weather service
    response = requests.get(WEATHER_API_URL, params={"city": city})
    weather_data = response.json() 

    return weather_data

Ejemplos de indicaciones

How can I handle API rate limits within get_weather().

Respuesta de ejemplo

Note

La respuesta siguiente es un ejemplo. Las respuestas de Copilot Chat no son deterministas, por lo que puedes obtener una respuesta diferente a la aquí mostrada.

Copilot puede sugerir código que implemente un mecanismo de reintento con retroceso exponencial para limitar la frecuencia de los reintentos.

Por ejemplo:

import requests
from flask import Flask, request
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry

app = Flask(__name__)

WEATHER_API_URL = "https://api.example.com/weather"

def requests_retry_session(
    retries=3,
    backoff_factor=0.3,
    status_forcelist=(500, 502, 504),
    session=None,
):
    session = session or requests.Session()
    retry = Retry(
        total=retries,
        read=retries,
        connect=retries,
        backoff_factor=backoff_factor,
        status_forcelist=status_forcelist,
    )
    adapter = HTTPAdapter(max_retries=retry)
    session.mount("http://", adapter)
    session.mount("https://", adapter)
    return session

@app.route('/get_weather', methods=['GET'])
def get_weather():
    city = request.args.get('city')
    try:
        response = requests_retry_session().get(WEATHER_API_URL, params={"city": city})
        response.raise_for_status()
        weather_data = response.json()
    except requests.exceptions.RequestException as e:
        return {"error": str(e)}, 500

    return weather_data

En este ejemplo, entre las sugerencias de Copilot se incluye configurar una sesión de reintento que permita al código reintentar las solicitudes de forma automática en caso de error debido a códigos de estado específicos (500, 502, 504). El elemento backoff_factor aumenta gradualmente el retraso entre los reintentos, lo que ayuda a evitar que se supere aún más el límite de frecuencia de la API.

Información adicional