Guía completa de la API de Python: uso, creación y despliegue exhaustivos

目次

1. Introducción

API (Application Programming Interface) es un mecanismo para que los softwares se comuniquen entre sí. En los últimos años, muchos servicios web y aplicaciones proporcionan API, lo que permite a los desarrolladores utilizarlas para obtener datos o integrar sistemas. Python es uno de los lenguajes de programación más adecuados para el uso y la construcción de API, gracias a su sintaxis simple y sus ricas bibliotecas.

En este artículo, explicaremos los conocimientos básicos sobre «Python API», cómo utilizar API con Python y, además, cómo construir API de manera detallada.

1.1 ¿Qué es una API?

API (Application Programming Interface) es un mecanismo que permite a diferentes softwares o servicios compartir datos o funciones. Por ejemplo, una aplicación de pronóstico del tiempo utiliza la API de un servicio externo de información meteorológica para obtener datos meteorológicos.

Las API se utilizan principalmente para los siguientes propósitos.

  • Obtención de datos: Obtener información de publicaciones en SNS, pronósticos del tiempo, información de acciones, etc.
  • Envío de datos: Registro de información de usuarios, envío de formularios, procesamiento de pagos, etc.
  • Integración entre sistemas: Integrar diferentes aplicaciones o servicios

Existen varios tipos de API, pero el más común es REST API (Representational State Transfer API). Esto utiliza el protocolo HTTP para que el cliente (aplicación o navegador) y el servidor intercambien solicitudes y respuestas.

1.2 Ventajas de utilizar y crear API con Python

Python es un lenguaje de programación adecuado para el uso y la creación de API. A continuación, se enumeran algunas razones.

1.2.1 Se puede utilizar API con código simple

Python utiliza comúnmente la biblioteca requests, y se puede llamar a una API e obtener datos con solo unas pocas líneas de código.

import requests

response = requests.get("https://api.example.com/data")
print(response.json())  # Mostrar los datos obtenidos

De esta manera, en Python es posible interactuar fácilmente con API.

1.2.2 Se pueden utilizar potentes frameworks web

Python cuenta con varios frameworks potentes para construir API. Los más populares son Flask y FastAPI.

  • Flask: Framework web ligero y simple. Incluso los principiantes pueden construir API fácilmente.
  • FastAPI: Aprovecha las funciones estándar más recientes de Python (sugerencias de tipo) para crear API rápidas y seguras.

1.2.3 Ricas bibliotecas y extensibilidad

Python tiene una gran cantidad de bibliotecas compatibles con API, como procesamiento de datos, aprendizaje automático e integración con servicios en la nube.

  • requests: Realizar comunicación con API de manera simple
  • json: Manejar datos JSON de respuestas de API
  • Flask / FastAPI: Frameworks adecuados para la construcción de API
  • SQLAlchemy: ORM para integrar bases de datos con API

Al utilizar estas, se puede desarrollar API con Python de manera eficiente.

1.3 Lo que se puede aprender en este artículo

En este artículo, explicaremos en detalle tanto el método para utilizar API como el método para construir API con Python.

  • Método para utilizar API con Python
  • Comunicación con API utilizando la biblioteca requests
  • Procesamiento de respuestas de API (análisis de JSON)
  • Implementación de manejo de errores
  • Método para crear API con Python
  • Construcción de Web API utilizando Flask / FastAPI
  • Integración con bases de datos
  • Implementación de autenticación y medidas de seguridad
  • Métodos prácticos de utilización de Python API
  • Despliegue en entornos en la nube (Heroku, AWS Lambda)
  • Optimización para mejorar el rendimiento

Este contenido proporciona conocimientos prácticos para quienes deseen utilizar API con Python o crear sus propias API. En la siguiente sección, explicaremos el método para utilizar API con Python junto con código específico.

2. Cómo utilizar APIs en Python [Para principiantes]

En Python, se pueden llamar APIs externas para obtener datos o enviarlos. En esta sección, se explica el método básico para utilizar APIs con Python. Específicamente, cubre el siguiente contenido.

  • Método para llamar a APIs en Python
  • requests Solicitudes HTTP usando la biblioteca
  • Procesamiento de respuestas de API
  • Manejo de errores y medidas

2.1 ¿Qué es una API? Conceptos básicos en Python

Una API (Application Programming Interface) es una interfaz para que diferentes softwares intercambien datos. Por ejemplo, usando una API de pronóstico del tiempo, se pueden obtener datos del tiempo de una región específica.

Las interacciones con API usan solicitudes HTTP. Los tipos de solicitudes más comunes son los siguientes.

