# Control de los límites de frecuencia de la API

Chat de Copiloto puede ayudar a controlar los límites de frecuencia de API mediante la sugerencia de código que los 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 Copilot Chat de GitHub 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.

```python id=rate-limit-example
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

```copilot copy prompt ref=rate-limit-example
How can I handle API rate limits within get_weather().
```

## Respuesta de ejemplo

> \[!NOTE] La respuesta siguiente es un ejemplo. Las respuestas de Chat de Copiloto 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:

```python
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

* [Ingeniería de mensajes para GitHub Copilot Chat](/es/copilot/using-github-copilot/prompt-engineering-for-github-copilot)
* [Procedimientos recomendados para usar GitHub Copilot](/es/copilot/using-github-copilot/best-practices-for-using-github-copilot)