API покинула бета-статус второго июля. Он вышел в составе ревизии платформы 5.4 в июне, работал в режиме пригласительной беты с февраля с чуть более чем четырьмя сотнями аккаунтов и не менял форму с апреля. Версионирован, документирован и покрыт тем же обязательством по доступности, что и панель.
Назвать это опозданием было бы мягко. Причина не тайна: интерфейс поверх системы провижининга, которой требовалось три с половиной минуты на сборку сервера, был бы интерфейсом для опроса спиннера. Мы переписали очередь сначала, в 2025 году, и порядок был осознанным, а не случайным.
Что она делает
| Группа | Что можно делать | Примечания |
|---|---|---|
| Инстансы | Создавать, изменять размер, пересобирать, делать снапшоты, восстанавливать, уничтожать | Увеличение размера — вживую, уменьшение требует одной перезагрузки |
| Образы | Просматривать каталог ОС, регистрировать свой ISO по ссылке | Установка из своего ISO всё ещё вручную и всё ещё медленно |
| Сеть | Добавлять IPv4, редактировать обратный DNS, запрашивать IPv6 /48 | Делегировано, никогда не проксируется |
| Фильтрация | Читать события атак, отправлять правила L7 на DDoS Pro | У базовой фильтрации нечего настраивать |
| Биллинг | Читать баланс, просматривать счета, открывать счёт на пополнение | Никаких полей для карт, потому что нет карт |
| События | Опрашивать журнал событий или регистрировать вебхук | Подписан секретом на аккаунт |
Всё — JSON поверх HTTPS, и каждый объект, который может показать панель, — это объект, который может вернуть API. Нет уровня функциональности, зарезервированного для веб-интерфейса, — это обещание, которое нам чего-то стоит: панель теперь использует те же публичные эндпоинты, что и вы, так что сломанный API — это сломанная панель, и мы узнаём об этом немедленно.
Аутентификация
Токены создаются в панели, с областью действия, и показываются ровно один раз. Никакой аутентификации по паролю, никаких сессионных куки, никакого редиректа на провайдера идентификации, которому нам пришлось бы доверять то, что мы с немалым трудом решили не собирать.
Токен несёт область чтения, записи или биллинга, опциональное ограничение на один сайт, опциональное ограничение на список инстансов и срок действия, который вы устанавливаете. Шестьдесят дней — значение по умолчанию. Токены можно отзывать по отдельности, и отзыв действует на периферии в течение двух секунд, что важнее, чем звучит, когда билд-сервер пересобирает тот, кто не знал, что на нём было.
Поскольку аккаунт здесь — это адрес электронной почты и хеш пароля, нет объекта клиента, который можно получить. В API нет поля имени, поля адреса, поля компании и поля налогов — ровно по той причине, по которой их нет в форме регистрации.
Лимиты запросов, идемпотентность, ошибки
Шестьсот чтений в минуту и шестьдесят записей, считаются отдельно для каждого токена, а не для аккаунта, так что один шумный скрипт не сможет заморить остальную автоматизацию. Лимиты возвращаются в заголовках каждого ответа, включая успешные.
Каждая запись принимает ключ идемпотентности. Повторите создание с тем же ключом — и вы получите исходный инстанс, а не второй, выставленный к оплате рядом с ним. Это единственная функция, за которую бета-тестеры благодарили нас больше всего, что говорит вам кое-что о том, как остальная индустрия обрабатывает таймаут при провижининге.
Ошибки — это документированный машинный код, одно читаемое человеком предложение и идентификатор запроса. Вставьте идентификатор в тикет — и поддержка увидит тот же запрос, что и вы, не прося вас воспроизвести его.
Что она намеренно не делает
- Никаких фиатных денег. Никогда. Эндпоинты биллинга читают ваш баланс и открывают счёт на пополнение. Расчёт остаётся за OxaPay и выбранной вами сетью, как описано на странице оплаты.
- Никаких субакаунтов или ролей. Постоянно запрашивается. Не реализовано, потому что очевидная реализация означает хранение структуры «кто у кого работает», и мы предпочитаем выдавать токены с ограниченным сроком действия, а оргструктуру держать при себе.
- Никакого автоскейлинга. Инстансы — это выделенные ядра на реальном кремнии, а не пул, который мы можем создать из воздуха. Вы создаёте и уничтожаете по своему расписанию; мы не будем притворяться, что под этим лежит эластичная абстракция.
- Никакой матрицы SDK. Один эталонный клиент и обычный HTTP как контракт. Шесть полуподдерживаемых языковых биндингов старели бы хуже, чем документация.
Что бы нам хотелось сломать
Бета нашла девять багов, которые стоит исправить, три из которых были нашими в интересном смысле, а шесть были враньём документации. Если вы найдёте десятый, злоупотребление лимитом запросов — это нормально и ожидаемо при тестировании, и поддержка предпочтёт идентификатор запроса, а не скриншот.
Справка — в документации. Журнал изменений для ревизии 5.4 перечисляет семь эндпоинтов, которые изменили форму между февралём и апрелем, и это единственные ломающие изменения, которые будут внутри версии один.