Как передать пользователю ответ фоновой задачи Django
Я создал веб-приложение на django, которое использует API FedEx, чтобы пользователь мог создавать отправления через мой сайт. Ответ этого вызова API FedEx в формате xml содержит много данных, таких как: успех или неудача запроса, сообщения об ошибках, коды ошибок, номер отслеживания (в случае успеха) и т.д. Я использую фоновые задачи django для выполнения этих вызовов API, и после завершения процесса я не могу получить ответ от вызова API.
Я думал сохранить xml ответ в файл и передать его пользователю, но прежде чем я сделаю это, я хотел бы узнать, есть ли лучший способ.
Я также хотел бы узнать о лучшей практике для ответов API в целом, например, нужно ли пользователю видеть весь ответ, и если да, то как я могу отобразить его наилучшим возможным способом.
Я бы рекомендовал использовать Django/Celery/RabbitMQ для ваших фоновых задач, получающих данные из FedEx API. Я бы разбил каждый раздел на минимально возможные изолированные шаги, чтобы облегчить отладку потока данных (отладка различных случаев данных может быть очень сложной)
- Создайте представление в БД API-запроса, который необходимо сделать FedEx .
- Сохраните ответ API-запроса, который был сделан, в файле S3 или в блобе DB (обновите предыдущий вызов API как обработанный)
- Разберите ответ на запрос API и сохраните нормализованные компоненты данных ответа в вашей БД (обновите предыдущий ответ по мере обработки)
- Представьте нормализованные данные ответа на запрос пользователю, если это успешно и необходимо
Разбирая его таким образом, вы можете увидеть, что именно пошло не так на каждом этапе и почему это пошло не так; например, что если первоначальный запрос был недействительным, что если FedEx API вернул недействительный ответ, что если ваш парсер не знал, как разобрать правильный ответ FedEx API, и т.д.
Делая это таким образом, можно облегчить отладку и масштабируемость в долгосрочной перспективе.
Удачи!