AstroWay/api v2.190.0 · nl
alle systemen normaal

Hoe we de nauwkeurigheid onder controle houden: CI versus swetest en NASA

De nauwkeurigheid van onze astro-API kan gemakkelijk afnemen door één refactor van de ephemerides. We analyseren de beveiliging: één Swiss Ephemeris-kern op de browser en server, honderden gefreezeerde snapshot's op referenties en triangulatie van elk PR tegen swetest CGI, Kerykeion, Prokerala en het catalogus van NASA-sterren.

Precisie is het waarop de gebruiker je onopvallend controleert op AstroWay. Als de huidige kaart op een hoekminuut is uitgevallen, zal de klacht snel binnenkomen. En het ergste van alles is dat precisie gemakkelijk kan worden gebroken onopvallend: één refactor in de ephemeride-code, en de helft van de endpoints is stil naar de secundaire cirkel gegaan.

Dit is hoe we dit voorkomen.

De posities van de planeten worden berekend door Swiss Ephemeris, samengesteld in WASM. Het belangrijkste is dat deze kern hetzelfde is in zowel de browser van onze applicatie als op de server van de API. Er is één codebasis core/, getrokken in de backend via cross-repo alias en ingebouwd in de build. Er is geen “browserische” en “serverische” implementatie die kan uitvallen - ze gaan nergens heen.

Voor data buiten het hoofdgebied van de ephemeride is er een analytische fallback (Moshier), iets grover, maar zonder uitvalpunten op de grenzen. Openheid van zaken: we publiceren geen specifieke versie van de ruis, omdat de reële versie van de kern lager is dan de meest recente upstream, en het schreeuwen van een grote cijfer zou een leugen zijn.

Elke berekenende endpoint heeft een set bevroren snapshots - 873 JSON-fiks op het moment van deze build. De runner loopt de endpoint op de referentiekaarten en vergeleek hem met de fiks. Als het enige verschil in de planetaire breedte meer is dan 5e-5° (0.18 ″), dan valt de test.

De referentiekaarten zijn zo gekozen dat ze op de randen slaan, en niet alleen op het “handige” midden:

  • Monroe, Diana, Einstein, Bowie - historische kaarten met bekende geboortegegevens
  • polar breedte - waar systemen thuis worden geboren
  • equatoriale - waar ze anders gedragen
  • zuidelijke halveid - controle van de spiegelbeeldigheid

Randgevallen vangen precies die regressies die niet zichtbaar zijn op de kaart van de gewone man.

Bevroren snapshots vangen regressies ten opzichte van zichzelf. Om de absolute waarheid te controleren, wordt elk release vergeleken met onafhankelijke bronnen:

Tegen wieWat controleertVerschillen
swetest CGI (Astrodienst)planetaire breedtes, kuipunten van systemen0.000 ″
Kerykeion (Python, pyswisseph)onafhankelijke implementatie van SwEph< 0.2 ″
Prokerala (sidereel Lahiri)sidereele posities8-17 ″, systeemverschillen in de formule van Ayanamshi, niet ruis
NASA 5-Millennium Eclipse Catalogtijd en type eclipsen< 1 min

Verschillen met Prokerala - geen fout: het zijn verschillende implementaties van de formule van Lahiri, en we documenteren dit expliciet, en niet door het te verbergen. Met swetest, die de standaard van de industrie is, is de verschil nul.

Astronomische lijnen worden apart gecontroleerd op geometrische precisie - de precisie op de evenaar is beter dan 1.5 km.

Precisie is CI-gate, en niet eenmalige controle:

  • api-accuracy.yml - op elk PR loopt de backend-code de hele set van bevroren snapshots + triangulatie. De rode test blokkeert de merge.
  • check-eclipse-accuracy.yml - één keer per jaar controleert hij eclipsen met het catalog van NASA; als het verschil groter is dan de drempel, dan wordt automatisch een issue aangemaakt.
  • check-sweph-updates.yml - één keer per week controleert hij de upstream Swiss Ephemeris en het WASM-pakket; als er een nieuwe versie is, dan wordt automatisch een issue aangemaakt.

Garantie: planetaire posities binnen < 0.1 graden van het referentie-Swiss Ephemeris, en deze grens wordt automatisch beschermd, en niet door een belofte in README. Als er ooit een regressie optreedt, dan valt deze in onze CI, en niet in de klacht van je gebruiker.

De openbare versie van deze cijfers, met een tabel van de verschillen op specifieke kaarten, leeft op de pagina Precisie.

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.

// bouw hierop

Dezelfde Swiss Ephemeris als in Solar Fire - in 4 regels code.

Gratis sleutel zonder kaart. 5.000 calls per maand tot de eerste betaling.

Meer uit de blog alle berichten →

Engineering 2026-07-15

Drie officiële SDK's: TypeScript, Python, PHP in plaats van rauwe curl

Rauwe HTTP werkt, maar een getypeerde client bespaart uren: autocompletion voor paden, request- en responstypes, ingebouwde retry voor 408/409/429/5xx en Stainless-style foutenhiërarchie. We bespreken de drie officiële SDK's - @astroway/sdk (npm), astroway (PyPI), astroway/sdk (Packagist) - en hoe ze zijn gegenereerd uit één OpenAPI-contract.

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.