处理Twisted Web服务器中的所有资源

0x9*_*x90 2 python rest twisted

我正在开发一个REST API来响应GET和PUT请求.

由于多种原因,此API将使用Python和Twisted编写.也就是说,扭曲的网络似乎是基于我发现的所有示例的资源.

这意味着我的理解,我必须设置单独的资源并为每个资源定义GET和POST的处理程序.

我想要做的是设置GET和POST处理程序,这些处理程序被称为所请求的任何资源.

在伪代码中:

import *the appropriate modules*

class Callback(resource.Resource):
    def render_GET(self,request):
        print "GET!"
    def render_POST(self,request):
        print "POST!"

def main():
    *magic*
    reactor.listenTCP(settings.port,factory)
    reactor.run()
    print "Started callback server on port %d" % settings.port

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

不幸的是,我在网上搜索的例子却没有办法做到这一点.

关于如何设置"全部捕获"资源或使用不同的反应器类型来处理这一点的任何输入都是最受欢迎的.

Jea*_*one 6

这个问题(可能还有其他你会有的:)在Twisted Web in 60 Seconds文档系列中得到了解答.

特别是,你在询问Twisted Web中所谓的"动态URL调度".听起来你已经找到了Resource.putChild允许你处理静态URL调度的API.使用动态URL分派,您不必为要提前处理的所有URL设置处理程序.相反,您重写getChild以实现自己的逻辑以按需创建资源.

有关更多详细信息,请参阅动态调度文档,但要点是:

class Calendar(Resource):
   def getChild(self, name, request):
       return YearPage(int(name))
Run Code Online (Sandbox Code Playgroud)

这是一个通过创建YearPage知道该整数是什么的资源来处理任何整数子的资源.您应该可以执行类似的操作来创建Callback资源.

  • 对于超过1种资源有任何建议吗?例如,我试图找到一种方法,不仅可以"日历/ 2013"​​,还可以"日历/ 2013 /月/ 7月/日/ 1".基本上试图了解如何构建资源和子资源. (2认同)