Skip to content

Von Djangos Bibliothek auf WPs Bücherliste – oder: Schnittstellenprogrammierung zwischen PHP und Python

Da mir PHP seit einiger Zeit ein Graus ist (PHPSucks) und ich Python mehr und mehr zu schätzen lerne, lagere ich so nach und nach Code nach Python aus, den ich früher in PHP geschrieben habe oder hätte.

Als Problem hat sich dabei die Schnittstelle von bestehendem PHP- zu Python-Code erwiesen. Eine einfache, native Unterstützung in PHP für einen Interop-Aufruf von Python-Code habe ich bei meiner Suche nicht gefunden.

Zur Zeit verwende ich daher zwei Kommunikationswege:

Wobei ich bei Dateischnittstellen, das was man normalerweise als Funktionsparameter übergeben würde, in eine Datei schreibe und danach ein Python-Skript rufe. Der Returnwert wird dann ggf. wieder in eine Datei geschrieben. Das klingt ziemlich uncool und ist bestimmt nicht performant. In großen heterogenen Systemen wird eine Schnittstelle aber durchaus auch so umgesetzt. Ich bin mir nicht sicher, ob man das Thema “Skalierbarkeit” ansprechen sollte. Andererseits kann ich mir vorstellen, dass so eine Dateischnittstelle nicht so viel weniger performant ist wie ein WebService. Um genauere Untersuchungen werde ich mich kümmern, wenn’s tatsächlich eine Engstelle werden sollte.

Für den Kommunikationsweg “WebService” muss ein Server laufen, der Anfragen beantwortet. Zur Zeit ist das bei mir recht simpel: Wenn eine bestimmte URL angesprochen wird, macht der Server seine Auswertung und liefert das Ergebnis als String zurück. Klassisch wäre wohl XML. JSON ist mir aber sympathischer (speziell für schnelle Hacks und weil bei mir ja alles aus einer Hand kommt). Wenn man nur einen Konsumenten hat (und wenn man das Ergebnis nicht noch mit PHP bearbeiten möchte) bietet sich als Rückgabe auch direkt HTML an.

Eine Umsetzung mit JSON wäre ebenfalls nichtmal so schwer. Django bietet einen JSON-Serializer an, der Datenobjekte in einen JSON-String umwandelt. Auf PHP Seite wird seit Version 5.0 ebenfalls das Encoden und Decoden von JSON nativ unterstützt.

Warum das alles?

Evtl. ist es dem aufmerksamen Leser bereits aufgefallen: In der Seitenleiste der “Denkzeit” gibt es wieder meine Bücherliste. Bislang war das ein Wordpress-Plugin (Now-Reading). Jetzt wird sie von einer Django-Anwendung bereitgestellt.

Ich verwalte schon seit einiger Zeit meine Bücher in dieser Django-Anwendung. Letztes Wochenende habe ich einen “WebService” geschrieben, der es mir ermöglicht, die “Was ich gerade lese”-Liste in Wordpress einzubinden. Dafür reicht eine Zeile PHP-Code. Das HTML lasse ich über ein Template von Django erzeugen. Sobald man auf eins der Bücher oder auf den “Bibliothek”-Button klickt kommt man in die eigentliche Django-Anwendung.

Der PHP-Code liest den Inhalt einer URL ein und gibt ihn aus: echo open("http://meine.url.de/meine_methode/");. Um diese URL kümmert sich in der Django-Anwendung eine “View”, die die entsprechenden Datensätze aus der Datenbank ausliest und mittels eines Templates das HTML erzeugt, das dann als Inhalt zurückgegeben wird.

Zugegeben, mein “Bücherregal” ist nicht so der Hingucker, hat aber – ich hoffe es – Potential… Fast wie ein Regal der praktischen schwedischen Möbelmarke.

Verwandte Artikel

Post a Comment

Your email is never published nor shared. Required fields are marked *