AstroWay/api v2.190.0 · es
todos los sistemas funcionando con normalidad

Cómo mantenemos la precisión bajo control: CI vs swetest y NASA

La precisión en la API astronómica se deteriora fácilmente con una sola refactorización de ephemeris. Exploramos la protección: un núcleo de Swiss Ephemeris en el navegador y el servidor, cientos de instantáneas congeladas en mapas de referencia y triangulación de cada PR contra swetest CGI, Kerykeion, Prokerala y el catálogo de eclipses de NASA.

Precisión es lo que el usuario silenciosamente verifica en Astrodienst. Si la carta actual se descompone en una hora de cuadrante, la queja llegará pronto. Y lo peor de esto es que la precisión se puede romper fácilmente de manera imperceptible: un refactoring en el código de ephemeris y la mitad de los puntos finales de los endpoints se han ido a las horas de la esfera.

Aquí es cómo evitamos que esto suceda.

Las posiciones planetarias se calculan con Swiss Ephemeris, compilado en WASM. La clave: es el mismo núcleo tanto en el navegador del nuestro aplicación como en el servidor API. Una sola base de código core/, conectada en el backend a través de alias de repositorio cruzado e integrada en el paquete en el build. No hay “implementación del navegador” y “implementación del servidor” que puedan divergir - divergen de nada.

Para las fechas fuera del rango principal de ephemeris, hay un fallback analítico (Moshier), un poco más crudo, pero sin roturas en los límites. Honestidad conocida: no declaramos públicamente la versión real del motor, porque la versión real del núcleo es inferior a la más reciente upstream, y escribir una cifra sonora sería una mentira.

Cada punto de cálculo tiene un conjunto de snapshots congelados - 873 JSON-fichas en el momento de este build. El ranner ejecuta el punto de cálculo en las cartas de referencia y lo compara con la ficha. Cualquier desviación en la longitud planetaria mayor que 5e-5° (0,18”) invalida el test.

Las cartas de referencia se seleccionan para golpear en los bordes, no solo en el “centro cómodo”:

  • Monroe, Diana, Einstein, Bowie - cartas históricas con datos de nacimiento conocidos
  • polar latitud - donde los sistemas de casa se vuelven
  • ecuatorial - donde se comportan de manera diferente
  • sur hemisferio - la verificación de la simetría

Los casos límite atrapan exactamente las regresiones que no se ven en la carta del condicional.

Los snapshots atrapan las regresiones en relación con sí mismos. Para verificar la verdad absoluta, cada lanzamiento se compara con fuentes independientes:

Contra quéLo que verificaDesviación
swetest CGI (Astrodienst)longitudes planetarias, cuadrantes de casa0.000"
Kerykeion (Python, pyswisseph)implementación independiente de SwEph< 0.2"
Prokerala (sidereal Lahiri)posiciones sidereales8-17", diferencia de sistema de fórmula Ayanamshi, no motor
NASA 5-Millennium Eclipse Cataloghora y tipo de eclipse< 1 min

La desviación con Prokerala - no es un error: es diferentes implementaciones de la fórmula Lahiri, y lo documentamos de manera explícita, no ocultamos. Con swetest, que es el estándar de la industria, el desplazamiento es cero.

Las líneas astronómicas de cartografía se verifican geométricamente por separado - la precisión en el ecuador es mejor que 1.5 km.

La precisión es un CI-gate, no una verificación de una sola vez:

  • api-accuracy.yml - en cada PR, el backend ejecuta el conjunto completo de snapshots + triangulación. El test rojo bloquea la fusión.
  • check-eclipse-accuracy.yml - una vez al año, compara eclipses con el catálogo de NASA; desviación mayor que el umbral automáticamente crea un problema.
  • check-sweph-updates.yml - cada semana, vigila la actualización de Swiss Ephemeris y el paquete WASM; nueva versión - problema en la revisión, sin autómerg.

La garantía es simple: las posiciones planetarias dentro de < 0.1 segundos de arco de Swiss Ephemeris estándar, y esta frontera está protegida por automatización, no por promesa en README. Si alguna vez aparece una regresión, caerá en nuestro CI, no en la queja de tu usuario.

La versión pública de estas cifras, con la tabla de desviaciones en cartas específicas, vive en la página Precisión.

MakSeong · AstroWay

Construyo AstroWay API: envuelvo Swiss Ephemeris en un REST puro y escribo sobre los detalles aburridos que realmente importan.

// construye sobre esto

El mismo Swiss Ephemeris que en Solar Fire - en 4 líneas de código.

Clave gratuita sin tarjeta. 5 000 llamadas al mes antes del primer pago.

Más del blog ver todas las publicaciones →

Engineering 2026-07-15

Tres SDK oficiales: TypeScript, Python, PHP en lugar de curl sin procesar

El HTTP crudo funciona, pero un cliente tipado ahorra horas: autocompletado de rutas, tipos de solicitud y respuesta, reintento incorporado en 408/409/429/5xx y jerarquía de errores estilo Stainless. Analizamos los tres SDK oficiales - @astroway/sdk (npm), astroway (PyPI), astroway/sdk (Packagist) - y cómo se generaron a partir de un único contrato OpenAPI.

Industry 2026-06-05

Free Astrology API: Which One Has the Best Free Tier in 2026?

A side-by-side of free tiers across the major astrology APIs - credits, request caps, card requirements - and how much you can actually build for free.

Engineering 2026-06-05

Horoscope API Tutorial: Build a Daily Horoscope Feature

Add daily, weekly and monthly horoscopes to your app via API - sign-based text vs transit-based personalization - with TypeScript and Python code.