AstroWay/api v2.325.2 · nl
alle systemen normaal

Zo houden we de nauwkeurigheid onder controle: CI tegen swetest en NASA

Nauwkeurigheid in een astrologie-API gaat makkelijk achteruit door één refactor van de efemeriden. We laten zien hoe we ons beschermen: één Swiss Ephemeris-kern voor app en API, honderden bevroren snapshots op referentiehoroscopen en triangulatie van elke PR tegen swetest CGI, Kerykeion, Prokerala en de eclipscatalogus van NASA.

Nauwkeurigheid is waarop een gebruiker je stilletjes controleert via Astrodienst. Wijkt een geboortehoroscoop een boogminuut af, dan komt er snel een klacht. En het ergste is dat nauwkeurigheid ongemerkt kapot kan gaan: één refactor in de efemeridencode, en de helft van de endpoints schuift stilletjes een paar boogseconden op.

Zo voorkomen we dat.

Planeetposities worden berekend door Swiss Ephemeris. Het belangrijkste: onze app en de API delen één rekenkern, één codebase. Er zijn geen twee implementaties die uit elkaar kunnen lopen, dus er is niets dat kan afwijken.

Voor datums buiten het hoofdbereik van de efemeriden is er een analytische fallback (Moshier), iets grover, maar zonder sprongen op de grenzen. Bewuste eerlijkheid: we noemen publiekelijk geen specifieke engineversie, omdat de werkelijke versie van de kern lager is dan de nieuwste upstream, en een indrukwekkend getal noemen zou een leugen zijn.

Elk rekenendpoint heeft een set bevroren snapshots: 888 JSON-fixtures op het moment van deze build. De runner draait het endpoint op referentiehoroscopen en vergelijkt het resultaat byte voor byte (binnen een tolerantie) met de fixture. Elke afwijking in planeetlengte groter dan 5e-5° (0.18″) laat de test falen.

De referentiehoroscopen zijn zo gekozen dat ze de randen raken, niet alleen het “handige” midden:

  • Monroe, Diana, Einstein, Bowie: historische horoscopen met bekende geboortegegevens
  • polaire breedte: waar huizensystemen ontaarden
  • equatoriale breedte: waar ze zich anders gedragen
  • zuidelijk halfrond: controle op spiegeling

Randgevallen vangen precies de regressies die je op de horoscoop van een doorsnee Kyivenaar niet ziet.

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

WaartegenWat het controleertAfwijking
swetest CGI (Astrodienst)planeetlengtes, huiscuspen0.000″
Kerykeion (Python, pyswisseph)onafhankelijke implementatie van SwEph< 0.2″
Prokerala (sidereal Lahiri)siderische posities8-17″, een systematisch verschil in de ayanamsa-formule, niet in de engine
NASA 5-Millennium Eclipse Catalogtijdstip en type van eclipsen< 1 min

De afwijking met Prokerala is geen fout: het zijn verschillende implementaties van de Lahiri-formule, en we documenteren dat expliciet in plaats van het te verbergen. Met swetest, de industriestandaard, is de drift nul.

Astrocartografische lijnen worden apart geometrisch gecontroleerd: de nauwkeurigheid op de evenaar is beter dan 1.5 km.

Nauwkeurigheid is een CI-gate, geen eenmalige controle:

  • api-accuracy.yml: draait bij elke PR op de backendcode de volledige set snapshots plus de triangulatie. Een rode test blokkeert de merge.
  • check-eclipse-accuracy.yml: vergelijkt eens per jaar de eclipsen met de NASA-catalogus; een afwijking boven de drempel opent automatisch een issue.
  • check-sweph-updates.yml: houdt wekelijks de upstream van Swiss Ephemeris in de gaten; een nieuwe versie wordt een issue voor review, zonder automatische merge (een update van de efemeridenengine is te gevoelig voor een automatische update).

De garantie is eenvoudig: planeetposities liggen binnen < 0.1 boogseconde van de referentie-Swiss Ephemeris, en die grens wordt bewaakt door automatisering, niet door een belofte in een README. Duikt er ooit een regressie op, dan faalt die in onze CI, niet in een klacht van jouw gebruiker.

De publieke versie van deze cijfers, met een tabel van afwijkingen per horoscoop, staat op de pagina Nauwkeurigheid.

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.

// bouw hierop

Posities tot op de boogseconde 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 en PHP in plaats van kale curl

Kale HTTP werkt, maar een getypeerde client scheelt uren: autocompletion van paden, request- en responsetypes, ingebouwde retry bij 408/409/429/5xx en een foutenhiërarchie in Stainless-stijl. We bespreken de drie officiële SDK's, @astroway/sdk (npm), astroway (PyPI) en astroway/sdk (Packagist), en hoe ze uit één OpenAPI-contract worden gegenereerd.

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.