我正在编写一个使用aiohttp发布web api的应用程序。我还需要使用另一个协议(xmpp)发布相同的api。目前解决方案是将xmpp客户端嵌入到使用常规HTTP连接(aiohttp客户端)连接到web api的相同进程中,并通过xmpp转发响应。但是因为它们都在同一个过程中运行,所以如果有一种方法可以“短路”连接,我会更喜欢。
我正在考虑创建一个Request实例并将其传递给aiohttp Web应用程序中的方法(可能是_handle()
方法?)来处理它。
有关如何以(最好)非hackish方式执行此操作的任何提示?
答案 0 :(得分:0)
我现在有一些工作,至少不依赖私人方法:
req = Request(...)
req.match_info = await app.router.resolve("/api/1.0/status")
response = req.match_info.handler(req)
这很有效,但还有改进的余地。我也使用自定义的简化Request类:
from yarl import URL
class XmppHttpRequest:
def __init__(self, method, path):
self.method = method
self.path = path
self.rel_url = URL(path)
self.url = self.rel_url
self.match_info = None
这就是我现在所需要的。