Добро пожаловать на сайт SEDBY
  • 141 просмотр +1
  • 18 декабря, 2025
  • Обновлено: 2 января, 2026
  • admin
  • Время чтения: 4 минуты
Используем внешные данные JSON

Подключение внешних структурированных данных не стоит считать задачей, достойной профессионального программиста. Сделать это совсем несложно, а отдача легко покроет все ваши усилия.

Сегодня мы не будет останавливаться на всех аспектах реализации, а поговорим только о проверках доступности внешних данных. Конечно, это не то, о чем думаешь в начале разработки. Да и на всем ее протяжении возможные ошибки особенно не приходят на ум. Однако на этапе тестирования и отладки необходимо продумать и смоделировать все возможные варианты, при которых данные могут быть недоступны и разработать алгоритмы предупреждения сбоев и ликвидации их последствий.

Речь пойдет о передаче и получении данных в формате 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);

Дисковый кэш не такой объемный, а количество записей небольшое. Так что частичное удаление труда не составит:

Менеджер дискового кэша Cotonti Siena
Менеджер дискового кэша Cotonti Siena

Очистка кэша

Чтобы не допустить переполнения выбранного хранилища данных, созданные массивы необходимо регулярно очищать. Сделать это несложно с помощью сравнения данных, полученных функцией count() и максимально допустимого количества, указанного в настройках. Затем array_pop() и записываем обновленный массив в выбранный вид кэша.

Заключение

Работа с внешними данными представляет собой несложный набор операций, с помощью которых в выбранной локации сайта можно вывести соответствующую информацию. Главное в этом – выполнить все необходимые проверки и аккуратно обращаться с кэшированными данными. Особенно если они используются через хук global, т. е. глобально. Иначе сайт может “лечь” или грузиться неоправданно долго.

В прошлый раз мы разбирали переменные окружения экосистемы Cotonti Siena.


Комментарии:
Комментарии отсутствуют

Новый комментарий

Ваш комментарий будет доступен для редактирования 10 минут
Блок пользователя
Регистрация на нашем сайте позволит вам общаться на форумах и получить доступ к другому полезному функционалу
Вы вошли как Гость