REST API на 1С-Бітрікс: проектування, реалізація, документація

Битрикс має вбудований REST API для Бітрікс24, але для сайту на «1С-Бітрікс: Управління сайтом» власного REST немає — його потрібно будувати. Задача виникає регулярно: мобільний додаток потребує дані каталогу, сторонній сервіс хоче отримувати замовлення, фронтенд на React або Vue потрібно забезпечув
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
REST API на 1С-Бітрікс: проектування, реалізація, документація
Середній
~1-2 тижні

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

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

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

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

Битрикс має вбудований REST API для Бітрікс24, але для сайту на «1С-Бітрікс: Управління сайтом» власного REST немає — його потрібно будувати. Задача виникає регулярно: мобільний додаток потребує дані каталогу, сторонній сервіс хоче отримувати замовлення, фронтенд на React або Vue потрібно забезпечувати даними без перезавантаження сторінки. Типовий біль: при кожному новому інтеграторі доводиться писати костилі на COption::GetOptionString та виводити JSON через echo json_encode(), а через місяць код перетворюється на «локшину».

У нас за плечима 10+ років досвіду Bitrix-розробки та більше 50 реалізованих API-інтеграцій, що обробляють до 10 000 RPS. Знаємо всі підводні камені: від проблем із кешуванням інфоблоків до помилок серіалізації в ORM. Гарантуємо стабільну роботу під навантаженням та надаємо документацію Swagger для кожного ендпоінта. Середня економія часу на інтеграцію із зовнішніми сервісами становить 40%.

Як побудувати REST API на D7?

Основа API — контролери на базі \Bitrix\Main\Engine\Controller. Кожен контролер відповідає за один ресурс. Порівняння з самописними рішеннями: D7-контролери автоматично обробляють помилки, серіалізують відповіді в JSON та підтримують префільтри. Це в 2–3 рази скорочує обсяг коду порівняно з ручною обробкою через $APPLICATION->RestartBuffer().

  1. Створіть модуль в /local/modules/ зі структурою my.api. Визначте install/index.php з методами InstallDB() та UnInstallDB() для створення таблиць.
  2. Реєструйте контролери в routes.php (починаючи з ядра 20.0). Зіставте URL з класами, наприклад 'api/v1/products' => 'MyApi\Controllers\ProductController'.
  3. Реалізуйте action-методи. Кожен метод повертає масив — ядро серіалізує його в JSON. Додайте префільтри для аутентифікації та обмеження HTTP-методів.
  4. Підключіть сервіс-шар — винесіть логіку вибірки та обробки в окремі класи ProductService, OrderService тощо. Це спрощує юніт-тестування.
  5. Документуйте ендпоінти через Swagger (OpenAPI 3.0). Генеруйте специфікацію з анотацій або вручну. Розмістіть Swagger UI в /local/swagger/.
/local/modules/my.api/lib/ ├── Controllers/ │ ├── ProductController.php → GET /api/v1/products │ ├── OrderController.php → GET/POST /api/v1/orders │ ├── CategoryController.php → GET /api/v1/categories │ └── AuthController.php → POST /api/v1/auth/token ├── Services/ │ ├── ProductService.php │ └── OrderService.php ├── Transformers/ │ ├── ProductTransformer.php → форматування відповіді │ └── OrderTransformer.php └── Middleware/ ├── AuthMiddleware.php └── RateLimitMiddleware.php 

Приклад контролера: метод listAction приймає параметри пагінації та повертає дані з мета-інформацією. Код короткий, без зайвих перевірок — все вбудовано в D7.

namespace MyApi\Controllers; use Bitrix\Main\Engine\Controller; use Bitrix\Main\Engine\ActionFilter; use MyApi\Services\ProductService; use MyApi\Middleware\AuthMiddleware; class ProductController extends Controller { public function configureActions(): array { return [ 'list' => ['prefilters' => [new AuthMiddleware()]], 'detail' => ['prefilters' => [new AuthMiddleware()]], 'create' => ['prefilters' => [new AuthMiddleware(), new ActionFilter\HttpMethod(['POST'])]], ]; } public function listAction(int $page = 1, int $perPage = 20, string $category = ''): array { $service = new ProductService(); $result = $service->getList($page, $perPage, $category); return [ 'data' => $result['items'], 'meta' => [ 'total' => $result['total'], 'page' => $page, 'per_page' => $perPage, 'pages' => ceil($result['total'] / $perPage), ], ]; } public function detailAction(int $id): array { $service = new ProductService(); $product = $service->getById($id); if (!$product) { $this->addError(new \Bitrix\Main\Error('Товар не знайдено', 404)); return []; } return ['data' => $product]; } } 

