Django REST Framework 发出异步请求以响应

标签 django web-services rest asynchronous celery

我使用 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/

相关文章:

Python,在Django项目中设置日志级别,使用gunicorn和4个worker部署

asp.net - 无法从 JSON Webservice 获取值

ios - 使用 Web 服务对远程数据库实现用户身份验证

java - @FormDataParam 抛出严重 : Missing dependency

node.js - 我的 Web Apps API 需要 Oauth2 吗

python - 无效命令 WSGIDaemonProcess 在 CentOS 6.7 上部署 Django 应用程序

django - django-rest-framework序列化器to_representation

django - 使用 Django Rest Framework 序列化通用关系,并提供写入支持

c# - 针对外部 Web 服务的 ASP.NET MVC 表单例份验证

rest - 在 Vuejs 应用程序中使用 $location.protocol() 和 $location.host()