2009-10-01 6 views
5

Ich habe eine Idee für einen Webservice, bin aber sehr neu in der Webprogrammierung. Django sieht gut aus und mag etwas, das ich schnell aufnehmen kann. Ich habe viel Erfahrung in Haskell (und sehr wenig in Python) und würde gerne in der Lage sein, einige der nicht-webbezogenen Backend-Dinge in meiner Lieblingssprache zu schreiben. Aber natürlich will ich das nicht, wenn der Haskell-Code nicht benutzbar ist, wenn ich mit Django gehe.Kann ich Komponenten in Haskell schreiben, um auf einer Django-Site verwendet zu werden?

Ich habe mehrere Haskell-Web-Frameworks betrachtet: hApps sieht zu kompliziert und undokumentiert, turbinado sieht zugänglich, aber ist undokumentiert, etc. Und ich denke mit einem weit verbreiteten Framework wie Django, und Zugriff auf eine Menge Code dass ich einfach einstecken kann, wird mir sehr helfen. Aber ich bin sehr offen für andere Ideen zu Frameworks zu verwenden, oder andere Optionen, die ich Haskell in irgendeiner Weise verwenden muss.

Antwort

4

Es hängt davon ab, was Sie mit "Web Service" meinen.

Wenn Sie eine typische Webanwendung/Website meinen, benötigen Sie eine einfache Schnittstelle zu einer Datenbank, HTML-Generierung, einfache HTTP-Behandlung, Sitzungen und Formularverarbeitung. Sie brauchen wirklich ein anständiges Web-Framework dafür.

Es gibt keine "guten" Web-Frameworks für Haskell da draußen. (Bei diesem Urteil schließe ich Faktoren wie Dokumentation, Gemeinschaft, Wahrscheinlichkeit-dass-es-wird-nicht-aufgegeben-in-einem-Jahr-für-neuere-glänzender-Ansatz usw.) ein.

Wenn Sie etwas viel weniger "Webby", z. ein Dienst, der Kartendaten zurückgibt und die meisten dieser Funktionen nicht benötigt, könnten Sie mit etwas wie Hack oder sogar Network.CGI kommen, um Ihnen die grundlegende HTTP-Schnittstelle zur Verfügung zu stellen, auf der Sie Ihren Dienst aufbauen würden, mit CGI/FastCGI. Wenn Sie auch eine dynamische Website benötigen, können Sie für genau diesen Teil etwas wie Django verwenden.

Sie können auch eigenständige Haskell-Executables schreiben, die aus Django-Code aufgerufen werden. Aber direkte Python < -> Haskell Interop ist unwahrscheinlich, dass möglich/praktisch.

+2

"Python <-> Haskell Interop ist wahrscheinlich nicht möglich/praktisch." - Es ist sicherlich möglich und praktisch, Python von Haskell aus aufzurufen - und nützlich, wenn Sie eine Bibliothek benötigen. Siehe die Bindung von hpaste2 an pygents. –

+0

Sie könnten dies überraschend finden, aber nicht jede Webanwendung ist "ein Formular ausfüllen (und Validierungsfehlermeldungen anzeigen) und das Ergebnis in eine SQL-Datenbank schreiben". – jrockway

+0

@dons: Ich denke, das ursprüngliche Poster sprach über den Aufruf von Haskell von Python. Aber ich wusste nichts Python <-> Haskell Interop, ich stehe korrigiert :-) @ ĵrockway: einverstanden - das ist, warum ich eine "typische" Web-App/Website sagte. – spookylukey

1

Lernen Sie Python, Sie werden feststellen, dass es viele funktionale Funktionen hat. Es ist leicht zu erlernen und sehr angenehm.

Gute Wahl mit Django.

+1

Was sind die nicht funktionalen Funktionen von Python? Anders als Antigravitation (http://xkcd.com/353) natürlich. –

+1

@Dominic: Die Fähigkeit, Objekte zu mutieren. Die Fähigkeit, Variablen neu zu binden. Eingeschränkte Unterstützung für Lambda-Funktionen (dies ist eine große). Mangelnde Unterstützung beim Komponieren und teilweisen Anwenden von Funktionen. – Chuck

3

Wenn Sie nur einen Webdienst erstellen, können Sie CGI- oder Fastcgi-Programme in Haskell schreiben, um die Webdienstanrufe zu verarbeiten.

+0

Ist das eine Methode, die mit Django funktioniert, oder eine Alternative? Ich habe ein wenig Verständnis für CGI außerhalb von Django, aber noch nicht wirklich klar, wie Django/CGI zusammenarbeiten. – jberryman

+0

@jberryman: Ich weiß nicht, wie Django mit CGI funktioniert, aber wenn Sie nur einen Webdienst schreiben, bin ich mir nicht sicher, ob Django das richtige Werkzeug für den Job ist. Wie Spookylukey sagt, wenn Sie eine Standard-Web-Anwendung meinen, dann ist das etwas anderes als das, worüber ich spreche. Wenn Sie nur URLs angeben möchten, die Daten zurückgeben, sollten Sie Django überhaupt nicht verwenden. – Amok

1

Gehen Sie für F # und überprüfen Sie NDjango - das ist ein Django-Port in F # geschrieben. Volle Offenbarung: NDjango ist mein Projekt www.ndjango.com

+0

Das ist ein interessanter Vorschlag, aber viele Leute sind nicht so heiß auf MS-Sprachen. – Chuck

0

Wenn Sie möchten, dass Haskell direkt mit der Datenbank kommuniziert, müssen Sie das Django-Datenbankmigrationsskript so modifizieren, dass auch Haskell-Modellcode mit einer Bibliothek wie Yesod's Persistent ausgegeben wird.

Verwandte Themen