Альтернатива API Rest для опроса для асинхронных длительных задач - PullRequest
0 голосов
/ 19 января 2020

Я создал flask restplus API, который принимает файл xlsx в качестве входных данных и возвращает XML. Это будет использоваться внутренне нашими различными API

Текущий поток:

  • Пользователи POST файл xlsx путем вызова / загрузки конечной точки.
  • API принимает файл, сохраняет его и возвращает идентификатор файла.
  • Пользователь отправляет другой запрос в / run, предоставляя идентификатор файла для обработки
  • API помещает запрос в очередь rabbitMQ и возвращает 202 с URL-адресом местоположения. для статуса.
  • работник сельдерея берет запрос и начинает его обрабатывать. Для завершения требуется некоторое время.
  • Тем временем пользователь может опросить статус
  • По завершении API отправляет 303 с другим URL-адресом для загрузки файла.
  • Пользователь обращается к новому URL-адресу для загрузки файла.

Однако наша команда архитекторов не поддерживает создание механизма опроса для клиента и просит нас использовать другой подход, может быть URL-адресом обратного вызова. Они говорят: «Ожидание во сне, чтобы проверить, завершена ли задача, не является хорошей практикой программирования».

Я хотел бы знать, есть ли другой подход, который клиент может использовать без опроса для статуса. Обратный звонок - это тот, который мне известен, но он еще не на месте.

1 Ответ

0 голосов
/ 20 января 2020

Использование URL-адреса обратного вызова предъявляет как минимум одно потенциально важное требование: клиент должен быть напрямую доступен через общую сеть в любом месте c. Это не обязательно проблема, если можно предположить, что все возможные клиенты удовлетворяют этому требованию и принимают соединения от API, но эта информация, безусловно, жизненно важна, и добавление этого требования может вызвать серьезные головные боли в будущем, если при в какой-то момент люди хотят использовать этот API, например, в настольных приложениях.

Поскольку заявленная причина отказа от вашего рабочего процесса - «хорошая практика программирования», вы начинаете с недостатка в том, что придумываете что-то, что будут приняты без дополнительной информации. Если требование доступности URL-адреса обратного вызова - это то, с чем они готовы смириться, это, безусловно, вариант, но я бы сказал, что вам нужно довольно тщательно учитывать и предупреждать пользователей о состояниях сбоев.

Другая возможность будет отдельной конечной точкой «все в одном», которая либо сама вызывает другие и блокирует, либо просто напрямую выполняет внутренние функции без промежуточных запросов (хотя для этого, вероятно, потребуется либо выполнить собственный опрос, минуя очередь, либо использовать собственные внутренние обратные вызовы для завершения sh запроса после завершения обработки файла).

Я бы также повторно рассмотрел все предоставленные требования и определил, как и почему они были либо неверными, либо недостаточными для адекватного определения приемлемый результат (или была ли неправильная интерпретация с вашей стороны). Кажется, вряд ли это будет разовая проблема, и если есть исправление процесса или что-то вроде внутренних рекомендаций по разработке, которые потенциально могут ограничить будущие недоразумения или разногласия в архитектуре, над этим стоит поработать.

...