Cómo enviar datos a una API REST con POST en Python
Enviar datos a una API REST con POST en Python es una de las tareas más comunes en la integración de sistemas. Mientras que una petición GET sirve para leer información, el método POST sirve para enviar datos nuevos: crear un cliente, enviar un formulario o registrar un pedido. La buena noticia es que, con la librería requests, bastan unas pocas líneas para hacerlo de forma limpia y legible.
Requisitos previos
- Python 3.8 o superior instalado en tu ordenador.
- La librería
requests(la instalamos en el Paso 1). - Un endpoint que acepte POST. Para aprender, vamos a usar el servicio público de pruebas
https://httpbin.org/post, que devuelve exactamente lo que enviamos. - Conocer los diccionarios de Python, ya que son la base de los datos que vamos a enviar.
Paso 1: Instalar e importar la librería requests
La librería requests no viene incluida en Python, así que la instalamos con pip. En la terminal, ejecuta el siguiente comando:
pip install requests
Después, al principio de tu script, impórtala para poder usarla:
import requests
Paso 2: Preparar los datos que vas a enviar
Casi todas las APIs modernas intercambian información en formato JSON. En Python, lo más práctico es empezar con un diccionario normal con los campos que queremos enviar. Imaginemos que estamos creando un nuevo cliente:
novo_cliente = {
"nome": "Ana Silva",
"email": "ana.silva@exemplo.pt",
"plano": "premium"
}
Fíjate en que no necesitas convertir este diccionario a texto JSON a mano. Como verás en el paso siguiente, la librería requests hace esa conversión por ti. Puedes incluir números, texto e incluso listas o diccionarios dentro de él: la estructura se convierte a JSON tal cual.
Paso 3: Enviar los datos con requests.post
Para enviar el diccionario como JSON, usamos requests.post y pasamos los datos en el parámetro json=. Este parámetro se encarga de dos cosas a la vez: convierte el diccionario en JSON y define la cabecera Content-Type: application/json automáticamente.
url = "https://httpbin.org/post"
resposta = requests.post(url, json=novo_cliente, timeout=10)
Usa siempre json= cuando quieras enviar JSON, y no data=. Con data=, los campos se enviarían como un formulario (form), que es un formato diferente y que la mayoría de las APIs de datos no espera.
Consejo: el parámetro timeout=10 evita que tu programa se quede bloqueado para siempre si la API no responde. Inclúyelo siempre en tus peticiones.
Paso 4: Leer la respuesta y comprobar el código de estado
Después de enviar la petición, la API responde con un código de estado (status code). Los códigos 200 (OK) y 201 (Created) indican que todo ha ido bien. Podemos leer ese código y el cuerpo de la respuesta así:
print("Código:", resposta.status_code)
dados = resposta.json()
print(dados)
El método resposta.json() convierte la respuesta de JSON en un diccionario de Python, listo para usar en el resto de tu programa.
Paso 5: Gestionar los errores comunes
En producción no siempre todo sale bien: la API puede rechazar los datos o la red puede fallar. Para no dejar pasar un error de forma silenciosa, usamos raise_for_status(), que lanza una excepción cuando el código es de error (4xx o 5xx), dentro de un bloque try:
try:
resposta = requests.post(url, json=novo_cliente, timeout=10)
resposta.raise_for_status()
print("Cliente criado:", resposta.json())
except requests.exceptions.HTTPError as erro:
print("A API devolveu um erro:", erro)
except requests.exceptions.RequestException as erro:
print("Falha de ligação:", erro)
De esta forma, distingues claramente un error devuelto por la API (por ejemplo, 400 Bad Request cuando faltan campos) de un problema de red, como un timeout o un fallo de DNS.
Comprobar el resultado
Como estamos usando httpbin.org/post, la respuesta devuelve todo lo que enviamos dentro de un campo json. Si ves tus campos (nome, email y plano) reflejados en la respuesta, junto con un código 200, entonces el envío ha funcionado. En una API real, comprueba también que el nuevo registro aparece en la base de datos o en el panel del servicio.
Conclusión
Con unas pocas líneas y la librería requests, ya puedes enviar datos a cualquier API REST con una petición POST, leer la respuesta y gestionar los errores más frecuentes. Un buen siguiente paso es aprender a autenticar tus peticiones con un token en la cabecera Authorization, para trabajar con APIs privadas. ¿Cuál será la primera API a la que envíes tus datos?