MétodoDescripción
GETObtener datos del servidor
POSTEnviar datos al servidor
PUTActualizar datos existentes
DELETEEliminar datos

En Python, se puede llamar fácilmente a APIs usando la biblioteca requests.

2.2 Cómo llamar a APIs en Python

Para utilizar APIs en Python, se usa la biblioteca requests. Esta es una biblioteca que permite enviar solicitudes HTTP de manera sencilla.

Primero, si no tienes la biblioteca instalada, instálala con el siguiente comando.

pip install requests

2.2.1 Solicitud GET usando la biblioteca requests

Usando una solicitud GET, se pueden obtener datos del servidor. Por ejemplo, para obtener información de usuario aleatoria usando una API gratuita, se escribe de la siguiente manera.

import requests

url = "https://randomuser.me/api/"
response = requests.get(url)

if response.status_code == 200:
    data = response.json()
    print(data)  # Mostrar datos JSON
else:
    print("Error:", response.status_code)

2.2.2 Enviar datos usando una solicitud POST

Para enviar datos a una API, se usa una solicitud POST. Por ejemplo, para enviar información de usuario de prueba al servidor, se escribe de la siguiente manera.

import requests

url = "https://httpbin.org/post"
data = {
    "name": "Taro Yamada",
    "email": "taro@example.com"
}

response = requests.post(url, json=data)

if response.status_code == 200:
    print("Éxito:", response.json())
else:
    print("Error:", response.status_code)

2.3 Procesamiento de respuestas de API (Análisis JSON)

Muchas APIs devuelven las respuestas en formato JSON (JavaScript Object Notation). En Python, se puede analizar fácilmente los datos JSON usando el módulo json.

import requests

url = "https://randomuser.me/api/"
response = requests.get(url)

if response.status_code == 200:
    data = response.json()
    user = data["results"][0]  # Obtener información del usuario
    print("Nombre:", user["name"]["first"], user["name"]["last"])
    print("País:", user["location"]["country"])
else:
    print("Error:", response.status_code)

2.4 Manejo de errores y medidas

Al utilizar una API, si no se implementa un manejo de errores adecuado, el programa podría fallar en caso de errores inesperados.

2.4.1 Verificación de códigos de estado HTTP

Las respuestas de API incluyen códigos de estado HTTP. Los códigos representativos son los siguientes.

Código de estadoDescripción
200Normal (OK)
400Error del cliente (Bad Request)
401Error de autenticación (Unauthorized)
403Acceso prohibido (Forbidden)
404URL no encontrada (Not Found)
500Error interno del servidor (Internal Server Error)

Si ocurre un error, es necesario realizar el procesamiento adecuado.

import requests

url = "https://randomuser.me/api/"
response = requests.get(url)

if response.status_code == 200:
    data = response.json()
    print(data)
elif response.status_code == 404:
    print("Error: La página no se encuentra")
elif response.status_code == 500:
    print("Ocurrió un error del servidor")
else:
    print(f"Error: {response.status_code}")

2.4.2 Procesamiento de tiempo de espera

Debido a problemas de red, la respuesta de la API puede retrasarse. En ese caso, configurando timeout en la solicitud, se puede procesar como error después de un tiempo determinado.

import requests

url = "https://randomuser.me/api/"

try:
    response = requests.get(url, timeout=5)  # Configurar tiempo de espera de 5 segundos
    response.raise_for_status()  # Generar excepción si el código de estado es un error
    data = response.json()
    print(data)
except requests.exceptions.Timeout:
    print("Error: Se agotó el tiempo de espera")
except requests.exceptions.RequestException as e:
    print("Error:", e)

Resumen

En esta sección, se explicó cómo utilizar APIs con Python.

  • Conceptos básicos de API
  • requests Solicitudes GET/POST usando la biblioteca
  • Análisis JSON de respuestas de API
  • Manejo de errores y procesamiento de tiempo de espera

Al entender estos conceptos, podrás aprovechar diversas APIs.

侍エンジニア塾

3. Cómo crear una API en Python [Flask & FastAPI]

En Python, existen varios frameworks para construir APIs. Entre ellos, explicaremos cómo crear una API utilizando Flask y FastAPI, que son particularmente populares.

En esta sección, cubriremos el siguiente contenido.

  • El flujo básico para crear una Web API
  • Construcción de una API simple con Flask
  • Construcción de una API rápida con FastAPI
  • Integración con bases de datos
  • Medidas de seguridad para APIs

3.1 ¿Cómo crear una Web API?

