Uso de kwargs para crear un cliente de APIs flexible
Clase 8 de 25 • Curso de Python: Entornos virtuales, PEP8 y Manejo de Errores
Resumen
Domina cómo usar parámetros nombrados y dinámicos en Python para construir un API client flexible. Aquí verás cómo los keywords (también llamados kwargs) se reciben como diccionario, cómo combinarlos con args y cómo aplicar el doble asterisco para fusionar configuraciones y seleccionar entre News API y Guardian con una sola función.
¿Qué son keywords y por qué combinarlos con args?
Los keywords se envían con nombre y se reciben con doble asterisco: kwargs. A diferencia de args, que solo capturan valores posicionales, kwargs agrupa parámetros nombrados en un diccionario. Esto permite pasar pares key-value y trabajar con ellos de forma dinámica y clara.
- kwargs es un diccionario. Permite inspeccionar keys y valores de entrada.
- Key-value nombrado. Claridad al invocar funciones y reutilizarlas.
- Combinación con args. Flexibilidad total con parámetros posicionales y nombrados.
Ejemplo base de impresión de keywords:
def ejemplo_keywords(**keywords):
print(type(keywords)) # dict
print(keywords) # {'llave': 'valor', ...}
print('---')
# llamada de ejemplo
# ejemplo_keywords(llave='valor', api_key='demo')
¿Cómo implementar kwargs en una función flexible?
La idea central: crear una función única que, según el nombre de la API, seleccione el API client correcto, mezcle una configuración base con parámetros dinámicos, y ejecute la llamada. El resultado es una función robusta y reutilizable.
def fetch_news(api_name, *args, **keywords):
"""
función flexible para conectar con la API.
"""
# configuración base común a múltiples APIs
base_config = {
"timeout": ..., # por defecto
"retries": ..., # por defecto
}
# fusión de configuración: base + parámetros nombrados entrantes
config = {**base_config, **keywords}
# selección de cliente por nombre
api_clients = {
"newsAPI": news_api_client, # referencia a cliente de News API
"Guardian": guardian_client, # referencia a cliente de Guardian
}
client = api_clients[api_name]
return client(*args, **config)
¿Cómo funcionan los diccionarios y el doble asterisco?
- Desempaquetado con :** copiar pares key-value dentro de otro diccionario.
- Mezcla de configuraciones:
{**base_config, **keywords}
agrega y sobrescribe de forma limpia. - Invocación con :**
client(*args, **config)
pasa parámetros de forma explícita.
¿Qué orden de parámetros es correcto en Python?
- Obligatorios primero: por ejemplo,
api_name
al inicio. - Luego args: parámetros posicionales variables.
- Al final kwargs:** parámetros nombrados y dinámicos.
¿Cómo se selecciona el cliente por nombre?
- Mapa de clientes: un diccionario
api_clients
con el nombre como clave. - Búsqueda directa:
client = api_clients[api_name]
elige el ejecutor correcto. - Una sola función: orquesta múltiples fuentes como News API y Guardian.
¿Cómo usarlo con News API y Guardian?
Con una misma función puedes enviar parámetros distintos y obtener resultados de diferentes orígenes. La clave está en pasar keywords específicos de cada servicio, manteniendo una base_config con timeout y retries.
- Ejemplo con News API.
- Ejemplo con Guardian con sección y fecha.
- Misma función, distintos parámetros, mismo flujo.
Invocaciones ilustrativas:
# News API
fetch_news(
"newsAPI",
api_key="demo",
query="noticias de Python",
)
# Guardian
fetch_news(
"Guardian",
api_key="Demoguardian",
section="sports",
from_date="2020-10-10",
)
Conceptos y habilidades que te llevas: - kwargs como diccionario para parámetros nombrados. - args para valores posicionales flexibles. - Key-value explícito para legibilidad y mantenimiento. - Desempaquetado con ** para fusionar configuraciones. - Configuración base con timeout y retries reutilizable. - Selección de cliente por nombre mediante diccionario de API clients. - Orden correcto de parámetros: obligatorios, args, kwargs.
¿Tienes dudas sobre cómo adaptar los parámetros de tu API favorita o cómo estructurar tu base_config? Deja tu pregunta y cuéntanos tu caso para ayudarte a concretarlo.