Публичные API
Anon публикует небольшой набор публичных HTTP API. Это JSON-эндпоинты только для чтения на https://api.anon.inc, которые может вызывать кто угодно: кошельки, дашборды, страницы статуса и скрипты. API-ключ и аккаунт не нужны, а браузер на любом сайте может их читать.
Бета: все API на этой странице находятся в бета-версии. Поля, значения и форма ответа могут измениться без предупреждения. Пишите клиент так, чтобы он игнорировал неизвестные поля и значения, и читайте раздел о статусе беты и журнал изменений на странице каждого API.
Список API
| API | Эндпоинт | Что возвращает | Кеш | Схема |
|---|---|---|---|---|
| Доступность RAILGUN | GET /api/v1/railgun/liveness |
Отвечают ли прямо сейчас сервисы Railgun, от которых зависит Anon, и не отстают ли они, по каждой сети. | 15 с в браузерах, 30 с в общих кешах | JSON Schema |
| История доступности RAILGUN | GET /api/v1/railgun/liveness/history |
Последние 14 дней того же отчёта в 5-минутных интервалах с доступностью за 24 часа, 7 и 14 дней. | 60 с в браузерах, 120 с в общих кешах | JSON Schema |
Чтобы решить, что верно сейчас, используйте живой эндпоинт, а для графиков и страниц статуса — историю. Оба показывают то, что видит собственный монитор Anon. Это не официальный статус Railgun и никогда не сигнал «безопасно проводить транзакции».
curl -i https://api.anon.inc/api/v1/railgun/liveness
curl -i https://api.anon.inc/api/v1/railgun/liveness/history
Что общего у всех публичных API
| Параметр | Значение |
|---|---|
| Базовый URL | https://api.anon.inc |
| Аутентификация | Нет |
| Методы | GET и HEAD. OPTIONS отвечает на предварительные запросы CORS. Любой другой метод получает 405. |
| Параметры запроса | Нет. Любая строка запроса игнорируется. |
| Формат | JSON (application/json; charset=utf-8) с полем schemaVersion |
| Статус | Бета, без срока уведомления и без SLA |
- CORS. Каждый ответ содержит
Access-Control-Allow-Origin: *иAccess-Control-Expose-Headers: ETagи никогда не содержитAccess-Control-Allow-Credentials. Обычномуfetchпредварительный запрос не нужен. - Кеширование. Каждый
200содержитCache-ControlиETag. Отправьте ETag обратно вIf-None-Match, и неизменившийся ответ придёт как304без тела. CDN хранит отдельную копию для каждого значения заголовка запросаOrigin. - Ошибки. Ветвитесь по коду состояния HTTP, а не по тексту сообщения. Ошибка самого API — это
{"error": "<message>"}сCache-Control: no-store.503означает, что данные сейчас недоступны: повторяйте запрос с нарастающими паузами. - Ограничение частоты. Если с одного IP приходит больше примерно 120 запросов в минуту, CDN примерно 60 секунд отвечает
429(ошибка Cloudflare 1015). Попадания в кеш тоже учитываются. В браузере у этого429нет заголовка CORS, поэтомуfetchзавершается сетевой ошибкой. - JSON Schema намеренно нестрогие. Они описывают сегодняшние ответы и не являются обещанием.
Добросовестное использование
- Соблюдайте
Cache-Controlи используйтеETag, чтобы неизменившийся ответ обходился304. - Запрашивайте данные, когда пользователь открывает экран, которому они нужны, а не по таймеру.
- Серверы, которые опрашивают API, должны отправлять описательный
User-Agent, напримерmy-wallet/1.4 (+https://example.com/contact). - Если вы обслуживаете много пользователей, получайте данные своим сервером и кешируйте их там.
- При
429и5xxделайте паузу и продолжайте показывать последний корректный ответ.
Другие маршруты на api.anon.inc
Публичные API — это только эндпоинты, перечисленные на этой странице. Остальные маршруты на api.anon.inc обслуживают собственные приложения и сайты Anon. Некоторые из них отвечают без ключа, но они не документированы для сторонних клиентов и могут в любой момент измениться, переехать или стать недоступными. Не стройте на них свои решения.