Cómo Medir el Tiempo de Respuesta de una API con Python

Medir el tiempo de respuesta de una API es esencial para entender su rendimiento, detectar cuellos de botella y mejorar la experiencia de usuario. Una API lenta puede afectar tanto la percepción de tu aplicación como su escalabilidad, por eso es importante saber cuánto tarda realmente en responder.

¿Por qué es importante medirlo?

  Conocer el tiempo de respuesta te permite:

  • Verificar si tus endpoints cumplen con los tiempos esperados.
  • Identificar peticiones lentas o ineficientes.
  • Optimizar servidores, bases de datos o cachés.
  • Comparar proveedores o versiones de API.

1Usando requests y time

Con este método, medimos el tiempo entre el inicio y el fin de la solicitud, obteniendo así el tiempo total de respuesta.

python
import requests
import time

url = "https://api.devapihub.com/api/products"

start = time.time()
response = requests.get(url)
end = time.time()

print(f"Status: {response.status_code}")
print(f"Tiempo de respuesta: {(end - start):.3f} segundos")
  Explicación

Este método manual usa time.time() para medir el inicio y fin de la petición. Es la forma más sencilla y directa para obtener el tiempo total en segundos.

2Usando response.elapsed

Esta propiedad devuelve el tiempo total de respuesta en segundos, sin necesidad de calcularlo manualmente.

python
import requests

url = "https://api.devapihub.com/api/products"
response = requests.get(url)

print(f"Status: {response.status_code}")
print(f"Tiempo de respuesta: {response.elapsed.total_seconds():.3f} segundos")
  Explicación

La librería requests ya incluye la propiedad elapsed, que devuelve el tiempo total de respuesta sin necesidad de calcularlo manualmente.

3Promedio de varios intentos

En este ejemplo, realizamos cinco solicitudes y calculamos el promedio del tiempo de respuesta.

python
import requests
import statistics
import time

url = "https://api.devapihub.com/api/products"
tiempos = []

for _ in range(5):
  start = time.time()
  requests.get(url)
  tiempos.append(time.time() - start)

promedio = statistics.mean(tiempos)
print(f"Promedio de respuesta: {promedio:.3f} segundos")
  Explicación

Ejecuta varias solicitudes al mismo endpoint y calcula un promedio, útil para tener una medida más precisa del rendimiento real de la API.

4Asíncrono con aiohttp

Para este ejemplo, usamos aiohttp para realizar solicitudes asíncronas.

python
import aiohttp
import asyncio
import time

async def medir(url):
  async with aiohttp.ClientSession() as session:
      start = time.time()
      async with session.get(url) as resp:
          await resp.text()
      print(f"{url} -> {(time.time() - start):.3f} s")

asyncio.run(medir("https://api.devapihub.com/api/products"))
  Explicación

Permite medir tiempos de respuesta de manera concurrente. Ideal si necesitas probar varios endpoints al mismo tiempo sin esperar a que cada uno termine.

  Conclusión

Saber medir el tiempo de respuesta de una API es clave para mantener un servicio rápido y confiable. Ya sea con métodos simples o asíncronos, Python ofrece herramientas poderosas para monitorear y optimizar tus endpoints.