Skip to main content

Gerenciamento de limites de requisições de API

Bate-papo do Copilot pode ajudar a lidar com os limites de taxa da API, sugerindo código que detecte esses limites e implemente a lógica de nova tentativa.

Ao fazer solicitações para APIs, é comum encontrar limites de taxa que restringem o número de chamadas que você pode fazer em um determinado período. Copilot Chat do GitHub pode ajudá-lo a lidar com esses limites sugerindo código para detectar respostas de limite de taxa e repetir solicitações automaticamente após um atraso.

Cenário de exemplo

O código Python a seguir busca dados meteorológicos de uma API externa. Se a API tiver limites de taxa, as solicitações poderão falhar quando os limites forem excedidos, e seu aplicativo poderá precisar de uma maneira de lidar com essas respostas normalmente implementando a lógica de repetição.

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

Prompt de exemplo

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

Resposta de exemplo

Observação

A resposta a seguir é um exemplo. Respostas do Bate-papo do Copilot são não determinísticas, portanto, você pode obter uma resposta diferente da mostrada aqui.

Copilot pode sugerir código que implementa um mecanismo de novas tentativas com recuo exponencial para limitar a frequência das novas tentativas.

Por exemplo:

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

Neste exemplo, Copilotas sugestões incluem a configuração de uma sessão de repetição que permite que o código repita solicitações automaticamente se elas falharem devido a códigos de status específicos (500, 502, 504). O backoff_factor aumenta gradualmente o atraso entre novas tentativas, ajudando a evitar exceder ainda mais o limite da taxa da API.

Leitura adicional