Версия: 6.x
burger close
Внешние запросы

В ReadyScript существует подсистема для запросов к внешним сервисам.

Чтобы отправить внешний запрос нужно создать объект класса Main::Model::Requester::ExternalRequest

После настройки всех параметров у объекта запроса нужно вызвать метод executeRequest(), который выполнит запрос и вернёт результат в виде объекта Main::Model::Requester::ExternalResponse

Особенности работы класса Main::Model::Requester::ExternalRequest:

  • Если указан ContentType 'application/json' и в качестве параметров запроса передан масив, то он автоматически будет преобразован в формат JSON
  • Если указан ContentType 'application/xml' и в качестве параметров запроса передан объект SimpleXMLElement, то он автоматически будет преобразован в строку

Пример использования:

/** @var \Main\Model\Requester\ExternalResponse $response */
$response = (new \Main\Model\Requester\ExternalRequest('example', 'http://mega.readyscript.local/test2.php'))
->setMethod(\Main\Model\Requester\ExternalRequest::METHOD_POST)
->setContentType(\Main\Model\Requester\ExternalRequest::CONTENT_TYPE_JSON)
->setParams([
'param1' => 'value1',
'param2' => 'value2',
])
->setEnableCache(false)
->executeRequest();
$response->getStatus(); // врнёт статус ответа
$response->getRawResponse(); // врнёт тело ответа чистом виде
$response->getResponseJson(); // врнёт тело ответа в виде json декодированного массива

Кэширование запросов

По умолчанию результаты всех внешних запросов кэшируются в БД.
Если URL запроса, его параметры, и ключ идемпотентности совпадают с имеющейся в БД записью, то результат выполнения запросабудет взят из кэша.
Время жизни кэша составляет 24 часа.

Отключить кэширование можно вызвав у объекта запроса метод setEnableCache(false)

Утилита "Кэш внешних запросов" в настройках модуля "Системный модуль" позволяет просматривать и очищать кэш внешних запросов

Логирование запросов

Все заголовки и параметры отправленного запроса и полученного ответа будут записаны с использованием системы логирования.

По умолчанию для логирования внешних запросов используется класс Main::Model::Log::LogExternalRequest.
Используемый класс логирования можно подменить при помощи метода setLog.

/**
* Устанавливает используемый объект логирования
*
* @param AbstractLog $log - экземпляр класса логирования
* @param string $log_level_request - уровень логирования запросов
* @param string $log_level_response - уровень логирования ответов, если не указан то считается равным $log_level_request
* @return self
*/
public function setLog(AbstractLog $log, string $log_level_request, string $log_level_response = null): self