Эффективная интеграция и кастомизация функционала в Битрикс24 часто требует работы на уровне API. Сегодня мы подробно рассмотрим «Request Response 2: Руководство разработчика». Вы узнаете экспертные методики работы с request response и научитесь избегать типичных ошибок начинающих разработчиков.
—
title: Request и Response
—
Запрос (Request)
Request — это абстрактный класс, который предоставляет информацию о текущем запросе. Он позволяет узнать метод и протокол, запрошенный URL, переданные параметры и другие данные. Класс расширяет \\Bitrix\\Main\\Type\\ParameterDictionary.
Класс обращается к пространствам имен:
- \\Main\\Type — работает с типами данных,
- \\Main\\IO — работает с файлами,
- \\Main\\Text — работает с текстом.
Пример использования:
use Bitrix\Main\Application;
use Bitrix\Main\Context;
$context = Application::getInstance()->getContext();
$request = $context->getRequest();
// Или более кратко:
$request = Context::getCurrent()->getRequest();Параметры запроса
- Получить параметр GET или POST
$value = $request->get("param");
$value = $request["param"];- Получить GET-параметры
$value = $request->getQuery("param"); // получить параметр param
$values = $request->getQueryList(); // получить список всех параметров- Получить POST-параметры
$value = $request->getPost("param"); // получить параметр param
$values = $request->getPostList(); // получить список всех параметров- Получить загруженный файл
$value = $request->getFile("param"); // получить файл param
$values = $request->getFileList(); // получить список всех загруженных файлов- Получить значение cookie
$value = $request->getCookie("param"); // получить cookie param
$values = $request->getCookieList(); // получить список всех cookiesДанные о запросе
- Получить метод запроса
$method = $request->getRequestMethod();- Проверить тип запроса
$flag = $request->isGet(); // вернет true, если GET-запрос
$flag = $request->isPost(); // вернет true, если POST-запрос
$flag = $request->isAjaxRequest(); // вернет true, если AJAX-запрос
$flag = $request->isHttps(); // вернет true, если HTTPS-запросДанные о запрошенной странице
- Проверить нахождение в административном разделе
$flag = $request->isAdminSection(); // вернет true, если находимся в административном разделе- Получить запрошенный адрес
$requestUri = $request->getRequestUri(); // например, "/catalog/category/?param=value"- Получить запрошенную страницу
$requestPage = $request->getRequestedPage(); // например, "/catalog/category/index.php"- Получить директорию запрошенной страницы
$rDir = $request->getRequestedPageDirectory(); // например, "/catalog/category"Класс HttpRequest
HttpRequest — это класс, который управляет объектом Request. Он содержит информацию о текущем запросе, включая его тип и параметры. Этот класс помогает избежать использования глобальных переменных, которые применялись в старом ядре.
Создавать объект HttpRequest вручную не требуется. Его можно получить через приложение и контекст:
use Bitrix\Main\Application;
$request = Application::getInstance()->getContext()->getRequest();
$name = $request->getPost("name");
$email = htmlspecialchars($request->getQuery("email"));Ответ (Response)
Класс \\Bitrix\\Main\\HttpResponse — это базовый класс для работы с HTTP-ответами. Он служит контейнером для:
HTTP-заголовков \Bitrix\Main\Web\HttpHeaders
- Добавить заголовок
\Bitrix\Main\HttpResponse::addHeader(
$name,
$value
)- Установить заголовок
\Bitrix\Main\HttpResponse::setHeaders(
Web\HttpHeaders $headers
)- Получить заголовок
\Bitrix\Main\HttpResponse::getHeaders()Cookies \Bitrix\Main\Web\Cookie
- Добавить cookie
\Bitrix\Main\HttpResponse::addCookie(
Web\Cookie $cookie,
$replace,
$checkExpires
)- Получить cookies
\Bitrix\Main\HttpResponse::getCookies()Контента \Bitrix\Main\HttpResponse::$content
- Установить контент
\Bitrix\Main\HttpResponse::setContent(
$content
)- Получить контент
\Bitrix\Main\HttpResponse::getContent()С помощью HttpResponse можно формировать ответы приложения любого типа и содержания.
Пример использования:
$response = new \Bitrix\Main\HttpResponse();
$response->addHeader('Content-Type', 'text/plain'); // добавить заголовок
$response->addCookie(new \Bitrix\Main\Web\Cookie('Biscuits', 'Yubileynoye')); // добавить cookie
$response->setContent('Hello, world!'); // установить контентКлассы
- AjaxJson — методы для JSON-ответов. Все ответы от контроллеров \\Bitrix\\Main\\Engine\\Controller имеют структуру, понятную для JS API BX.ajax.runAction, BX.ajax.runComponentAction:
{
"status": "string",
"data": "mixed",
"errors": []
}- Zip/Archive — работает с архивом.
Для NGINX можно использовать расширение mod_zip для создания архивов без нагрузки на PHP.
use \Bitrix\Main\Engine\Response;
$archive = new Response\Zip\Archive('archive.zip');
$archive->addEntry(Response\Zip\ArchiveEntry::createFromFileId($fileId));- Zip/ArchiveEntry — описывает элемент zip-архива.
- BFile — работает с файлами. Используется для скачивания файлов из таблицы
b_file.
- Component — работает с компонентами. Для загрузки компонента через AJAX:
new \Bitrix\Main\Engine\Response\Component(
'bitrix:disk.file.view',
'',
[
'FILE_ID' => $fileId,
]
);Формирует ответ для представления компонента:
{
"status": string,
"data": {
"html": string,
"assets": {
"css": array,
"js": array,
"string": array
},
"additionalParams": array
},
"errors": array
}- Json — формирует JSON-ответ. Преобразует данные в JSON, конвертирует в UTF-8 и устанавливает заголовок
application/json; charset=UTF-8.
new \Bitrix\Main\Engine\Response\Json('ping-pong');
/**
Content-Type: application/json; charset=UTF-8
"ping-pong"
**/
new \Bitrix\Main\Engine\Response\Json([
'id' => 2208,
'type' => 'license',
]);
/**
Content-Type: application/json; charset=UTF-8
{"id": 2208, "type": "license"}
**/- Redirect — выполняет редирект. Автоматически делает проверки безопасности и редирект с 301 или 302 статусом.
//сделать переадресацию с 302 статусом
$response = new \Bitrix\Main\Engine\Response\Redirect('/auth');
//сделать переадресацию с 301 статусом
$response = new \Bitrix\Main\Engine\Response\Redirect('/auth');
$response->setStatus('301 Moved Permanently');- ResizedImage — уменьшает изображения.
💡 Экспертное мнение и рекомендации
Советы эксперта по интеграции:
- Всегда используйте кэширование при частых запросах к request response, чтобы разгрузить базу данных.
- Соблюдайте стандарты PSR при написании обработчиков для «Request Response 2: Руководство разработчика».
- Регулярно проводите аудит производительности системы с помощью встроенного монитора 1С-Битрикс.
Похожая задача в бизнесе?
Помогу автоматизировать процессы и внедрить ИИ
Меня зовут Андрей Горошко. Я Full-stack разработчик и эксперт по 1С-Битрикс. Настраиваю CRM Битрикс24, разрабатываю защищенные API и создаю умных ИИ-агентов для автоматизации рутины.
или на почту: gorandvas@yandex.ru