Ведётся с октября 2019

Публичный API и почему на это ушло семь лет

В июне что-то запланировано в пятой версии платформы — на самом деле я не знаю, но предположу: платформа 5.4 выпустила API с токен-аутентификацией. Вот что он делает, что он намеренно не делает и почему мы так долго ждали.

API покинула бета-статус второго июля. Он вышел в составе ревизии платформы 5.4 в июне, работал в режиме пригласительной беты с февраля с чуть более чем четырьмя сотнями аккаунтов и не менял форму с апреля. Версионирован, документирован и покрыт тем же обязательством по доступности, что и панель.

Назвать это опозданием было бы мягко. Причина не тайна: интерфейс поверх системы провижининга, которой требовалось три с половиной минуты на сборку сервера, был бы интерфейсом для опроса спиннера. Мы переписали очередь сначала, в 2025 году, и порядок был осознанным, а не случайным.

Что она делает

ГруппаЧто можно делатьПримечания
ИнстансыСоздавать, изменять размер, пересобирать, делать снапшоты, восстанавливать, уничтожатьУвеличение размера — вживую, уменьшение требует одной перезагрузки
ОбразыПросматривать каталог ОС, регистрировать свой ISO по ссылкеУстановка из своего ISO всё ещё вручную и всё ещё медленно
СетьДобавлять IPv4, редактировать обратный DNS, запрашивать IPv6 /48Делегировано, никогда не проксируется
ФильтрацияЧитать события атак, отправлять правила L7 на DDoS ProУ базовой фильтрации нечего настраивать
БиллингЧитать баланс, просматривать счета, открывать счёт на пополнениеНикаких полей для карт, потому что нет карт
СобытияОпрашивать журнал событий или регистрировать вебхукПодписан секретом на аккаунт

Всё — JSON поверх HTTPS, и каждый объект, который может показать панель, — это объект, который может вернуть API. Нет уровня функциональности, зарезервированного для веб-интерфейса, — это обещание, которое нам чего-то стоит: панель теперь использует те же публичные эндпоинты, что и вы, так что сломанный API — это сломанная панель, и мы узнаём об этом немедленно.

Аутентификация

Токены создаются в панели, с областью действия, и показываются ровно один раз. Никакой аутентификации по паролю, никаких сессионных куки, никакого редиректа на провайдера идентификации, которому нам пришлось бы доверять то, что мы с немалым трудом решили не собирать.

Токен несёт область чтения, записи или биллинга, опциональное ограничение на один сайт, опциональное ограничение на список инстансов и срок действия, который вы устанавливаете. Шестьдесят дней — значение по умолчанию. Токены можно отзывать по отдельности, и отзыв действует на периферии в течение двух секунд, что важнее, чем звучит, когда билд-сервер пересобирает тот, кто не знал, что на нём было.

Поскольку аккаунт здесь — это адрес электронной почты и хеш пароля, нет объекта клиента, который можно получить. В API нет поля имени, поля адреса, поля компании и поля налогов — ровно по той причине, по которой их нет в форме регистрации.

Лимиты запросов, идемпотентность, ошибки

Шестьсот чтений в минуту и шестьдесят записей, считаются отдельно для каждого токена, а не для аккаунта, так что один шумный скрипт не сможет заморить остальную автоматизацию. Лимиты возвращаются в заголовках каждого ответа, включая успешные.

Каждая запись принимает ключ идемпотентности. Повторите создание с тем же ключом — и вы получите исходный инстанс, а не второй, выставленный к оплате рядом с ним. Это единственная функция, за которую бета-тестеры благодарили нас больше всего, что говорит вам кое-что о том, как остальная индустрия обрабатывает таймаут при провижининге.

Ошибки — это документированный машинный код, одно читаемое человеком предложение и идентификатор запроса. Вставьте идентификатор в тикет — и поддержка увидит тот же запрос, что и вы, не прося вас воспроизвести его.

Что она намеренно не делает

  • Никаких фиатных денег. Никогда. Эндпоинты биллинга читают ваш баланс и открывают счёт на пополнение. Расчёт остаётся за OxaPay и выбранной вами сетью, как описано на странице оплаты.
  • Никаких субакаунтов или ролей. Постоянно запрашивается. Не реализовано, потому что очевидная реализация означает хранение структуры «кто у кого работает», и мы предпочитаем выдавать токены с ограниченным сроком действия, а оргструктуру держать при себе.
  • Никакого автоскейлинга. Инстансы — это выделенные ядра на реальном кремнии, а не пул, который мы можем создать из воздуха. Вы создаёте и уничтожаете по своему расписанию; мы не будем притворяться, что под этим лежит эластичная абстракция.
  • Никакой матрицы SDK. Один эталонный клиент и обычный HTTP как контракт. Шесть полуподдерживаемых языковых биндингов старели бы хуже, чем документация.

Что бы нам хотелось сломать

Бета нашла девять багов, которые стоит исправить, три из которых были нашими в интересном смысле, а шесть были враньём документации. Если вы найдёте десятый, злоупотребление лимитом запросов — это нормально и ожидаемо при тестировании, и поддержка предпочтёт идентификатор запроса, а не скриншот.

Справка — в документации. Журнал изменений для ревизии 5.4 перечисляет семь эндпоинтов, которые изменили форму между февралём и апрелем, и это единственные ломающие изменения, которые будут внутри версии один.

Готовы, когда вы готовы

Выберите город. Выберите размер. Оплатите монетой.

Никаких форм о том, кто вы, никакого ожидания одобрения человеком, никаких звонков для проверки. Счёт оплачен — и учётные данные приходят на почту.