AstroWay/api v2.190.0 · ro
toate sistemele sunt în stare normală

Cum păstrăm precizia sub control: CI împotriva swetest și NASA

Precizia în API-ul nostru este ușor degradată de un singur refactoring al ephemeridelor. Analizăm protecția: un singur nucleu Swiss Ephemeris pe browser și server, sute de snapshot-uri congelate pe hărțile de referință și triangulația fiecărui PR împotriva swetest CGI, Kerykeion, Prokerala și catalogul umbrelor NASA.

Практичitatea este cea pe care utilizatorul îți verifică în secret pe Astrodienst. Dacă cartea nativă se desprinde în minutul cuadrant, plângerea va ajunge repede. Și cel mai rău e că această precizie poate fi ușor spartă în mod neștiințific: un refactoring în codul ephemeridei, și jumătate din endpointurile tale se duc pe secundele de arc.

Așa că astfel nu se întâmplă.

Pozițiile planetare sunt calculate de Swiss Ephemeris, compilat în WASM. Cheie: aceeași nucleu este și în browserul nostru, și pe serverul API. O singură bază de cod core/, atașată în backend prin aliasul inter-repo și integrată în bandlul de pe build. Nu există „implementare browser” și „implementare server” care pot diverge - nu diverg nimic.

Pentru date din afara domeniului ephemeridei, există un fallback analitic (Moshier), puțin mai gros, dar fără rupturi la limite. Conștiință sinceră: nu declarăm public o anumită versiune a rulii, pentru că versiunea reală a nucleului este mai mică decât cea mai nouă versiune upstream, și scrierea cu o voce tare ar fi o minciună.

Fiecare endpoint de calcul are un set de sursă fixată - 873 JSON-ficstur la momentul acestui build. Rularea este testată pe cartele de referință și comparată cu fixtura. Orice deosebire a planetei în longitudine mai mare decât 5e-5° (0,18″) validează testul.

Cartele de referință sunt selectate astfel încât să bată la marginile, nu doar în centrul „convenabil”:

  • Monroe, Diana, Einstein, Bowie - cartele istorice cu date de naștere cunoscute
  • polul - unde sistemele se nasc
  • ecuatorial - unde se comportă diferit
  • polul - unde se testează simetria

Cazurile limită prind exact acele regresii care nu se văd pe harta lui Ivan.

Sursa fixată prind regresia față de sine. Pentru a verifica adevărul absolut, fiecare rulare este comparată cu surse independente:

Față de ceCe se testeazăDeosebire
swetest CGI (Astrodienst)longitudini planete, cușpi domilor0.000″
Kerykeion (Python, pyswisseph)implementare independentă a SwEph< 0.2″
Prokerala (sidereal Lahiri)poziții siderice8-17″, diferență de sistemă în formulă ayanamși, nu rulare
NASA 5-Millennium Eclipse Catalogtimp și tipuri de umbre< 1 min

Deosebirea cu Prokerala - nu este o eroare: este o implementare diferită a formulei Lahiri, și noi documentăm asta deschis, nu îl ascundem. Cu swetest, care este etalonul industriei, deosebirea este nulă.

Linii aștruite separate sunt testate geometric - precizia pe ecuator este mai bună decât 1,5 km.

Precizia este CI-gate, nu o singură verificare:

  • api-accuracy.yml - pe fiecare PR în backend-ul codului rulează întregul set de sursă fixată + triunghiare. Testul roșu blochează merge-ul.
  • check-eclipse-accuracy.yml - o dată pe an se testează umbre cu catalogul NASA; deosebire mai mare decât pragul automatizează issue-ul.
  • check-sweph-updates.yml - o dată pe săptămână se testează upstream-ul Swiss Ephemeris și WASM-pachetul; o nouă versiune - issue pe revizuire, fără automerj (actualizarea rulii ephemeridei - prea sensibilă pentru autoupdate).

Garantia simplă: pozițiile planetare în limitele < 0.1 secunde de arc față de etalonul Swiss Ephemeris, și această limită este protejată automat, nu promisă în README. Dacă odată apare o regresie, ea va cădea în CI-ul nostru, nu în plângerea utilizatorului tău.

Versiunea publică a acestor cifre, cu tabelă de deosebire pe cartele specifice, trăiește pe pagina Precizie.

MakSeong · AstroWay

I build the AstroWay API: Swiss Ephemeris on a clean REST surface, and I write about the dull parts that turn out to matter.

// construiește pe asta

Același Swiss Ephemeris ca în Solar Fire - în 4 linii de cod.

Cheie gratuită fără card. 5.000 de apeluri pe lună până la prima plată.

Mai multe din blog toate articolele →

Engineering 2026-07-15

Trei SDK-uri oficiale: TypeScript, Python, PHP în loc de curl brut

HTTP brut funcționează, dar un client tipizat economisește ore: autocompletare căi, tipuri de cerere și răspuns, retry încorporat pentru 408/409/429/5xx și ierarhie de erori în stil Stainless. Explorăm cele trei SDK-uri oficiale - @astroway/sdk (npm), astroway (PyPI), astroway/sdk (Packagist) - și cum sunt generate dintr-un contract OpenAPI unic.

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.