如何为Tornado和非Tornado服务编写通用API客户端

时间:2014-11-12 23:01:20

标签: python httpclient tornado

我有一个公开某些API的网络服务。我想在两个应用程序中使用此API,一个是命令行工具,另一个是Web服务器本身。

对于网络服务器,我使用的是Python龙卷风,所以我可以使用AyncHttpClientgen.coroutine等。但对于CLI,我不能使用龙卷风,因为它需要一个IOLoop正在运行异步工作。

我希望创建一种与API对话的库,并在CLI和Web服务中重用此库。这意味着我应该能够在其函数之上编写(可能是tornado gen)代码以使其异步。

1 个答案:

答案 0 :(得分:1)

为什么不在CLI工具中使用IOLoop?

@gen.coroutine
def main():
    client = AsyncHTTPClient()
    response = yield client.fetch('http://www.google.com')

if __name__ == '__main__':
    IOLoop.instance().run_sync(main)

还有同步tornado.httpclient.HTTPClient,它使用与AsyncHTTPClient相同的请求和响应对象。

如果您想与HTTP客户端无关,那么您需要遵循oauthlib的示例。提供一个基于HTTP头和响应主体的基本客户端,并单独提供从该客户端到各种实现(如requests-oauthlib)的绑定。 (或者只是释放基本客户端,并期望你的调用者找出映射到他们自己的HTTP实现)