据我所知,DRF不会像Play Framework那样做自己的异步(或非阻塞)框架,但是我对这是否重要也感兴趣.我一直在想的情况是通过Mandrill向用户发送电子邮件 – 我不希望我的API陷入僵局等待Mandrill API来告知电子邮件是否被发送.
因此,我认为这个问题可以总结如下:从客户的角度来看,是否有利于我通过异步/非阻塞框架构建一个API,如在DRF上播放,或者我是否缺少一点?
解决方法
Django REST框架是建立在Django上的,它是Web应用程序的同步框架.如果您已经在使用像Django这样的同步框架,那么拥有同步API就不是一个问题了.
现在,只是因为它是同步的,这并不意味着一次只能处理一个请求.大多数正在处理Django应用程序的Web服务器can handle multiple requests,一些主题甚至可以做到这一点somewhat asynchronously across multiple threads.通常这并不是一个问题,因为您的Web服务器通常可以处理许多并发请求,即使其中一些阻塞.当你长久以来,阻止通话你通常不希望在API内完成 – 你应该将它委派给像Celery或Resque这样的后台工作人员.
这不仅仅是Django特有的,许多相同的原理也适用于像Rails和ASP.NET MVC这样的其他同步框架.如果您有长期的请求,您通常应该将工作委派给其他进程,而不是阻止请求.通常使用202响应代码for these cases.
现在,这并不一定意味着异步框架是无用的.在运行时,如Node.js,大多数框架handle requests asynchronously.在这些语言中使用同步框架是没有意义的,所以大多数库被构建为异步的.
您所选择的内容取决于您已经使用的工具.