Строить продукт на данных, а не на их добыче
Когда данные из государственных источников нужны в продукте, команда обычно сначала пишет сбор, а потом годами его чинит. Это работа без конца и без ценности для пользователя. Мы отдаём готовый слой данных, одинаковый для всех источников, с понятными обязательствами по доступности и свежести.
Ситуация
Полкоманды занято сбором, а не продуктом
Сбор данных выглядит как задача на пару недель, а превращается в постоянную. Источники меняются, форматы расходятся, что-то отваливается в выходные. Инженеры, которых нанимали делать продукт, дежурят у парсеров, а сроки по фичам едут.
Что даёт API
Слой данных перестаёт быть вашей зоной ответственности.
Один формат на всё
Источники отдаются одинаково: обработка пишется один раз.
Один токен
Новый источник не требует ни новой интеграции, ни нового договора.
Опубликованные обязательства
Доступность и лаг данных известны до договора и зафиксированы в нём.
История снимков
Состояние объекта на любую дату: можно строить динамику, а не только срез.
Оплата за сбор
Читать собранное бесплатно: кэшировать у себя ради экономии не нужно.
Предсказуемые ответы
Пока объект собирается, приходит статус, а не ошибка: ретраи не нужны.
Какие источники закрывают задачу
Ни один источник не отвечает на вопрос целиком. Ниже те, что нужны именно для этой работы.
| Источник | Что даёт для задачи |
|---|---|
| Все источники каталога | Реестры, суды, производства, отчётность, закупки, проверки |
| Один метод | Запрос по естественному идентификатору объекта |
| Один формат | Одинаковая структура ответа и одинаковые статусы |
| Датированные снимки | История состояний для аналитики и отчётности |
| Собственный расчёт | Готовая оценка риска поверх собранных данных |
| Кредиты вместо запросов | Тариф не наказывает за частое чтение |
Весь каталог: источники данных →
Как это выглядит в коде
Один и тот же вызов и одна и та же форма ответа: меняется метод, не подход.
# один помощник на все методы: ответ всегда JSON, авторизация одна
def fetch(path, **params):
return requests.get(
f"{API_BASE}{path}",
params=params,
headers={"Authorization": f"Bearer {TOKEN}"},
).json()
# компания: карточка лежит в company, рядом дата сборки и источники
company = fetch("/api/company", inn=inn)["company"]
# дело: пока не собрано, приходит cached=false — это статус, а не ошибка
case = fetch("/api/case", number=case_number)
if not case["cached"]:
schedule_recheck(case_number)
# строка непонятного вида: сервис сам решит, ИНН это или номер дела
guess = fetch("/api/lookup", q=user_input)["kind"]Возьмите готовый слой данных
Дадим тестовый доступ и базовый адрес: соберите прототип на реальных данных до всякого договора.