Як забезпечити безпеку REST API?

Аутентифікація — часте джерело проблем. Для server-to-server використовуємо API-ключі: простий заголовок X-Api-Key. Для користувацьких запитів (mobile app, SPA) — JWT. Бібліотека firebase/php-jwt підключається через Composer. Refresh-токени зберігаємо в кастомній ORM-таблиці з прив'язкою до користувача. Це надійніше, ніж зберігати сесії у файлах.

Докладніше про JWT: JSON Web Token (Wikipedia).

Формат відповідей — консистентність важлива. Ми дотримуємося єдиного шаблону: status, data, meta для успіху, errors для помилок. D7-контролер формує відповідь автоматично, але ми перевизначаємо processAfterAction для повного контролю.

protected function processAfterAction(Action $action, $result) { $response = \Bitrix\Main\Application::getInstance()->getContext()->getResponse(); $response->addHeader('Content-Type', 'application/json; charset=utf-8'); if ($this->getErrors()) { echo json_encode([ 'status' => 'error', 'errors' => array_map(fn($e) => [ 'code' => $e->getCode(), 'message' => $e->getMessage(), ], $this->getErrors()), ], JSON_UNESCAPED_UNICODE); } else { echo json_encode([ 'status' => 'ok', 'data' => $result, ], JSON_UNESCAPED_UNICODE); } exit; } 

CORS — якщо API викликається з іншого домену, обов'язково додаємо заголовки та обробляємо OPTIONS-запити. Інакше браузер блокує запити.

Rate limiting — захист від перевантажень. Використовуємо Redis або, для малого навантаження, b_option. Наприклад, 1000 запитів на годину на ключ.

Метод аутентифікації Застосування Простота реалізації Безпека
API-ключ Server-to-server Висока Середня (ключ у заголовку)
JWT User-to-server (mobile, SPA) Середня Висока (з refresh-токенами)
Basic Auth Legacy-системи Висока Низька (передача пароля)

Як протестувати API?

Пишіть інтеграційні тести на PHPUnit. Для ізоляції використовуйте SQLite замість MySQL. Перевіряйте не лише успішні сценарії, але й граничні випадки: невірні параметри, відсутні ресурси, перевищення лімітів. Приклад тесту для listAction:

public function testListReturnsPaginationMeta(): void { $controller = new ProductController(); $result = $controller->listAction(1, 10); $this->assertArrayHasKey('meta', $result); $this->assertArrayHasKey('total', $result['meta']); } 

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

Ми не просто пишемо код. Кожен проект включає:

  • Технічне завдання з прототипом ендпоінтів.
  • Архітектурну схему модуля.
  • Реалізацію контролерів, сервісів, трансформерів.
  • Документацію OpenAPI 3.0 (Swagger).
  • Налаштування rate limiting та CORS.
  • Інструкцію з деплою та підтримку протягом місяця.

Терміни орієнтовно

Задача Термін
Базовий REST API (3–5 ресурсів, API-ключ, JSON-відповіді) 1.5–2 тижні
API з JWT-аутентифікацією, правами користувачів, документацією 3–5 тижнів
Повноцінний API з версіонуванням, rate limiting, тестами, CI 6–10 тижнів

REST API на Бітрікс будується зі стандартних блоків — контролери, ORM, кеш. Складність не в технології, а в проектуванні: правильні ендпоінти, консистентні формати відповідей, обробка граничних випадків. Якщо вам потрібен надійний REST API для вашого сайту на Бітрікс, зв'яжіться з нами — ми оцінимо ваш проект за один день. Замовте розробку REST API та отримайте готову документацію Swagger у комплекті.

Офіційна документація Бітрікс D7