我使用 Django Rest Framework 实现了一个 Django REST API。
对于此 API,我必须调用 3 个 http Web 服务,然后合并数据结果,例如 API 的响应。
所以我有:
- Request WS 1
- Request WS 2
- Request WS 3
--> RESULT = Merge Results 1, 2, 3
----> Response: RESULT
是否可以将 Request WS 1, 2,3 作为异步请求?
这是个好主意吗?
最佳答案
使用线程来做到这一点不是一个好主意,线程增加了更多的复杂性并且可能难以调试。
在这种情况下,您可以使用任务调度程序(Celery、Django-RQ 等)。您必须根据您的系统选择一个。 Celery 是众所周知的,但对于您的系统来说可能太多了。
我建议使用 HTTP 状态和一些基本负载来解决这个问题。
这个想法是获取请求,将“获取第三方站点任务”发送到任务调度程序并返回状态为 202 的“轮询 URL”。
“轮询 URL”是指一个 API 端点,用户可以在其中检查任务的状态。
HTTP 状态 202 告诉用户请求已被接受但处理尚未完成(其异步)。
然后 API 的被调用者可以每 X 次轮询“轮询 URL”,以获取任务的结果。
例子:
def api_process_request(request):
data = process_data(request)
polling_url = send_task_to_scheduler(data)
return JsonResponse({'url': polling_url}, status=202)
def api_polling_url(request, task_id):
done, result = task_scheduler_get_result(task_id)
return JsonResponse({'result': result, 'status': done}, status=200)
希望对你有帮助!
祝你好运 :)
关于Django REST Framework 发出异步请求以响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32681602/