Как передать пользователю ответ фоновой задачи Django

Я создал веб-приложение на django, которое использует API FedEx, чтобы пользователь мог создавать отправления через мой сайт. Ответ этого вызова API FedEx в формате xml содержит много данных, таких как: успех или неудача запроса, сообщения об ошибках, коды ошибок, номер отслеживания (в случае успеха) и т.д. Я использую фоновые задачи django для выполнения этих вызовов API, и после завершения процесса я не могу получить ответ от вызова API.

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

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

Я бы рекомендовал использовать Django/Celery/RabbitMQ для ваших фоновых задач, получающих данные из FedEx API. Я бы разбил каждый раздел на минимально возможные изолированные шаги, чтобы облегчить отладку потока данных (отладка различных случаев данных может быть очень сложной)

  1. Создайте представление в БД API-запроса, который необходимо сделать FedEx
  2. .
  3. Сохраните ответ API-запроса, который был сделан, в файле S3 или в блобе DB (обновите предыдущий вызов API как обработанный)
  4. Разберите ответ на запрос API и сохраните нормализованные компоненты данных ответа в вашей БД (обновите предыдущий ответ по мере обработки)
  5. Представьте нормализованные данные ответа на запрос пользователю, если это успешно и необходимо

Разбирая его таким образом, вы можете увидеть, что именно пошло не так на каждом этапе и почему это пошло не так; например, что если первоначальный запрос был недействительным, что если FedEx API вернул недействительный ответ, что если ваш парсер не знал, как разобрать правильный ответ FedEx API, и т.д.

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

Удачи!

Вернуться на верх