Прокси-слой для Битрикс24: API-шлюз с кешированием и batch
Мы часто видим одну и ту же проблему: мобильное приложение, внешний сайт и ERP-система одновременно пытаются работать с REST API Битрикс24. Каждый клиент хранит свои токены, каждый должен знать специфику методов и обходить лимиты. Это неудобно, небезопасно и замедляет разработку. API-шлюз (gateway) — это промежуточный слой, который мы проектируем под ваш проект. Он стандартизирует взаимодействие: клиентские приложения обращаются к шлюзу с простым интерфейсом, а шлюз транслирует вызовы в Битрикс24, агрегирует данные и возвращает нормализованный ответ. Оценим ваш проект за один день — просто свяжитесь с нами.
Зачем нужен API-шлюз для Битрикс24?
Сокрытие сложности Битрикс24 API. Получение сделки со всеми связанными данными (контакт, компания, товары, задачи, дела) — это 5–7 отдельных REST-запросов к разным методам. Шлюз делает один вызов /deals/123, собирает все данные параллельно и отдаёт клиенту единый JSON.
Управление токенами. Клиентские приложения не хранят токены Битрикс24. Шлюз — единственное место, где хранятся OAuth-токены, обновляются access_token через refresh_token и контролируется их ротация.
Обход лимитов. Облачный Битрикс24 ограничивает: 2 запроса в секунду, 50 операций в batch. Шлюз реализует очередь и rate limiting — клиенты отправляют запросы сколько угодно быстро, шлюз сглаживает нагрузку. Прямая интеграция требует расчёта лимитов на стороне клиента, а шлюз берёт это на себя.
Почему API-шлюз снижает затраты на разработку?
Вместо того чтобы каждая команда клиентов разбиралась с особенностями REST API Битрикс24, шлюз предоставляет единый, документированный интерфейс. Разработчики тратят меньше времени на интеграцию и больше — на бизнес-логику. На практике это сокращает время вывода новых функций на 30%.
Архитектура и аутентификация шлюза
Шлюз — отдельный HTTP-сервис, как правило PHP (Laravel/Slim) или Node.js. Располагается между клиентами и Битрикс24.
Клиенты (мобильное приложение, внешний сайт, ERP) ↓ HTTP/JSON (собственный API шлюза) API-шлюз ├── Аутентификация клиента (JWT / API Key) ├── Валидация входных данных ├── Rate limiter ├── Кеш (Redis) ├── Маппер запросов → Битрикс24 REST └── Batch-агрегатор ↓ OAuth2 Token Битрикс24 REST API Аутентификация через API Key
Простейший вариант для server-to-server. Клиент передаёт ключ в заголовке X-API-Key. Шлюз проверяет ключ в своей БД, определяет привязанный Битрикс24-аккаунт и права.
Аутентификация через JWT
Для клиентов с пользователями. Пользователь логинится (через Битрикс24 OAuth или собственную систему), шлюз выдаёт JWT-токен. Каждый запрос к шлюзу содержит JWT в заголовке Authorization: Bearer. Шлюз декодирует токен, определяет пользователя и действует от его имени в Битрикс24.
Аутентификация через OAuth 2.0
Если шлюз обслуживает несколько клиентских приложений от разных организаций, строим полноценный OAuth-сервер (Authorization Code Flow). Каждый клиент-приложение — отдельный OAuth-клиент шлюза.
Как кеширование и batch ускоряют работу?
Два уровня кеша:
| Уровень | TTL | Пример данных | Метод инвалидации |
|---|---|---|---|
| Справочники | 1 час | Стадии воронок, пользователи, типы цен | По расписанию или принудительно |
| Сущности | 5 минут | Конкретные сделки, контакты, компании | Webhook-событие об изменении объекта |
Ключ кеша: b24:{portal_id}:{method}:{hash(params)}. При webhook-событии ONCRMDEALUPDATE с ID=123 — инвалидируем b24:portal1:crm.deal.get:hash({id:123}). За счёт кеширования время ответа снижается в 5 раз по сравнению с прямыми запросами.
Битрикс24 поддерживает batch: до 50 методов в одном HTTP-запросе. Шлюз агрегирует параллельные вызовы клиента в batch. Согласно официальной документации REST API Битрикс24, это радикально сокращает количество HTTP-соединений. Пример batch-запроса:
Пример batch-запроса (PHP)
// Клиент вызывает 3 ресурса шлюза "одновременно" // Шлюз собирает их в один batch к Битрикс24: $batch = [ 'deal' => 'crm.deal.get?id=123', 'contact' => 'crm.contact.get?id=456', 'products' => 'crm.deal.productrows.get?id=123', ]; $result = $b24->batch($batch); Для получения сделки со всеми данными шлюз формирует batch из 4–5 методов, выполняет один HTTP-запрос к Битрикс24 и собирает результат.
Трансформация и нормализация данных
Шлюз нормализует ответы Битрикс24. Из объекта со строковыми полями типа 'OPPORTUNITY' => '50000.00' получаем типизированный ответ:
{ "id": 123, "title": "Сделка с компанией Рога и Копыта", "amount": 50000.00, "stage": "negotiation", "contact": { "id": 456, "name": "Иван Петров", "phone": "+79001234567" } } Маппинг задаётся в конфигурации шлюза — это позволяет менять структуру ответа без изменения клиентов.
Отказоустойчивость и мониторинг
Если Битрикс24 недоступен или отвечает с ошибкой 503 Too Many Requests, шлюз не должен слепо возвращать эту ошибку клиентам. Реализуем circuit breaker:
- Closed (нормальная работа): запросы проходят через шлюз к Битрикс24
- Open (Битрикс24 недоступен): шлюз сразу возвращает кешированные данные или ошибку с понятным сообщением, не создавая очередь из ожидающих запросов
- Half-Open (проверка восстановления): периодически пробуем тестовый запрос к Битрикс24
Шлюз экспортирует метрики в Prometheus/Grafana или пишет в ELK: latency по методам (p50, p95, p99), error rate по коду ошибки, размер очереди запросов, hit rate кеша, текущий лимит Битрикс24 (из заголовка X-RateLimit-Remaining).
Что входит в разработку
| Deliverable | Описание |
|---|---|
| API-документация | OpenAPI/Swagger спецификация всех эндпоинтов |
| Код шлюза | Исходный код с инструкцией по развёртыванию |
| Конфигурация | Rate limiter, кеш, circuit breaker |
| Доступы | OAuth-токены, API-ключи, инструкция по ротации |
| Мониторинг | Шаблоны для Prometheus/Grafana |
| Обучение | 2‑часовая сессия для вашей команды |
Этапы и сроки разработки
| Этап | Содержание | Срок |
|---|---|---|
| Проектирование API шлюза | Схема эндпоинтов, модели данных, аутентификация | 1 неделя |
| Базовая инфраструктура | OAuth2 с Битрикс24, кеш, rate limiter | 1 неделя |
| Маппинг ресурсов | Эндпоинты шлюза → методы Битрикс24, трансформация | 1–2 недели |
| Batch-агрегация | Объединение параллельных запросов | 3–5 дней |
| Circuit breaker и отказоустойчивость | Обработка деградации Битрикс24 | 3–5 дней |
| Документация API | OpenAPI/Swagger спецификация | 3 дня |
| Тестирование и нагрузочные тесты | Корректность маппинга, производительность под нагрузкой | 1 неделя |
API-шлюз особенно оправдан, когда с Битрикс24 работают несколько приложений одновременно, или когда клиентские разработчики не должны знать специфику Битрикс24 API. Для одного небольшого интеграционного сценария — избыточно. Получите консультацию инженера — закажите разработку API-шлюза под ключ. Выполнили уже 50+ интеграций для проектов разного масштаба.







