Используем внешные данные JSON
Популярные запросы: Open Graph, плагин Reading Time, тема Quebec, плагин Telegram, набор иконок Analogue
- 141 просмотр +1
- 18 декабря, 2025
- Обновлено: 2 января, 2026
- admin
- Время чтения: 4 минуты
Подключение внешних структурированных данных не стоит считать задачей, достойной профессионального программиста. Сделать это совсем несложно, а отдача легко покроет все ваши усилия.
Сегодня мы не будет останавливаться на всех аспектах реализации, а поговорим только о проверках доступности внешних данных. Конечно, это не то, о чем думаешь в начале разработки. Да и на всем ее протяжении возможные ошибки особенно не приходят на ум. Однако на этапе тестирования и отладки необходимо продумать и смоделировать все возможные варианты, при которых данные могут быть недоступны и разработать алгоритмы предупреждения сбоев и ликвидации их последствий.
Речь пойдет о передаче и получении данных в формате JSON, обеспечивающем кросс-платформенный обмен между серверами и веб-приложениями.
Для начала определим необходимые константы:
define('DATA_REALM', 'External Data');
define('DATA_HOST', 'example.com');
define('DATA_URL', 'https://example.com/api/currencies');
Теперь по порядку.
Получение внешних данных
JSON-данные приходят по ссылке. Если используется хост, первым делом необходимо его проверить. Вот простая функция:
if (!function_exists('check_host')) {
function check_host($host, $port = 443, $timeout = 5) {
// Оператор @ служит для подавления сообщений в выводе
$socket = @fsockopen($host, $port, $errno, $errstr, $timeout);
if (!$socket) {
// Хост недоступен
return false;
} else {
// Коннект состоялся, закрываем сокет
fclose($socket);
return true;
}
}
}
Хост проверить необходимо на случай блокировки на стороне хостера. Когда данные доступны с локальной машины, в том числе по IP-адресу, наличие блокировки на сервере можно определить не сразу:
if (check_host(DATA_HOST) === true) {
// Можно продолжать
}
Если доступен хост, проверяем данные JSON:
$json = get_array(DATA_URL);
if ($json) {
// Данные получены
$nbrb = json_decode($json, true);
}
Теперь с ними можно работать, но для начала надо их сохранить.
Сохранение внешних данных
Когда JSON-данные приходят и обрабатываются в полном объеме, мало кто задумывается об их сохранении. Между тем, это не требует больших ресурсов и легко реализуемо в двух вариантах – сохранении в таблицу cot_cache базы данных (Memory Cache) или на диск (Disk Cache).
Используем Memory Cache
Массив, а именно таковым являются JSON-данные, легко сериализуется и записывается в MySQL базу данных с помощью “быстрого” кэширования. Для этого в системе Cotonti специального инструментария нет, поскольку используется API для работой с базами данных:
if ($cache && $cache->db->exists('external-data', DATA_REALM)) {
// Массив находится в кэше, можно считывать
$ext_data = $cache->db->get('external-data', DATA_REALM);
}
Если речь идет о получении статистических данных, стоит заранее продумать схему их структурирования. Если тип один, сразу группируем по датам. Но возможны и варианты: в элемент даты записывать массив с различным типами данных, собранных за сутки. Также можно использовать несколько различных записей в таблице cot_cache.
$cache && $cache->db->store('external-data', $ext_data, DATA_REALM, 86400);
Еще два важных момента – это переполнение и безопасность данных. Информация имеет свойство накапливаться, поэтому стоит продумать вопрос удаления устаревших данных. Кроме этого, Memory Cache это такая история, которую иногда приходится очищать. А, поскольку, записей в нем немало, удалить по одной 15-20 штук, оставив одну, сложно и трудоемко. На такие случаи необходимо продумать вариант частичной очистки. Или можно использовать отдельную таблицу.
Используем Disk Cache
Здесь все аналогично, за исключением того, что есть небольшой набор функций:
cot_diskcache_calc($dir, $do_subdirs = true)cot_diskcache_list()cot_diskcache_clear($dir, $do_subdirs = true, $rm_dir = false)cot_diskcache_clearall()
Назначение понятно из названий. Запись производится несложным образом:
$cache->disk->store('external-data', $ext_data, DATA_REALM, 86400);
Дисковый кэш не такой объемный, а количество записей небольшое. Так что частичное удаление труда не составит:
Очистка кэша
Чтобы не допустить переполнения выбранного хранилища данных, созданные массивы необходимо регулярно очищать. Сделать это несложно с помощью сравнения данных, полученных функцией count() и максимально допустимого количества, указанного в настройках. Затем array_pop() и записываем обновленный массив в выбранный вид кэша.
Заключение
Работа с внешними данными представляет собой несложный набор операций, с помощью которых в выбранной локации сайта можно вывести соответствующую информацию. Главное в этом – выполнить все необходимые проверки и аккуратно обращаться с кэшированными данными. Особенно если они используются через хук global, т. е. глобально. Иначе сайт может “лечь” или грузиться неоправданно долго.
В прошлый раз мы разбирали переменные окружения экосистемы Cotonti Siena.
Новый комментарий
Ошибка
Выполнено