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
How can I handle API rate limits within get_weather().
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
How can I handle API rate limits within get_weather().
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.