Без рубрики

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

Создание REST API в Битрикс D7 позволяет строить мобильные приложения и интеграции со сторонними сервисами. Рассмотрим как это сделать правильно через роутер и контроллеры.

Регистрация маршрутов

В файле /local/routes.php:

return function(BitrixMainRoutingRoutingConfigurator $routes) {
    $routes->prefix('api/v1')->group(function($routes) {
        $routes->get('users', [MyApiUserController::class, 'getList']);
        $routes->post('users', [MyApiUserController::class, 'create']);
    });
};

Создание контроллера

namespace MyApi;

use BitrixMainEngineController;
use BitrixMainEngineActionFilter;

class UserController extends Controller
{
    public function configureActions(): array
    {
        return [
            'getList' => [
                'prefilters' => [
                    new ActionFilterAuthentication(),
                    new ActionFilterHttpMethod(['GET']),
                ],
            ],
        ];
    }

    public function getListAction(): array
    {
        return BitrixMainUserTable::getList([
            'select' => ['ID', 'NAME', 'EMAIL'],
            'filter' => ['=ACTIVE' => 'Y'],
            'limit'  => 20,
        ])->fetchAll();
    }
}

Авторизация через токен

$token = $_SERVER['HTTP_X_API_TOKEN'] ?? '';
if ($token !== MY_API_TOKEN) {
    http_response_code(401);
    die(json_encode(['error' => 'Unauthorized']));
}

CORS для фронтенда

header('Access-Control-Allow-Origin: https://your-frontend.ru');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');
header('Access-Control-Allow-Headers: Content-Type, X-Api-Token');

Формат ответа

Битрикс автоматически сериализует возвращаемый массив в JSON. Для ручного управления:

header('Content-Type: application/json; charset=utf-8');
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
exit;