Подводные камни
Как API на самом деле ведёт себя там, где сгенерированный код обычно ошибается. Каждый пункт ниже описывает, как сервер обрабатывает запрос, а не вопрос стиля.
Запросы
- Слеш в конце обязателен.
/api/astro/tithi/работает, а/api/astro/tithiотвечает 301, и клиент, который идёт по редиректу, повторяет запрос как GET без тела. - Одно и то же значение в разных эндпоинтах называется по-разному. Момент почти везде —
date_time, но в/api/astro/chart/и дробных картах —datetime. Смещение обычно —timezone_as_float, но кое-где —timezone,tzилиtime_zone. Лунный узел —rahu,nodeилиnode_type, и значения по умолчанию у них разные. Собирайте тело для каждого эндпоинта по его списку полей, а не используйте одно тело везде. - Долгота к западу от Гринвича отрицательная, широта к югу от экватора — тоже. Нью-Йорк — это
-74.006, а не74.006. - Допустимая широта у эндпоинтов разная: большинство эндпоинтов карт и панчанги принимают до ±89.9, эндпоинты прашны Аштамангала и Джамаккол — до ±66. Значение вне диапазона эндпоинта отклоняется с ошибкой 400.
Неверные данные, которые всё равно дают 200
date_timeбез смещения не считается местным временем места: большинство эндпоинтов понимают его как UTC+05:30, некоторые — как UTC. Вы получите обычный ответ 200, но для другого момента, иногда даже для предыдущего дня. Всегда передавайте смещение или Z.timezone_as_floatне сверяется со смещением вdate_time. Если они расходятся, вы получите 200 для неверного момента. Указывайте смещение, действовавшее на ту дату (с учётом летнего времени), а не сегодняшнее;/api/astro/date_time/вычисляет его по координатам.- Несколько полей при неверном значении не выдают ошибку, а подставляют запасной вариант. В
/api/astro/chart/любое значениеascendant_pos, кромеstartилиend, означает куспид дома, а в/api/astro/festival/любое значениеmoon_option, кромеpoornima, работает какamavas. Опечатка здесь меняет ответ без всякой ошибки.
Ключи
- Если у эндпоинта есть таблица ключей, то ключ не из неё отклоняет весь запрос с ошибкой 400, и в message перечислены нераспознанные ключи. Ничего не рассчитывается и ничего не списывается.
- Названия ключей точные и порой неожиданные:
/api/astro/panchanga/используетyogamдля йоги дня,rahu_kaalamиcalcualte_special_tithi(именно так, с опечаткой). Копируйте их из таблицы ключей, а не угадывайте. - Ключ, которому нужно дополнительное поле, без этого поля даёт ошибку 400 — например, ключ
phone_numberв/api/astro/numerology/без значенияphone_number. - Успешный вызов стоит один кредит, сколько бы ключей в нём ни было. Запрашивайте всё нужное одним вызовом —
tithi,vaara,yogamиkaranaвместе, — а не отдельный вызов на каждый ключ. - У узкоспециализированных эндпоинтов вроде
/api/astro/tithi/и/api/astro/rahu-kaal/нет таблицы ключей: они всегда возвращают один и тот же набор, а переданный им массивkeysне используется. - В
/api/astro/numerology/допустимые ключи зависят отsystem. Ключ из набора другой системы вернёт 400 с его названием.
Кредиты, ошибки и лимиты
- Большинство эндпоинтов стоят один кредит за успешный вызов.
/api/astro/chat/,/api/astro/pdf/horoscope/и/api/astro/pdf/yearbook/стоят по 25 — не вызывайте их в циклах и при повторных попытках. - Неудачные вызовы бесплатны: кредиты резервируются до начала расчёта и возвращаются при любом ответе не из диапазона 2xx — в таком ответе стоит
X-Credits-Charged: 0. - Платные ответы содержат
X-Credits-Cost,X-Credits-ChargedиX-Credits-Remaining, а также поминутныеX-RateLimit-LimitиX-RateLimit-Remaining. Читайте их, а не считайте баланс сами. - Когда кредиты закончились, приходит 402 с
messageinsufficient_credits; в егоdataестьcost_credits,credits_remainingиrecharge_url. Повторять запрос бесполезно, пока тариф не повышен или квота не обновилась. - При превышении поминутного лимита приходит 429 с
messageapi_key_rate_limitedи заголовкомRetry-After(то же значение — вretry_after_secondsвнутриdata). Подождите это время, прежде чем повторять запрос. - Искажённый, отозванный или просроченный ключ возвращает 401
invalid_api_key. Маршрут, право доступа (scope) или IP-адрес, которые вашему ключу запрещены, дают 403endpoint_not_allowed,scope_not_allowedилиip_not_allowed. - Ошибки проверки ключа и кредитов выглядят как
{ "error": "…", "message": "insufficient_credits", "is_error": true, "data": { … } }: опирайтесь на код вmessage. Ответы расчётов при неудаче приходят в формате{ "data": {}, "status": 400, "is_error": true, "message": "…" }, а причина описана текстом вmessage. В обоих случаях естьis_error. - Два PDF-эндпоинта возвращают сам PDF (
application/pdf), а не JSON. Запишите тело ответа в файл — ссылки для скачивания потом не будет.
Астрология
- Ведические эндпоинты работают в сидерическом зодиаке и сами делают поправку на аянамшу на сервере; маршруты
/api/astro/western/по умолчанию тропические. Не вычитайте аянамшу из результата сами. /api/astro/kp-chart/использует куспиды Плацидуса в сидерическом зодиаке, поэтому для того же рождения положения по домам могут отличаться от/api/astro/chart/. Это метод KP, а не несогласованность.- Рашифал — прогноз по знаку, без натальной карты: передавайте
rashiанглийским названием знака, напримерleo, а не данные рождения. - Карты таро вытягиваются случайно, если не передать
seed. Каждый ответ возвращает использованный seed — сохраните его, если расклад нужно будет показать снова точно таким же. /api/astro/numerology/iching/численно сопоставляет дату и имя с одной из 64 гексаграмм. Гадания нет, поэтому нет ни изменяющихся черт, ни второй гексаграммы.