2017-02-23 7 views
1

Ich schreibe eine Anwendung, die aiohttp verwenden, um eine Web-API zu veröffentlichen. Ich muss auch die gleiche API mit einem anderen Protokoll (xmpp) veröffentlichen. Derzeit besteht die Lösung darin, einen xmpp-Client in denselben Prozess einzubetten, der über eine normale HTTP-Verbindung (aiohttp-Client) eine Verbindung zur Web-API herstellt und die Antwort über xmpp weiterleitet. Aber da sie beide im gleichen Prozess laufen, würde ich es bevorzugen, wenn es einen Weg gibt, die Verbindung "kurzzuschließen".Kurzschluss Verbindung zwischen Client und aiohttp Webserver

Ich denke etwas wie Erstellen einer Request-Instanz und übergibt es an eine Methode in der aiohttp-Webanwendung (vielleicht die _handle() Methode?), Um es zu verarbeiten.

Gibt es Hinweise, wie man dies (vorzugsweise) nicht-hackisch macht?

Antwort

0

Ich habe etwas arbeiten jetzt, dass zumindest nicht auf private Methoden abhängen:

req = Request(...) 
req.match_info = await app.router.resolve("/api/1.0/status") 
response = req.match_info.handler(req) 

Dies funktioniert, aber es gibt Raum für Verbesserungen. Ich benutze auch eine benutzerdefinierte, vereinfachte Anfrage-Klasse:

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 

Das ist alles, was ich für jetzt benötige.

Verwandte Themen