Настройка версионирования API 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка версионирования API 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1177
  • 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С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Настройка версионирования API 1С-Битрикс

Версионирование API — это механизм, позволяющий вносить изменения в API без поломки существующих интеграций. Клиент, использующий версию v1, продолжает работать даже после выхода v2 с изменённой структурой ответов.

Зачем нужно версионирование

Без версионирования любое изменение структуры ответа API ломает клиентов: переименовали поле price в base_price — все интеграции перестали работать. С версионированием: в v1 остаётся price, в v2 появляется base_price. Клиенты переходят на v2 в своём темпе.

Стратегии версионирования

URL-версионирование — самый распространённый и понятный подход:

/api/v1/products
/api/v2/products

Реализация в Битрикс через роутинг в /local/php_interface/init.php или через отдельный фронт-контроллер.

Через заголовок:

GET /api/products
Accept: application/vnd.myapi.v2+json

Менее заметно, но сложнее в отладке — версия не видна в URL.

Через query-параметр:

GET /api/products?version=2

Проще реализовать, но считается менее «правильным».

Для API на Битрикс рекомендуется URL-версионирование — прозрачно, легко тестируется, понятно клиентам.

Структура файлов

/local/
  api/
    v1/
      controllers/
        ProductController.php
        OrderController.php
      routes.php
    v2/
      controllers/
        ProductController.php  ← изменённая версия
      routes.php
    index.php  ← роутер версий

Роутер версий

// /local/api/index.php
$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
preg_match('#^/api/(v\d+)/(.*)#', $path, $matches);

$version = $matches[1] ?? 'v1';
$endpoint = $matches[2] ?? '';

$routeFile = __DIR__ . "/{$version}/routes.php";
if (!file_exists($routeFile)) {
    http_response_code(404);
    echo json_encode(['error' => 'API version not found']);
    exit;
}

require_once $routeFile;

Наследование между версиями

Версия v2 не переписывается с нуля — наследует v1 и переопределяет только изменившееся:

// v2/controllers/ProductController.php
class ProductControllerV2 extends ProductControllerV1
{
    public function index(): array
    {
        $products = parent::index();
        // Изменили структуру: добавили поле, переименовали
        return array_map(function ($product) {
            $product['base_price'] = $product['price'];
            unset($product['price']);
            return $product;
        }, $products);
    }
}

Это минимизирует дублирование кода.

Жизненный цикл версии

Статус Описание
Current Актуальная, рекомендуется для новых клиентов
Deprecated Устарела, работает, но предупреждение в заголовке ответа
Sunset Отключается через X месяцев, анонс заранее
Retired Отключена, возвращает 410 Gone

При обращении к deprecated-версии добавляется заголовок:

header('Deprecation: true');
header('Sunset: Sat, 01 Jan 2026 00:00:00 GMT');
header('Link: </api/v2/products>; rel="successor-version"');

Хранение информации о версиях

Список версий с их статусом — в конфигурации:

return [
    'v1' => ['status' => 'deprecated', 'sunset' => '2026-01-01'],
    'v2' => ['status' => 'current'],
];

Роутер читает конфигурацию и добавляет нужные заголовки автоматически.

Настройка версионирования для существующего API с двумя версиями — 1-2 дня.