Al crear una API, generalmente se sigue el siguiente flujo de desarrollo.

  1. Selección del framework (Flask / FastAPI, etc.)
  2. Diseño de endpoints (qué URL proporciona qué datos)
  3. Definición de solicitudes y respuestas (intercambio de datos en formato JSON)
  4. Integración con bases de datos (usar SQL o NoSQL según sea necesario)
  5. Medidas de autenticación y seguridad (usar claves API o JWT)

A continuación, explicaremos cómo crear APIs utilizando realmente Flask y FastAPI.

3.2 Construcción de una API simple con Flask

Flask es un framework web simple y ligero, ideal para construir APIs a pequeña escala rápidamente.

3.2.1 Instalación de Flask

Para usar Flask, primero instala la biblioteca.

pip install flask

3.2.2 API simple con Flask

El siguiente código es un ejemplo de una API simple con Flask.

from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/api/hello', methods=['GET'])
def hello():
    return jsonify({"message": "Hello, World!"})

if __name__ == '__main__':
    app.run(debug=True)

Explicación del código

  1. Crear una instancia de la clase Flask
  2. Definir endpoints de API usando el decorador @app.route
  3. Devolver una respuesta en formato JSON usando jsonify()
  4. Iniciar el servidor local con app.run(debug=True)

Al ejecutar este script, al acceder a http://127.0.0.1:5000/api/hello se devuelve una respuesta JSON con «Hello, World!».

3.3 Construcción de una API rápida con FastAPI

FastAPI es un framework moderno que aprovecha las sugerencias de tipo de Python 3.7 y posteriores para construir APIs rápidas y seguras.

3.3.1 Instalación de FastAPI

Para usar FastAPI, instala la biblioteca con el siguiente comando.

pip install fastapi uvicorn

(uvicorn es un servidor ASGI para ejecutar aplicaciones FastAPI)

3.3.2 API simple con FastAPI

El siguiente código es un ejemplo básico de API con FastAPI.

from fastapi import FastAPI

app = FastAPI()

@app.get("/api/hello")
def hello():
    return {"message": "Hello, FastAPI!"}

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="127.0.0.1", port=8000)

3.4 Integración de bases de datos con APIs

Al crear una API, en muchos casos es necesario guardar o obtener datos de una base de datos.

3.4.1 Integración de bases de datos con SQLite y SQLAlchemy

En Python, se puede realizar operaciones de base de datos fácilmente usando SQLAlchemy.

Primero, instala SQLAlchemy.

pip install sqlalchemy sqlite

A continuación, crea una API que combina Flask y SQLAlchemy.

from flask import Flask, jsonify
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///test.db"
db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80), nullable=False)

@app.route("/api/users", methods=["GET"])
def get_users():
    users = User.query.all()
    return jsonify([{"id": user.id, "name": user.name} for user in users])

if __name__ == "__main__":
    db.create_all()
    app.run(debug=True)

3.5 Medidas de seguridad para APIs

Al publicar una API, es necesario implementar medidas de seguridad sólidas. Presta atención a los siguientes puntos.

3.5.1 Introducción de autenticación y autorización

  • Usar claves API (restringir el acceso a la API)
  • Aprovechar JWT (JSON Web Token) (fortalecer la autenticación de usuarios)

3.5.2 Validación de datos

En FastAPI, se puede validar los datos de solicitud aprovechando las sugerencias de tipo.

from pydantic import BaseModel
from fastapi import FastAPI

app = FastAPI()

class UserRequest(BaseModel):
    name: str
    age: int

@app.post("/api/users")
def create_user(user: UserRequest):
    return {"message": f"Se ha registrado {user.name} ({user.age} años)"}

Resumen

En esta sección, explicamos cómo construir APIs usando Python.

  • Creación de una API simple con Flask
  • Creación de una API rápida con FastAPI
  • Integración con bases de datos usando SQLAlchemy
  • Medidas de seguridad para APIs (autenticación y validación)

4. Método de despliegue de la API de Python

Después de desarrollar la API en un entorno local, es necesario desplegarla (publicarla) para que funcione en la nube. En esta sección, explicamos cómo desplegar una API creada en Python en un entorno de nube.

Contenido de esta sección:

  • Ejecutar la API en el entorno local
  • Método de despliegue en el entorno de nube
  • Despliegue usando Heroku
  • Despliegue serverless usando AWS Lambda
  • Optimización de rendimiento de la API

4.1 Ejecutar la API en el entorno local

Antes de desplegar la API, es importante verificar su funcionamiento en el entorno local.

4.1.1 Ejecución de la aplicación Flask

Para ejecutar la aplicación Flask localmente, siga los siguientes pasos.

  1. Guardar el código de la API Flask con el nombre app.py
  2. Ejecutar el siguiente comando en la terminal
python app.py

