Опрос на статус по обратному вызову от стороннего API - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь сообщить о статусе задания, которое зависит от стороннего API, который использует обратные вызовы для сообщения о завершении.

API - это программа оптимизации изображений Kraken. ссылка

У меня сейчас есть такая установка:

  1. В main.php пользователь вводит несколько URL-адресов некоторых изображений, отправляет хиты
  2. Ajax-вызов инициируется для process.php
  3. process.php представляет отдельное задание в API Kraken для каждого изображения, которое включает URL-адрес изображения, а также имя файла обратного вызова callback.php
  4. API Kraken немедленно возвращает уникальный номер задания для каждого из изображений, например 12345
  5. (часть, в которой мне нужна помощь для выяснения).После успешного возврата из вызова ajax я постоянно запрашиваю обновления для задания, отображая ход выполнения для пользователя.

Я не могу использовать опцию ожидания, поскольку она обеспечивает плохой пользовательский опыт, ив зависимости от количества и размера изображений обработка API может привести к превышению времени ожидания задания php.

На этом этапе Kraken отключает сжатие изображения, а через несколько секунд оно завершается и публикует результаты.на callback.php с номером задания и URL-адресом сжатого изображения.Например:

{
    "id": "18fede37617a787649c3f60b9f1f280d"
    "success": true,
    "file_name": "header.jpg",
    "original_size": 324520,
    "kraked_size": 165358,
    "saved_bytes": 159162,
    "kraked_url": "http://dl.kraken.io/18/fe/de/37617a787649c3f60b9f1f280d/header.jpg"
}

Так как callback.php не знает о переменной $_SESSION, а только об уникальном идентификаторе задания, как вы можете узнать о завершении задания внутри main.php?

Текущие мысли

Создайте временный файл, названный в честь идентификатора задания, как только мы получим ответ с идентификатором задания от Кракена (или строку таблицы базы данных).Затем создайте массив $_SESSION с записью для каждого идентификатора задания.

При запуске callback.php он открывает этот временный файл с использованием предоставленного номера задания и добавляет URL-адрес сжатого изображения.Между тем, main.php имеет механизм опроса js, который ищет обновления для этого временного файла, и когда он находит то, что ему нужно, обновляет переменную $_SESSION для этого идентификатора задания и предоставляет пользователю ответ в виде <textarea> (которыйможет быть URL нового изображения или сообщение об ошибке, если Kraken не удалось оптимизировать изображение)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...