Как я дважды ошибся с одним полем, пока не посмотрел в API

Сначала мы писали «Windows есть» всем тарифам провайдера просто так. Потом я сверился с его сайтом, нашёл три довода против и убрал Windows у всех двадцати трёх. Оба раза неверно — правильный ответ лежал в API и отличался от обоих.

Поле, которое никто не заполнял

В карточке каждого тарифа у нас есть строка с операционными системами: Linux, Windows или обе. Читатель по ней фильтрует — «покажи только те, где можно поставить Windows». Довольно важное поле: Windows нужен для 1С, RDP и приложений, которые под Linux не работают.

У одного из провайдеров, 4VPS, в этом поле у всех двадцати трёх тарифов стояло «Linux, Windows». Не потому, что кто-то это проверял. В конфигурации сборщика есть блок defaults — значения по умолчанию для полей, которых нет в ответе провайдера. Туда когда-то при заведении вписали обе системы, и они проставлялись всем скопом.

Это состояние номер один. Оно продержалось несколько месяцев, и формально данные выглядели полными: поле заполнено, фильтр работает, никаких пустых мест на витрине.

Сверка, которая всё испортила

Мы взялись проверить такие «умолчания» по всем провайдерам — после того, как похожая заглушка однажды приписала другому хостеру Windows, которого у него нет вовсе. Дошли до 4VPS и пошли смотреть сайт.

Нашлось три довода, и все против Windows. Первый: на сайте фраза «ОС Windows/Linux» встречается ровно один раз, и относится она к блоку про выделенные серверы — не про VPS. Второй: на страницах самих VPS списка операционных систем нет вообще, выбор происходит уже в панели заказа, куда мы не ходим. Третий: названия тарифов у них — cx01, cx11, cx21 — в точности повторяют линейку известного европейского облака, где образов Windows не бывает в принципе.

Три независимых признака, все сходятся. Я убрал Windows у двадцати трёх тарифов и написал в комментарии к коду честную оговорку: прямого подтверждения нет, это вывод по косвенным. Состояние номер два.

Оно тоже было неверным.

Что показал API

На следующий день появился ключ к API провайдера. В ответе, который мы и так забирали каждую ночь ради цен, у каждого тарифа обнаружились два поля: osList — список идентификаторов образов, и osNames — карта, что за чем скрывается.

Windows у 4VPS есть. Двадцать два плана из двадцати трёх, и не один образ, а целый набор: Windows Server 2016, 2019, 2022, 2025, Windows 10 и 11. Нет его только у самого младшего тарифа cx01 на один гигабайт памяти — и там ноль из двадцати восьми дата-центров, то есть это не случайность, а правило.

Итого: сначала мы утверждали «Windows есть везде» — неверно. Потом «Windows нет нигде» — тоже неверно. Правильный ответ отличался от обоих и лежал в файле, который лежал у нас на диске всё это время.

Почему три довода сошлись и всё равно соврали

Разбор ошибки интереснее самой ошибки. Три признака выглядели независимыми, но были об одном и том же: об отсутствии информации на витрине. Windows не упомянут в разделе про VPS. Списка ОС нет. Имена намекают на чужую линейку. Ни один из них не говорил «Windows нет» — все три говорили «на сайте про это не написано».

Отсутствие упоминания и отсутствие возможности — разные вещи, и подменять одно другим особенно легко, когда доводов несколько и они складываются в убедительную картину. Три слабых аргумента об одном и том же не становятся сильным аргументом; они остаются одним слабым, повторённым трижды.

Задним числом видно и то, что первое состояние было ошибкой того же рода, только зеркальной. «Скорее всего, у всех есть» и «скорее всего, ни у кого нет» — оба раза догадка, выданная за факт. Разница лишь в том, что первая догадка была ленивой, а вторая — старательной.

Обратный случай: данные есть, а числа нет

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

Тут всплыла особенность этого провайдера. Одна и та же конфигурация продаётся у него в двадцати трёх странах по одной цене, поэтому в каталоге это одна строка. А процессоры в разных дата-центрах разные: от 3,3 до 5,7 гигагерц. Приписать такой строке одно число значило бы соврать про большинство площадок.

Сборщик теперь ставит частоту, только если её сообщили все дата-центры этого тарифа и она везде совпадает. Получилось ровно пополам: у основной линейки, которая идёт по двадцати трём странам, поле осталось пустым, а у старшей — она продаётся всего в четырёх дата-центрах и везде на 5,7 гигагерца — частота проставилась. Десять тарифов из двадцати трёх.

Мне это нравится больше, чем оба крайних варианта. Не «данные есть, значит показываем» и не «сложно, значит не показываем», а «показываем там, где число честное». Иногда честного числа не существует, и тогда пустое поле — правильный ответ.

Кстати, первая версия этого правила была с дырой: она ставила частоту, когда её сообщил один дата-центр из четырёх, а остальные промолчали. Молчание — не согласие; поймал собственный тест.

Что мы поменяли в подходе

Операционные системы у 4VPS теперь читаются из списка образов, а не из умолчаний. Догадываться больше не о чем.

Заодно проверили остальных, у кого поле заполнялось скопом. У Selectel страница, с которой мы собираем тарифы, называется «VPS/VDS на Linux» и предлагает CentOS, Ubuntu и Debian — Windows там не упомянут ни разу, убрали. У VDSina провайдер пишет прямым текстом: автоматическая установка Windows доступна на тарифах от двух ядер и четырёх гигабайт памяти — правило перенесли в код, два младших тарифа Windows больше не обещают. У AdminVPS Windows оказался отдельной линейкой на своей вкладке, которую мы вообще не собирали; теперь собираем, в каталоге стало на четыре тарифа больше.

И общее правило, которое стоило нам двух ошибок подряд: поле, заполненное «по умолчанию», — это не данные. Это гипотеза с видом данных, и выглядит она в интерфейсе ровно так же, как проверенный факт.

Что с этим делать читателю

Если пользуетесь агрегатором — любым, включая наш, — у характеристик стоит спрашивать происхождение. Не «правда ли это», а «откуда вы это взяли». Цена обычно берётся из прайса, потому что иначе агрегатор бессмысленен. А вот сопутствующие поля — операционные системы, тип диска, защита от атак, уровень доступности — часто заполняются один раз при заведении провайдера и потом живут своей жизнью.

Признак, по которому это заметно снаружи: одинаковые значения у всех тарифов провайдера и подозрительно круглые цифры. Если у всех до единого стоит «Linux, Windows», а у соседнего хостера у всех «99,9%» — скорее всего, это не измерение, а заполненное поле.

И то, что мы повторяем в каждой такой статье: перед оплатой проверьте на сайте провайдера. Не из недоверия к конкретной площадке, а потому что любой каталог — это снимок, сделанный когда-то в прошлом. Мы стараемся, чтобы снимок был свежим и честным, но проверка занимает минуту и обходится дешевле ошибки.

как это устроеносбор данныхметодика

Сравнить тарифы VPS

Весь каталог с фильтрами и честной сортировкой — цены обновляются автоматически.

Открыть каталог →