modRest
Последнее обновление Aug 19th, 2019 | История страницы | Улучшить эту страницу | Сообщить о проблеме
Support the team building MODX with a monthly donation.
The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.
Backers
Budget
$306 per month—let's make that $500!
Learn moreВстроенный curl клиент для отправки запросов на сторонние сервисы (RESTful и другие)
Так как все чаще используются сторонние сервисы в повседневной разработке сайтов, для этих целей в MODX есть встроенный клиент, с помощью которого можно отправлять запросы:
/* @var modRest $client */
$client = $modx->getService('rest', 'rest.modRest');
$response = $client->get('GET запрос');
# или
$response = $client->post('POST запрос');
// Обработка полученных данных в json или xml формате и преобразование их в массив
$array = $response->process();
Ниже перечислены способы работы с клиентом.
Отправка запроса c параметрами¶
Записываем параметры которые хотим отправить нашему сервису
$url = 'http://site.ru/rest/products';
$params = array('limit' => 100);
/* @var modRest $client */
$client = $modx->getService('rest', 'rest.modRest');
// $client->setOption('format','JSON'); // Формат полученных данных принимает json или xml (по умолчанию json) для преобразования в массив
// $client->setOption('suppressSuffix','true'); // иначе при использовании format=json в конец url добавится http://site.ru/method.json
$response = $client->get($url, $params);
$data = $response->process(); // Вернет массив
Проверка доступности метода¶
Чтобы проверить существование метода или хотите узнать существование какой то страницы, мы можем проверить код статуса страница в переменной responseInfo
:
$url = 'http://site.ru/rest/mymethod';
/* @var modRest $client */
$client = $modx->getService('rest', 'rest.modRest');
$client->setOption('header', true); // Возвращать заголовок
$response = $client->get($url);
if (property_exists($response->responseInfo, 'scalar')) {
$code = $response->responseInfo->scalar;
}
echo $code; // 200 - метод доступен, 404 - метод или страница не существует
Проверка доступности сервиса¶
Иногда сервисы падают или слишком долго отвечают, для этого существует переменная responseError
куда записывают ошибки.
$url = 'http://site.ru/rest/mymethod';
/* @var modRest $client */
$client = $modx->getService('rest', 'rest.modRest');
$client->setOption('timeout', 15); // Устанавливаем время ожидания
$response = $client->get($url);
if ($response->responseError) {
echo $response->responseError; // печатаем сообщение об ошибке
}
Авторизация¶
Для авторизации в сервисе по средствам CURLOPT_HTTPHEADER
, необходимо в опциях указать username
и password
$url = 'http://site.ru/rest/mymethod';
/* @var modRest $client */
$client = $modx->getService('rest', 'rest.modRest');
$client->setOption('username', 'Логин');
$client->setOption('password', 'пароль');
$response = $client->get($url);
if (property_exists($response->responseInfo, 'scalar')) {
$code = $response->responseInfo->scalar;
}
echo $code; // 200 - авторизованы, 403 - авторизация не пройдена
Чтение header¶
Чтобы сервис вернул заголовки, перед отправкой запроса нужно указать $client->setOption('header', true);
тогда в переменной $response->responseHeaders
мы увидим заголовки ответа от сервиса
$url = 'http://site.ru/rest/mymethod';
/* @var modRest $client */
$client = $modx->getService('rest', 'rest.modRest');
$client->setOption('header', true);
$response = $client->get($url);
echo '<pre>' . print_r($response->responseHeaders, true) . '</pre>;
Запись в header¶
Чтобы послать сервису наши параметры в заголовках:
$url = 'http://site.ru/rest/mymethod';
$headers= array(
'Content-type' => 'application/json', // Сообщаем сервису что хотим получить ответ в json формате
'Authorization' => 'OAuth НАШ TOKEN' // Авторизация через заголовки
);
// передаем наши заголовки сразу в класс
/* @var modRest $client */
$client = $this->modx->getService('rest', 'rest.modRest', array('headers' => $headers);
# или записываем заголовки в запрос
`$response = $client->get($url, array(), $headers);`
Для компонентов¶
Если возникает ошибка в консоле в виде:
modRestClient::__construct is deprecated since version 2.3.0. Use the modRest classes instead.
То необходимо использовать:
$client = $this->modx->getService('rest', 'rest.modRest');
так как modRestClient
устаревшая функция
За подробной информацией о всех возможностях класса смотрите файл: core/model/modx/rest/modrest.class.php
Support the team building MODX with a monthly donation.
The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.
Backers
Budget
$306 per month—let's make that $500!
Learn more