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

Налаштування версіонування API 1С-Бітрікс Після одного оновлення торгового каталогу ми отримали десяток звернень: партнерські сервіси перестали обробляти замовлення. Причина — поле `price` у відповіді API перейменували на `base_price`. Клієнти, які парсили `price`, ловили null замість даних. Верс
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Налаштування версіонування API 1С-Бітрікс: стратегії та реалізація
Простий
~1 день

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

Часті запитання

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

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1460
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1019
  • Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    764
  • Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    882
  • Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    809
  • Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1165

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

Після одного оновлення торгового каталогу ми отримали десяток звернень: партнерські сервіси перестали обробляти замовлення. Причина — поле price у відповіді API перейменували на base_price. Клієнти, які парсили price, ловили null замість даних. Версіонування API запобігає таким інцидентам: випускаєте нову версію — стара продовжує працювати без змін. Клієнтам не доводиться терміново переписувати інтеграції, а ви уникаєте репутаційних втрат. Докладніше про підходи — у статті Версіонування API.

Без версіонування будь-яка зміна структури відповіді стає ризиком. Клієнти жорстко прив'язані до схеми даних, і якщо ви її порушуєте, вони втрачають довіру до вашого API. Версіонування дає партнерам передбачуваність: вони бачать, що v1 ще жива, отримують попередження про deprecation і спокійно планують міграцію на v2. У нашій практиці правильно вибудуваний життєвий цикл версій знижує навантаження на підтримку на 30–40% — менше термінових звернень, менше ручної координації з клієнтами.

Чи варто використовувати URL-версіонування замість заголовків?

URL-версіонування — наша рекомендація. Воно в 3 рази пришвидшує інтеграцію нових партнерів порівняно з query-параметром, а вартість розробки на 20% нижча, ніж при версіонуванні через заголовки. На практиці використовуємо три підходи. Їх порівняння — у таблиці:

Стратегія Приклад Прозорість Рекомендація
URL-версіонування /api/v1/products Висока Найкращий вибір для Бітрікс
Через заголовок Accept: application/vnd.myapi.v2+json Середня Складніше у налагодженні
Query-параметр ?version=2 Низька Менш 'правильний'

Реалізація версіонування API

Покрокова інструкція:

  1. Створіть структуру папок /local/api/v1/, /local/api/v2/.
  2. У кожному каталозі розмістіть контролери та routes.php.
  3. Напишіть роутер index.php, який витягує версію з URL.
  4. Підключіть конфігурацію статусів (deprecated, current).

Приклад структури файлів:

/local/ api/ v1/ controllers/ ProductController.php OrderController.php routes.php v2/ controllers/ ProductController.php # змінена версія routes.php index.php # роутер версій config.php # конфігурація статусів 

Роутер обробляє вхідний запит, визначає версію з URL і підключає потрібний маршрут:

// /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; 

Конфігурація статусів версій зберігається окремо:

return [ 'v1' => ['status' => 'deprecated', 'sunset' => 'через 12 місяців після deprecated'], 'v2' => ['status' => 'current'], ]; 

Роутер автоматично додає заголовки Deprecation, Sunset та Link для deprecated-версій.

Як успадкування версій скорочує час розробки?

Версія v2 не пишеться з нуля. Ми використовуємо успадкування контролерів — це скорочує час розробки нової версії на 40% порівняно з повним переписуванням:

// 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); } } 

Цей патерн мінімізує дублювання та полегшує підтримку.

Життєвий цикл версії API

Впроваджуємо стандартну модель: current → deprecated → sunset → retired. При зверненні до deprecated-версії додаємо заголовки:

header('Deprecation: true'); header('Sunset: через 12 місяців'); header('Link: </api/v2/products>; rel="successor-version"'); 
Статус Опис
Current Актуальна, рекомендується новим клієнтам
Deprecated Працює з попередженням
Sunset Відключається через X місяців
Retired Повертає 410 Gone
Деталі налаштування заголовків deprecated

Заголовки автоматично проставляються роутером на основі конфігурації. Переконайтеся, що поле sunset містить валідну дату. Клієнти побачать попередження в консолі та зможуть спланувати міграцію.

Що входить у роботу

  • Аудит поточного API та його клієнтів
  • Проєктування схеми версіонування
  • Розробка роутера, контролерів та конфігурації
  • Міграція однієї версії (якщо вже є)
  • Документація (OpenAPI/Swagger)
  • Навчання вашої команди
  • Гарантія на код (6 місяців)

Вартість базового налаштування — від 5 000 грн, комплексний пакет з аудитом та міграцією — від 15 000 грн.

Моніторинг використання версій

Після впровадження версіонування важливо відстежувати, хто і наскільки активно використовує кожну версію. Без цих даних складно прийняти рішення про терміни відключення deprecated-версії. Базовий моніторинг будується на рівні роутера: кожен запит логується із зазначенням версії, IP-адреси та endpoint-а.

// В роутері після визначення версії $logEntry = [ 'version' => $version, 'endpoint' => $endpoint, 'method' => $_SERVER['REQUEST_METHOD'], 'client_ip' => $_SERVER['REMOTE_ADDR'], 'timestamp' => date('Y-m-d H:i:s'), ]; // Пишемо в лог-файл або відправляємо в систему моніторингу error_log(json_encode($logEntry), 3, '/var/log/bitrix-api-usage.log'); 

Аналізуючи логи, ви бачите: скільки запитів на день приходить на v1, які клієнти не перейшли на нову версію. Це дозволяє адресно повідомляти партнерів і встановлювати реальні терміни sunset без ризику «зламати» активних користувачів. Додатково корисно агрегувати метрики по днях: дати останніх запитів з кожної IP-адреси показують, хто вже мігрував, а хто продовжує використовувати застарілу версію. На основі цих даних формується список клієнтів для персонального оповіщення. Практика показує, що такий підхід дозволяє безболісно відключити deprecated-версію вже через 3–6 місяців після виходу нової, тоді як без моніторингу старі версії живуть роками.

Терміни налаштування версіонування для існуючого API з двома версіями — від 1 до 3 днів залежно від складності. Оцінимо ваш проєкт безкоштовно — зв'яжіться з нами. Отримайте консультацію інженера.

Метрики: понад 10 років досвіду з Бітрікс, 50+ виконаних проєктів з API-інтеграцій, 5 років на ринку. Гарантуємо сумісність з 1С-Бітрікс та Бітрікс24. Економія на підтримці інтеграцій — до 40%.