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

Cum ținem precizia sub control: CI contra swetest și NASA

Precizia unui API de astrologie se degradează ușor după o singură refactorizare a efemeridelor. Explicăm protecția: un singur nucleu Swiss Ephemeris pentru aplicație și API, sute de snapshot-uri înghețate pe hărți de referință și triangularea fiecărui PR contra swetest CGI, Kerykeion, Prokerala și a catalogului de eclipse NASA.

Precizia este lucrul pe care utilizatorul ți-l verifică în tăcere pe Astrodienst. Dacă o hartă natală diferă cu un minut de arc, plângerea vine repede. Și cel mai rău este că precizia se strică ușor fără să observe nimeni: o refactorizare în codul efemeridelor și jumătate dintre endpoint-uri alunecă pe tăcute cu câteva secunde de arc.

Iată cum împiedicăm asta.

Pozițiile planetare sunt calculate de Swiss Ephemeris. Esențialul: aplicația noastră și API-ul au același nucleu de calcul, aceeași bază de cod. Nu există două implementări care să poată diverge, deci nu are ce să diveargă.

Pentru datele din afara intervalului principal al efemeridelor există un fallback analitic (Moshier), puțin mai grosier, dar fără discontinuități la granițe. Onestitate asumată: nu declarăm public versiunea concretă a motorului, pentru că versiunea reală a nucleului este mai veche decât cea mai nouă din upstream, iar a scrie un număr impresionant ar fi o minciună.

Fiecare endpoint de calcul are un set de snapshot-uri înghețate: 888 fixture-uri JSON la momentul acestui build. Runner-ul rulează endpoint-ul pe hărți de referință și compară rezultatul byte cu byte (în limita toleranței) cu fixture-ul. Orice abatere a longitudinii planetare mai mare de 5e-5° (0.18″) pică testul.

Hărțile de referință sunt alese astfel încât să lovească în margini, nu doar în centrul “comod”:

  • Monroe, Diana, Einstein, Bowie: hărți istorice cu date de naștere cunoscute
  • latitudine polară: acolo unde sistemele de case degenerează
  • ecuatorială: acolo unde se comportă altfel
  • emisfera sudică: verificarea simetriei în oglindă

Tocmai cazurile limită prind regresiile care nu se văd pe harta unui locuitor obișnuit al Kievului.

Snapshot-urile prind regresiile față de ele însele. Pentru a verifica adevărul absolut, fiecare release este comparat cu surse independente:

Contra ceCe verificăDiferență
swetest CGI (Astrodienst)longitudini planetare, cuspidele caselor0.000″
Kerykeion (Python, pyswisseph)implementare independentă a SwEph< 0.2″
Prokerala (sidereal Lahiri)poziții siderale8-17″, diferență sistematică în formula ayanamsa, nu în motor
NASA 5-Millennium Eclipse Catalogora și tipul eclipselor< 1 min

Diferența față de Prokerala nu este o eroare: sunt implementări diferite ale formulei Lahiri, iar noi documentăm asta explicit, în loc să o ascundem. Față de swetest, care este referința industriei, deriva este zero.

Liniile de astrocartografie sunt verificate separat, geometric: precizia la ecuator este mai bună de 1.5 km.

Precizia este un gate de CI, nu o verificare punctuală:

  • api-accuracy.yml: la fiecare PR în codul de backend rulează întregul set de snapshot-uri + triangularea. Un test roșu blochează merge-ul.
  • check-eclipse-accuracy.yml: o dată pe an compară eclipsele cu catalogul NASA; o diferență peste prag deschide automat un issue.
  • check-sweph-updates.yml: săptămânal urmărește upstream-ul Swiss Ephemeris; o versiune nouă înseamnă un issue pentru review, fără automerge (actualizarea motorului de efemeride este prea sensibilă pentru un update automat).

Garanția este simplă: pozițiile planetare se încadrează în < 0.1 secunde de arc față de Swiss Ephemeris de referință, iar această limită este protejată de automatizare, nu de o promisiune în README. Dacă vreodată apare o regresie, ea va pica în CI-ul nostru, nu în plângerea utilizatorului tău.

Versiunea publică a acestor cifre, cu tabelul diferențelor pe hărți concrete, se află pe pagina Precizie.

MakSeong · AstroWay

I build the AstroWay API: arc-second astrology math on a clean REST surface, and I write about the dull parts that turn out to matter.

// construiește pe asta

Poziții la secundă de arc î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 și PHP în loc de curl simplu

HTTP-ul simplu funcționează, dar un client tipizat economisește ore: autocompletare pentru căi, tipuri de cerere și răspuns, retry integrat la 408/409/429/5xx și o ierarhie de erori în stil Stainless. Analizăm cele trei SDK-uri oficiale, @astroway/sdk (npm), astroway (PyPI) și astroway/sdk (Packagist), și cum sunt generate dintr-un singur contract 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.