De esta manera, la aplicación Flask se iniciará en http://127.0.0.1:5000/.

4.1.2 Ejecución de la aplicación FastAPI

Para ejecutar la aplicación FastAPI localmente, use el siguiente comando.

uvicorn main:app --host 127.0.0.1 --port 8000 --reload

De esta manera, la aplicación FastAPI se iniciará en http://127.0.0.1:8000/.

4.2 Despliegue en el entorno de nube

Una vez completada la verificación en el entorno local, despliegue en el entorno de nube. Aquí introducimos métodos de despliegue representativos.

4.2.1 Despliegue usando Heroku

Heroku es una plataforma de nube que permite desplegar fácilmente aplicaciones de Python.

Pasos para el despliegue en Heroku
  1. Instalación de Heroku CLI
  • Instalar desde el sitio oficial (https://devcenter.heroku.com/articles/heroku-cli)
  1. Iniciar sesión en Heroku
   heroku login
  1. Inicialización del repositorio Git
   git init
   heroku create my-python-api
  1. Crear los archivos necesarios
  • requirements.txt (listar las bibliotecas necesarias)
    flask gunicorn
  • Procfile (para la gestión de procesos de Heroku)
    web: gunicorn app:app
  1. Confirmar en Git y desplegar
   git add .
   git commit -m "Deploy API to Heroku"
   git push heroku main
  1. Verificar la URL de la aplicación
   heroku open

Con esto, la API de Python se publica en Heroku.

4.2.2 Despliegue serverless usando AWS Lambda

Usando AWS Lambda, se puede desplegar la API en la nube sin gestionar servidores.

Pasos para desplegar FastAPI en AWS Lambda
  1. Instalar la biblioteca para AWS Lambda
   pip install mangum
  1. Crear la aplicación FastAPI (main.py)
   from fastapi import FastAPI
   from mangum import Mangum

   app = FastAPI()

   @app.get("/")
   def hello():
       return {"message": "Hello from AWS Lambda"}

   handler = Mangum(app)
  1. Desplegar en AWS Lambda
  • Integrar con API Gateway de AWS
  • Desplegar usando AWS CLI

Usando AWS Lambda, se puede ejecutar la API sin gestión de servidores.

4.3 Optimización de rendimiento de la API

Aquí introducimos varios métodos para mejorar el rendimiento de la API después del despliegue.

4.3.1 Introducción de caché

Para acelerar las respuestas de la API, introducimos caché.

  • En el caso de Flask
  from flask_caching import Cache

  cache = Cache(app, config={'CACHE_TYPE': 'simple'})

  @app.route('/data')
  @cache.cached(timeout=60)  # Caché por 60 segundos
  def get_data():
      return {"message": "Cached data"}
  • En el caso de FastAPI
  from fastapi.middleware.cors import CORSMiddleware

  app.add_middleware(
      CORSMiddleware,
      allow_origins=["*"],
      allow_credentials=True,
      allow_methods=["*"],
      allow_headers=["*"],
  )

4.3.2 Aprovechamiento del procesamiento asíncrono

FastAPI soporta procesamiento asíncrono (async), lo que mejora el rendimiento.

from fastapi import FastAPI

app = FastAPI()

@app.get("/async")
async def async_endpoint():
    return {"message": "This is an async endpoint"}

4.3.3 Balanceo de carga

Si la carga de solicitudes a la API es alta, utilizando balanceo de carga, se puede distribuir la carga.

  • En AWS, Elastic Load Balancer (ELB)
  • En Heroku, Auto Scaling

Al aprovecharlos, se puede construir una API escalable.

Resumen

En esta sección, explicamos cómo desplegar una API de Python en un entorno de nube.

  • Verificación de funcionamiento de la API en el entorno local
  • Despliegue simple usando Heroku
  • Despliegue serverless aprovechando AWS Lambda
  • Optimización de rendimiento de la API (caché, procesamiento asíncrono, balanceo de carga)
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

5. FAQ de la API de Python (Preguntas frecuentes)

Hemos recopilado preguntas frecuentes sobre el desarrollo y uso de APIs con Python. Explicamos puntos de interés para principiantes e intermedios, desde los mecanismos básicos de las API hasta la seguridad y métodos para mejorar el rendimiento.

5.1 ¿Cuáles son los servicios gratuitos para usar con la API de Python?

Al probar APIs con Python, hay servicios de API gratuitos disponibles. Al utilizar los siguientes servicios, puedes obtener datos de prueba o aprender métodos de uso de API.

Nombre del servicioDescripciónDocumentación de API
Random User APIObtiene información de usuarios aleatorioshttps://randomuser.me
OpenWeatherMapObtiene información del tiempohttps://openweathermap.org/api
JSONPlaceholderObtención de datos ficticios (publicaciones, comentarios, información de usuarios, etc.)https://jsonplaceholder.typicode.com

5.2 ¿Cuál es la diferencia entre web scraping y API?

El web scraping y la API son ambos métodos para obtener datos externos, pero tienen diferencias fundamentales.

ElementoWeb scrapingAPI
MétodoAnaliza el HTML de las páginas web para obtener datosEnvía solicitudes al servidor y obtiene datos estructurados
VelocidadLenta (requiere carga de página)Rápida (obtención directa de la base de datos)
EstabilidadAlta posibilidad de dejar de funcionar por cambios en el sitio webGeneralmente estable y utilizable
Restricciones de usoEl acceso excesivo puede violar los términos en algunos casosSeguro porque se proporcionan datos oficiales

Conclusión: Siempre que sea posible, usar API en lugar de web scraping es más eficiente y seguro.

5.3 ¿Cómo se gestionan las claves API?

Muchas API utilizan claves API (API Key) para el control de acceso. A continuación, se presentan puntos clave para manejar las claves API de manera segura.

5.3.1 Guardar la clave API en variables de entorno

Escribir la clave API directamente en el código de Python es peligroso. En su lugar, se recomienda gestionarla mediante variables de entorno.

Método de configuración:

export API_KEY="your-secret-api-key"

Obtención en código de Python:

import os

api_key = os.getenv("API_KEY")
print(f"Clave API: {api_key}")

5.3.2 Usar el archivo .env

Usar un archivo .env permite gestionar fácilmente las variables de entorno.

  1. Crear el archivo .env:
@@PH-214@@   API_KEY=your-secret-api-key
  1. Usar dotenv en Python:
   pip install python-dotenv
  1. Cargar el archivo .env:
   from dotenv import load_dotenv
   import os

   load_dotenv()
   api_key = os.getenv("API_KEY")
   print(f"Clave API: {api_key}")

5.4 Comparación de frameworks al crear API con Python

Al desarrollar API con Python, las opciones principales son Flask y FastAPI. Compara sus características y elige el framework adecuado para tu proyecto.

ElementoFlaskFastAPI
Filosofía de diseñoSimple y ligeroRápido y aprovecha las sugerencias de tipo
RendimientoLento (procesamiento síncrono)Rápido (procesamiento asíncrono)
Verificación de tiposNinguna (debe hacerse manualmente)Sí (utiliza sugerencias de tipo de Python)
Generación de documentación de APIDescripción manualGeneración automática (Swagger UI, ReDoc)
Usos recomendadosAPI pequeñas, usos educativosAPI rápidas, entornos de producción

Conclusión:

  • Para principiantes o API pequeñas, Flask
  • Para API rápidas o entornos de producción, FastAPI

5.5 ¿Cómo mejorar el rendimiento de la API?

Hay varias técnicas de optimización para mejorar la velocidad de respuesta de la API.

5.5.1 Introducir caché

Al cachear las respuestas de la API, se puede reducir la carga del servidor y acelerarlo.

  • Flask
  from flask_caching import Cache

  cache = Cache(app, config={'CACHE_TYPE': 'simple'})

  @app.route('/data')
  @cache.cached(timeout=60)  # Caché por 60 segundos
  def get_data():
      return {"message": "Cached data"}
  • FastAPI
  from fastapi.middleware.cors import CORSMiddleware

  app.add_middleware(
      CORSMiddleware,
      allow_origins=["*"],
      allow_credentials=True,
      allow_methods=["*"],
      allow_headers=["*"],
  )

5.5.2 Aprovechar el procesamiento asíncrono

En FastAPI, utilizar procesamiento asíncrono (async) mejora el rendimiento.

from fastapi import FastAPI

app = FastAPI()

@app.get("/async")
async def async_endpoint():
    return {"message": "This is an async endpoint"}

5.5.3 Balanceo de carga

Si aumenta el acceso a la API, balanceo de carga puede distribuir la carga.

  • Elastic Load Balancer (ELB) de AWS
  • Auto Scaling de Heroku
  • Proxy inverso de Nginx

Resumen

En esta sección, explicamos preguntas frecuentes sobre el desarrollo de API con Python.

  • Servicios de API gratuitos
  • Diferencias entre web scraping y API
  • Métodos seguros de gestión de claves API
  • Comparación entre Flask y FastAPI
  • Optimización del rendimiento de la API

Al aprovechar estos conocimientos, puedes desarrollar y operar API más seguras y eficientes.

¡Prueba a desarrollar API con Python en la práctica!