twisted 是python的一个异步网络框架,txrestapi 是基于 twisted 的一个 RESTFUL API 服务的包,使用 txrestapi 的代码基本如下:
from twisted.internet import reactor
from twisted.web import server
from txrestapi.resource import APIResource
from txrestapi.methods import GET, POST, PUT, ALL
class MyResource(APIResource):
@GET("/path1")
def path1(self, request):
return "path1"
@POST("/path2")
def path2(self, request):
return "path2"
@ALL("/")
def default(self, request):
return "default route"
if __name__ == "__main__":
site = server.Site(MyResource())
reactor.listenTCP(8080, site)
reactor.run()
当我们把程序运行起来后,可以在浏览器中访问 http://127.0.0.1:8080/path1 得到 path1, 访问其他可以得到 default route.
从代码来看,这个路由请求的回调函数是比较快的执行结束了。但是存在一个问题,如果某一个路由请求需要执行一段时间后才能得到最终的结果,如何才能将正确的数据返回给请求者呢? 这里就需要用到 twisted.web.server.NOT_DONE_YET 这个属性。这样把 NOT_DONE_YET 返回给 reactor 的时候,它不会立即构造 response 返回给请求者,一直会得到 request.finish