• Модуль: rest
  • Путь к файлу: ~/bitrix/modules/rest/classes/general/rest_provider.php
  • Класс: CRestProvider
  • Вызов: CRestProvider::getMethod
static function getMethod($query, $n, CRestServer $server): array
{
	$result = [
		'isExisting' => false,
		'isAvailable' => false,
	];
	$name = $query['name'];
	if (!empty($name))
	{
		$currentScope = self::getScope($server);
		$currentScope[] = CRestUtil::GLOBAL_SCOPE;
		$cache = Cache::createInstance();
		if ($cache->initCache(
			ScopeManager::CACHE_TIME,
			'info' . md5($name . implode('|', $currentScope)),
			ScopeManager::CACHE_DIR . 'method/'
		))
		{
			$result = $cache->getVars();
		}
		elseif ($cache->startDataCache())
		{
			$method = ScopeManager::getInstance()->getMethodInfo($name);

			$arMethods = $server->getServiceDescription();
			foreach ($arMethods as $scope => $methodList)
			{
				if (!empty($methodList[$name]))
				{
					if (in_array($scope, $currentScope, true))
					{
						$result['isAvailable'] = true;
					}
					$result['isExisting'] = true;
				}
			}

			if (!$result['isExisting'])
			{
				$request = new HttpRequest(
					Context::getCurrent()->getServer(),
					[
						'action' => $method['method'],
					],
					[],
					[],
					[]
				);
				$router = new Router($request);

				/** @var Controller $controller */
				[$controller, $action] = Resolver::getControllerAndAction(
					$router->getVendor(),
					$router->getModule(),
					$router->getAction(),
					Controller::SCOPE_REST
				);
				if ($controller)
				{
					if (in_array($method['scope'], $currentScope, true))
					{
						$result['isAvailable'] = true;
					}
					$result['isExisting'] = true;
				}
			}

			$cache->endDataCache($result);
		}
	}

	return $result;
}