Налаштування версіонування API 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування версіонування API 1С-Бітрікс
Проста
~1 робочий день
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Налаштування версіонування 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 дні.