Разработка headless-архитектуры на 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Разработка headless-архитектуры на 1С-Битрикс
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1173
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    745
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Разработка headless-архитектуры на 1С-Битрикс

Монолитная архитектура 1С-Битрикс с шаблонами и компонентами прекрасно работала, когда сайт был единственной точкой контакта с клиентом. Сегодня тот же каталог должен отдаваться в мобильное приложение, в PWA, в голосовые ассистенты, во внешние сервисы агрегаторов. Компонентный подход Битрикса для этого не подходит — он генерирует HTML, а не JSON.

Headless-архитектура разделяет Битрикс на бэкенд (бизнес-логика, данные, API) и независимый фронтенд. Битрикс становится headless CMS — управляет контентом и данными, не генерируя HTML.

Архитектурная схема

[1С-Битрикс Backend]
  ├── Инфоблоки (каталог, контент)
  ├── Торговый каталог (цены, остатки)
  ├── CRM / Заказы
  └── REST API Layer
         |
    [API Gateway / nginx]
         |
    ┌────┴─────────────┐
[React SPA]    [Mobile App]    [Внешние сервисы]

Битрикс сохраняет всю бизнес-логику: обработка заказов, сеансы, корзина, авторизация, интеграция с 1С. Фронтенд — независимо разрабатываемое и деплоимое React/Next.js приложение.

REST API в 1С-Битрикс

Битрикс не имеет встроенного REST API уровня Next.js или Laravel. API строится двумя способами:

1. Контроллеры через addAjaxAction (старый, но рабочий способ):

// /local/ajax/catalog.php
define('STOP_STATISTICS', true);
define('NO_KEEP_STATISTIC', 'Y');
define('BX_SECURITY_SHOW_MESSAGE', true);

require $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php';

header('Content-Type: application/json; charset=UTF-8');
header('Access-Control-Allow-Origin: https://your-frontend.com');

CModule::IncludeModule('iblock');

$action = $_GET['action'] ?? '';

if ($action === 'catalog') {
    $items = getCatalogItems($_GET);
    echo json_encode(['status' => 'ok', 'data' => $items]);
}

2. Роутер через bitrix/routing (Битрикс 20+, рекомендуемый подход):

// local/routes/api.php
use Bitrix\Main\Routing\RoutingConfigurator;

return function(RoutingConfigurator $routes) {
    $routes->prefix('api/v1')->group(function(RoutingConfigurator $routes) {
        $routes->get('/catalog', [CatalogController::class, 'index']);
        $routes->get('/catalog/{id}', [CatalogController::class, 'show']);
        $routes->post('/cart/add', [CartController::class, 'add']);
        $routes->post('/order', [OrderController::class, 'create']);
    });
};
// local/controllers/CatalogController.php
class CatalogController extends \Bitrix\Main\Engine\Controller {
    public function indexAction(int $page = 1, int $limit = 20): array {
        $items = \Bitrix\Iblock\Elements\ElementCatalogTable::getList([
            'filter' => ['ACTIVE' => 'Y', 'IBLOCK_ID' => CATALOG_IBLOCK_ID],
            'limit'  => $limit,
            'offset' => ($page - 1) * $limit,
        ]);

        return ['items' => $items->fetchAll(), 'page' => $page];
    }
}

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

Headless-архитектура разрушает стандартную сессионную авторизацию Битрикса. Два подхода:

JWT-токены. Пользователь авторизуется через API, получает JWT, прикладывает к каждому запросу. Битрикс валидирует токен и определяет пользователя:

// Middleware для валидации JWT
function validateJwtToken(string $token): ?int {
    $payload = JWT::decode($token, new Key(JWT_SECRET, 'HS256'));
    return $payload->userId ?? null;
}

Cookie + CORS. Сохраняете стандартную сессию Битрикса, но настраиваете CORS для фронтенд-домена. Проще в реализации, сложнее в безопасности (CSRF-защита обязательна).

Кэширование API-ответов

Без кэширования headless-Битрикс медленный — каждый запрос к каталогу полностью строит выборку из БД. Многоуровневое кэширование:

// CDN-кэш для статичных данных каталога (Redis + nginx)
public function indexAction(): array {
    $cacheKey = 'catalog_page_' . $this->getCurrentPage();
    $cache = Cache::createInstance();

    if ($cache->initCache(3600, $cacheKey, '/catalog/')) {
        return $cache->getVars()['data'];
    }

    $data = $this->buildCatalogData();

    $cache->startDataCache();
    $cache->endDataCache(['data' => $data]);

    return $data;
}

Кэш инвалидируется при изменении данных инфоблока через BXClearCache(true, '/catalog/') в обработчике событий OnAfterIBlockElementUpdate.

Деплой и CORS

Headless требует правильного разделения доменов: api.yoursite.ru (Битрикс) и yoursite.ru (фронтенд Next.js на Vercel/Nginx). Настройка CORS в nginx для API-сервера:

location /api/ {
    add_header 'Access-Control-Allow-Origin' 'https://yoursite.ru';
    add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
    add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type';
    add_header 'Access-Control-Allow-Credentials' 'true';

    if ($request_method = 'OPTIONS') {
        return 204;
    }

    fastcgi_pass php-fpm;
}

Headless на Битриксе — это архитектурное решение с ощутимыми преимуществами (независимый фронтенд, скорость, мультиканальность) и реальными затратами (разработка API, кэширование, CORS, инфраструктура). Принимайте это решение осознанно, когда монолит действительно стал ограничением, а не из моды на headless.