135  /  382
Справочник

Практика. Интеграция с модулем REST

Просмотров: 8405
Дата последнего изменения: 21.04.2022
Ольга Пичужкина
Сложность урока:
3 уровень - средняя сложность. Необходимо внимание и немного подумать.
1
2
3
4
5
Недоступно в лицензиях:
Ограничений нет

Если запрограммированы контроллеры внутри модуля, то их легко сделать доступными для модуля REST. Это удобно, так как мы повторно используем уже написанный код.

Для этого нужно лишь поправить конфиг модуля .settings.php.

Важно! Это новый способ, должна быть проставлена зависимость от REST 18.5.1).

<?php
return [
	'controllers' => [
		'value' => [
			'defaultNamespace' => '\\Bitrix\\Disk\\Controller',
			'restIntegration' => [
				'enabled' => true,
			],
		],
		'readonly' => true,
	]
];

Как использовать в ajax-действии \CRestServer?

Если вдруг ajax-действие должно использовать \CRestServer для какой-то специфической задачи, то это можно легко решить, объявив одним из параметров \CRestServer.

Пример:

public function getStorageForAppAction($clientName, \CRestServer $restServer)
{
	$clientId = $restServer->getClientId();
	...
}

Будьте внимательны, в примере выше действие не будет работать через обычный ajax, так как \CRestServer $restServer там отсутствует и не может быть внедрен. Оно будет доступно только для модуля REST. Если же объявить его необязательным, то всё будет работать.

public function getStorageForAppAction($clientName, \CRestServer $restServer = null)
{
	if ($restServer)
	{
		$clientId = $restServer->getClientId();
	}
	...
}

Как понять, вызываются ли действия в REST или AJAX окружении?

Может возникнуть задача, что нужно отличить в каком контексте сейчас выполняется действие: это REST или это AJAX? Для этого можно спросить у контролера:

\Bitrix\Main\Engine\Controller::getScope()

//возможные варианты
\Bitrix\Main\Engine\Controller::SCOPE_REST
\Bitrix\Main\Engine\Controller::SCOPE_AJAX
\Bitrix\Main\Engine\Controller::SCOPE_CLI


Курсы разработаны в компании «1С-Битрикс»

Если вы нашли неточность в тексте, непонятное объяснение, пожалуйста, сообщите нам об этом в комментариях.
Развернуть комментарии