134  /  389
Справочник

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

Просмотров: 1413
Дата последнего изменения: 14.05.2021
Ольга Пичужкина
Сложность урока:
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


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

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