▤ Руководства

Integrator Core (версия 56, дополнено в 72)

Содержание

Единый слой между сервисом и сторонними API. Все запросы через Providers\Client::request() проходят Providers\Gateway.

Что делает

  • Каталог (Providers\Policy): 21 провайдер — хосты, единицы за вызов, срок кэша, общий ли кэш, правила хранения и атрибуции.
  • Предохранитель: 5 сбоев подряд (код 0 или ≥500) → пауза 5 мин × 2^(n−5), до 6 ч; 401/403 → пауза 1 ч («ключ не принят»); 429 → пауза по Retry-After (или 2 мин). Новый ключ в «Сторонних API» снимает паузу. Через паузу проходит одна пробная попытка.
  • Кэш ответов (GET, и POST для Wordstat): ключ — пользователь, метод, URL, авторизация, тело; только 2xx до 400 КБ; общий кэш для публичных источников (Википедия). Ручные кнопки «Обновить» обходят кэш (Gateway::$fresh).
  • Бюджет: месячный лимит единиц на (пользователь, сервис), цена за 1000 — вводится вручную, события при 80 % и исчерпании; после лимита вызовы блокируются до следующего месяца.
  • Контракты (bin/contracts.php, cron раз в сутки, или кнопка): лёгкий реальный вызов подключённых сервисов — ключ работает, ответ разбирается; при сбое — событие provider-down.
  • Страница /api-health: состояние, расход, бюджеты, кэш, памятка по условиям провайдеров (ориентир, не юридическая консультация).
  • Соответствие (Providers\Compliance, bin/compliance.php, cron раз в сутки): срок хранения keep из Policy применяется принудительно (сейчас — тексты отзывов по API), реестр условий с отметкой «сверено», свежесть данных (Compliance::EVERY — норма обновления), бюджет ошибок за 30 суток (цель 95 %, ответы из кэша не считаются), события provider-slo/stale/terms.
  • Проверки добавлены для Places, 2ГИС, Yelp, PageSpeed и Safe Browsing (Providers\Probe).
  • События provider-down/auth/budget попадают в диспетчерскую (категория «Сторонние API»).

Как подключить новый провайдер

  1. Строка в Policy::PROVIDERS (id, regex хоста, units, ttl).
  2. Запросы — только через Client. Синхронизатор начинается с $gw = Gateway::scope($store, $uid);.
  3. Для проверки формата — запись в Contracts::CHECKABLE.
  4. Для свежести — период в Compliance::EVERY; если данные нельзя показывать публично — ничего не нужно (по умолчанию нельзя), открытые источники — в Compliance::PUBLIC.

Ограничения

Форматы ответов живых API не проверялись на реальных ключах; контракты именно для этого. Цены и лимиты задаёт владелец.