FastAPI expone los endpoints, valida parametros y unifica respuestas.
Angular · FastAPI · CCXT · Criptomonedas
API de criptomonedas: explicación del proyecto y arquitectura
Esta vista esta pensada como documentación técnica del proyecto. Aquí se explica como esta construida la API, que endpoints publica, como se autentica el cliente y como se consume desde Angular o Python.
La aplicación funcional se ha separado para que el usuario que solo quiere consultar datos pueda hacerlo sin mezclarse con el contenido didáctico.
Contexto del proyecto
El backend esta desplegado en FastAPI y utiliza CCXT para normalizar el acceso a distintos exchanges. Angular actua como cliente y consume endpoints autenticados mediante token JWT.
Esta separación mejora el mantenimiento, permite reutilizar la API desde otros clientes y deja el frontend centrado en la experiencia de usuario, el SEO y la presentación visual.
Base URL: https://criptodatabase.1938.com.es
1. Introduccion
En la versión antigua la utilidad principal consistia en comparar el precio de un par en varios exchanges. En esta nueva versión se mantiene esa idea, pero se mejora la arquitectura: ahora la lógica de mercado vive en una API independiente y Angular actua únicamente como cliente.
Esto aporta varias ventajas: interfaz más fácil de mantener, reutilización del backend desde scripts, paneles internos o futuras apps, y una estructura más limpia para ampliar funcionalidades como filtros, históricos o alertas.
2. Arquitectura
CCXT encapsula la comunicación con exchanges y reduce diferencias de implementación.
La autenticación se realiza con JWT usando el endpoint /token.
Angular consume la API, organiza estados de carga, errores y visualización de resultados.
3. Ejemplos de integracion
Una de las mejoras de esta migración es que la lógica queda desacoplada. El backend puede reutilizarse desde Angular, Python, scripts internos o futuras aplicaciones móviles.
3.1 Obtener token con Python
import requests
BASE_URL = "https://criptodatabase.1938.com.es"
USERNAME = "admin"
PASSWORD = "sdho9aehjdowjo"
response = requests.post(
f"{BASE_URL}/token",
data={"username": USERNAME, "password": PASSWORD},
timeout=20,
)
response.raise_for_status()
token = response.json()["access_token"]
headers = {"Authorization": f"Bearer {token}"}3.2 Comparar un par con Python
compare = requests.get(
f"{BASE_URL}/api/compare",
headers=headers,
params={"symbol": "BTC/USDT"},
timeout=20,
)
compare.raise_for_status()
for item in compare.json()["results"]:
print(item["exchange"], item.get("last"), item.get("bid"), item.get("ask"))3.3 Consumir la API desde Angular
this.cryptoApi.compareSymbol('BTC/USDT', ['binance', 'kraken']).subscribe({
next: (response) => {
this.compareResults = response.results;
},
error: (error) => {
console.error('Error consultando la API', error);
}
});4. Conceptos utiles
Que es un exchange?
Es una plataforma donde se negocian criptomonedas y otros pares digitales.
Que es un par?
Es la relación entre dos activos, por ejemplo BTC/USDT o ETH/EUR.
Que significa bid/ask?
Bid es la mejor compra disponible y ask la mejor venta disponible.
Por que dos exchanges muestran precios distintos?
Porque la liquidez, el volumen, el libro de ordenes y la demanda no son identicos en todos los mercados.
5. Criterios para llevar esta API a un proyecto real
Una API de datos de mercado solo es útil si el cliente entiende sus límites. Antes de usar este patrón en producción, lo importante no es solo llamar endpoints, sino controlar frescura, errores, autenticación y coste operativo.
La tabla de comparación debe leerse como una fotografia de mercado. Bid, ask y último precio pueden cambiar entre peticiones, y un último precio más barato puede venir de un mercado poco liquido o desactualizado. Para analizar, combina la fotografia con volumen, timestamp, spread y comisiones.
Cachear listados de exchanges y catalogos de pares, porque no hace falta pedirlos en cada carga de página.
Aplicar timeouts y mensajes de error claros: las APIs de exchanges pueden fallar, limitar peticiones o devolver datos parciales.
No exponer credenciales de exchanges ni claves privilegiadas en Angular; el navegador debe hablar solo con tu backend.
Separar comparación didáctica de ejecución de trading. Una diferencia de precio no es por si sola una señal de compra o venta.
Registrar errores del backend por exchange para detectar proveedores inestables en vez de mostrar fallos genéricos.
6. Enlaces del proyecto
Aplicacion funcional
Vista separada para consultar exchanges, ticker, pares y comparación de precios.
Objetivo de esta separacion
Separar documentación y uso real mejora la experiencia, el SEO y la mantenibilidad del proyecto.