AstroWay/api v2.217.2 · fr
tous les systèmes sont opérationnels

Trois SDK officiels : TypeScript, Python, PHP au lieu de curl brut

Le HTTP brut fonctionne, mais un client typé fait gagner des heures : autocomplétion des chemins, types de requête et de réponse, retry intégré sur 408/409/429/5xx et hiérarchie d'erreurs à la Stainless. Tour d'horizon des trois SDK officiels, @astroway/sdk (npm), astroway (PyPI), astroway/sdk (Packagist), et de la manière dont ils sont générés à partir d'un même contrat OpenAPI.

On peut appeler l’API avec un curl ou un fetch bruts : le contrat est simple, un seul en-tête X-Api-Key, du JSON dans les deux sens. Mais quand il y a plus de 761 endpoints et que les corps de requête comptent une dizaine de champs, un client typé fait gagner des heures : autocomplétion des chemins, types de requête et de réponse, nouvelles tentatives automatiques sur un réseau instable.

C’est pourquoi nous avons trois SDK officiels, générés à partir d’un même contrat OpenAPI 3.1.

Fenêtre de terminal
# TypeScript / JavaScript
npm install @astroway/sdk
# Python
pip install astroway
# PHP
composer require astroway/sdk

Le même appel de thème natal dans trois langages.

TypeScript : une fine surcouche au-dessus de openapi-fetch (~6 KB de runtime), avec autocomplétion des chemins :

import { Astroway } from '@astroway/sdk';
const aw = new Astroway({ apiKey: process.env.ASTROWAY_API_KEY! });
const { data: chart } = await aw.client.POST('/chart', {
body: {
date: '1990-07-14',
time: '14:30:00',
timezoneOffset: 3,
latitude: 50.4501,
longitude: 30.5234,
houseSystem: 'P',
},
});
// aw.client.POST is the raw typed fetch, so `chart` is the { ok, data } envelope
console.log(chart.data.houses.ascendant); // 212.0952574979425

Python : Astroway synchrone et AsyncAstroway asynchrone avec une surface identique, au-dessus de httpx :

from astroway import Astroway
aw = Astroway(api_key=os.environ['ASTROWAY_API_KEY'])
chart = aw.post('/chart', body={
'date': '1990-07-14',
'time': '14:30:00',
'timezoneOffset': 3,
'latitude': 50.4501,
'longitude': 30.5234,
'houseSystem': 'P',
})
print(chart['houses']['ascendant'])

PHP : au-dessus de Guzzle 7 et PSR-18 :

<?php
use Astroway\Astroway;
$aw = new Astroway(['apiKey' => getenv('ASTROWAY_API_KEY')]);
$chart = $aw->post('/chart', body: [
'date' => '1990-07-14',
'time' => '14:30:00',
'timezoneOffset' => 3,
'latitude' => 50.4501,
'longitude' => 30.5234,
'houseSystem' => 'P',
]);
echo $chart['houses']['ascendant'];

Trois langages différents, mais les mêmes garanties, car les trois sont générés à partir du même contrat OpenAPI :

  • Types de requête et de réponse pour tous les endpoints. TS offre l’autocomplétion des chemins et des corps typés ; Python, un paquet typé PEP 561 ; PHP, des signatures typées. C’est l’IDE qui te souffle les champs, pas la documentation dans l’onglet d’à côté.
  • Retry intégré avec backoff sur 408, 409, 429, 5xx. Une panne réseau passagère ou un rate limit ne fait pas planter ton code : le client réessaie tout seul.
  • Hiérarchie d’erreurs à la Stainless. Les erreurs sont typées par classes, pas une chaîne dans un catch. Tu attrapes un type précis, RateLimitError, ValidationError, et tu le traites de façon ciblée.
  • OpenAPI 3.1 comme source. Un endpoint ajouté à l’API apparaît dans les SDK à la release suivante, sans duplication manuelle.
  • OIDC + provenance SLSA à la publication : TS et PHP via Trusted Publisher / auto-mirror, Python via Trusted Publisher OIDC sur PyPI. La chaîne d’approvisionnement est vérifiable.

La Base URL est la même partout, https://api.astroway.info/v1/, et la clé passe par l’en-tête X-Api-Key. C’est la même clé que pour les appels HTTP bruts ; le SDK ne change rien à l’autorisation.

Au-dessus des trois SDK de base, il existe des intégrations prêtes à l’emploi pour des stacks précises :

  • @astroway/react : des hooks pour les applications React
  • astroway/sdk-symfony : un bundle pour Symfony
  • astroway/sdk-laravel : un paquet pour Laravel

En cours de développement, mais pas encore publiés : Go, Ruby et Rust. Leurs pages figurent déjà dans le catalogue des SDK avec un aperçu de la commande d’installation ; quand le paquet arrive sur le registry, le statut passe à “disponible”.

  1. Une clé sur dashboard/sign-up : 10 000 crédits par mois gratuitement
  2. Installe le SDK dans ton langage (commandes ci-dessus)
  3. Premier appel : le thème natal du snippet ci-dessus, avec ta clé dans ASTROWAY_API_KEY

La liste complète des SDK, avec des exemples pour chacun, se trouve sur la page SDK.

MakSeong · AstroWay

Je fais l'API AstroWay : j'enveloppe Swiss Ephemeris dans du REST pur et j'écris sur les détails ennuyeux qui sont en fait importants.

// construis avec ça

Le même Swiss Ephemeris que Solar Fire - en 4 lignes de code.

Clé gratuite sans carte. 5 000 appels par mois avant le premier paiement.

Plus d'articles du blog voir tous les articles →

Ephemeris 2026-07-19

Comment nous gardons la précision sous contrôle : la CI contre swetest et la NASA

Dans une API d'astrologie, la précision se dégrade facilement après un seul refactoring des éphémérides. Voici notre protection : un seul noyau Swiss Ephemeris pour l'application et l'API, des centaines de snapshots figés sur des thèmes de référence et la triangulation de chaque PR contre swetest CGI, Kerykeion, Prokerala et le catalogue d'éclipses de la NASA.

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.