PHP-Webshop mit Python-Modul erweitern

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

Hallo,

ich habe eine umfangreichere Anwendung in Python entwickelt. Ein wesentlicher Teil der Programmlogik wird jetzt auch in einer Erweiterung für einen PHP-Webshop (stammt von XT:Commerce ab) benötigt. Im Moment verwende ich ein schnell zusammengehacktes PHP-Skript, das die Logik mehr schlecht als recht nachbaut. Das funktioniert zwar (noch) ist aber alles andere als produktionstauglich und muß also in jedem Fall noch mal gründlich überarbeitet werden.

Jetzt bin ich kein großer Freund von doppelter Arbeit. Wenn ich jede Änderung an der Programmlogik an zwei Stellen (mit unterschiedlichen Zugriffskonzepten: Die Pythonlösung geht z.B. über SQLAlchemy) einpflegen und testen muß, ist Ärger vorprogrammiert. Am Liebsten würde ich die in Python geschriebene Programmlogik direkt oder mit einem kleinen PHP-Überbau in den Shop integrieren.

Meine Frage ist jetzt, ob jemand von euch mit so etwas schon Erfahrungen sammeln konnte? Eine erste schnelle Suche ergab, daß xmlrpc möglicherweise ein Lösungsansatz sein könnte. Hat jemand noch eine andere Idee?

Schönen Dank schon mal
lunar

In diesem Fall solltest du die Backend-Logik in einen Dämon auslagern, und dann irgendeine Art von IPC nutzen, um mit den Frontends zu kommunizieren. XML-RPC wäre da eine Möglichkeit, ich persönlich würde DBus bevorzugen, da DBus objektorientiert arbeitet. Ich weiß aber nicht, ob es DBus-Bindings für PHP gibt.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Ich vermute mal, dass sich Python-Teil und PHP-Teil eh schon die Datenbank bzw. den Datenbestand teilen und gemeinsam nutzen. Der PHP-Teil ist zudem für die Darstellung der Webseiten verantwortlich, richtig? Warum lässt du in Python nicht ebenfalls (unter Einsatz eines Webrahmenwerks vielleicht) Teile der Webseiten darstellen? Dem Anwender muss das doch gar nicht auffallen. Oder sollen nur einzelne kleinere Teile in der Anzeige von Python berechnet werden (etwa ein Gesamtpreis oder eine Liste mit Angeboten)?

Stefan
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

Vielen Dank für eure Antworten.
sma hat geschrieben:Ich vermute mal, dass sich Python-Teil und PHP-Teil eh schon die Datenbank bzw. den Datenbestand teilen und gemeinsam nutzen. Der PHP-Teil ist zudem für die Darstellung der Webseiten verantwortlich, richtig?
Das ist im Grunde richtig. Der Shop bringt zwar seine eigene Datenbank mit, das Erweiterungsmodul greift aber auf die selbe Datenbank zu wie die Python-Anwendung.
sma hat geschrieben:Warum lässt du in Python nicht ebenfalls (unter Einsatz eines Webrahmenwerks vielleicht) Teile der Webseiten darstellen? Dem Anwender muss das doch gar nicht auffallen. Oder sollen nur einzelne kleinere Teile in der Anzeige von Python berechnet werden (etwa ein Gesamtpreis oder eine Liste mit Angeboten)?
Die Schwierigkeiten, die ich sehe:
1) Der Kunde muß sich einloggen, um an die Daten zu kommen. Damit er sich nicht zwei Mal einloggen muß (1x Shop, 1x Datendarstellung), muß ich irgendwie die Session des Shops mitnutzen. Mir ist kein Weg bekannt, die Session von PHP auf Python zu übertragen. Aber ich stecke auch nicht sonderlich tief in der Materie.

2) Die (tabellarische) Darstellung der berechneten Daten soll in den Shop integriert sein. Ich bezweifele irgendwie, daß der Shop in der Lage ist, mit Python generierte Inhalte einfach so mit einzubeziehen.

Mein Ansatz ist im Moment der folgende: Da die Daten eigentlich nur ein Mal am Tag berechnet werden müssen, könnte ich diese Berechnung von einem Pythonskript erledigen lassen und die Ergebnisse dann in einer Tabelle in der Datenbank ablegen. Das PHP-Modul würde dann nur noch diese Daten abgreifen und ausschließlich im Hinblick auf die Darstellung verarbeiten. Ich hätte also eine Trennung von Ausgabe und Logik, könnte die Logik irgendwo unterbringen, wo ich die entsprechenden Python-Module zur Verfügung hätte und würde den Zugriff über den Webshop vermutlich auch etwas beschleunigen. Fällt euch spontan noch eine elegantere Lösung ein?
Antworten