Kommen wir nun zu den Snap Details. Snap selbst basiert auf den sogenannten Iteratees, welche Probleme mit lazyIO beheben. Weiteres zu Iteratees kann man auf folgender Seite lesen: http://www.haskell.org/haskellwiki/Iteratee_I/O
.
Es gibt zudem eine eigene Monade, die Snap Monade
. Mit Snap kommen auch die sogenannten Snaplets
, welche in sich abgeschlossene Anwendungen darstellen. Ein weiterer Bestandteil ist die Templating Engine Heist
, die eine Schnittstelle zwischen HTML und Haskell schafft und dem einfachen Bau von Webseiten dient.
In der Snap Monade laufen die user web handlers. Mit ihr bekommt man zudem zustandsbehafteten Zugriff um HTTP Requests und Responses abzufangen und zu modifizieren. Des weiteren bietet sie
Fehler-, Alternativen- und MonadPlus Semantik, damit Requests nicht behandelt oder an alternative Handler weitergegeben werden. Andere wichtige Funktionen wurden zum größten Teil schon im Abschnitt Code
des
Quickstart-Projekt
Kapitels behandelt. Für weitere Informationen lohnt sich ein Blick auf den Eintrag in der hackage-db.
Snap enthält die folgenden Pakete:
Das Paket snap-core bietet die API als Schnittstelle zum Web-Server und enhält alle Typdefinitionen und Code der Server-agnostisch ist, also keine Kenntnis vom Server hat. Diese API wird von snap-server, einer HTTP Server Bibliothek, unterstützt. Heist ist die von Snap eigene Templating Engine. Es bietet jegliche Funktionalität, um Templates zu rendern und spezielle Tags zu erzeugen, mit denen man im HTML auf Haskell Code zugreifen kann. Als Letztes haben wir noch snap, welches auf den vorigen 3 aufbaut. Es bietet zudem Higher-Level-Abstraktionen, um komplexe Webseiten zu bauen. In snap sind auch das Snap-Executable sowie die Snaplets-API enthalten. Auch sind hier 3 Snaplets für Sessions, Authentifizierung und Heist von den Entwicklern von Snap enthalten.
Snap unterstützt seit Version 0.3 auch TLS. Dafür wurde zunächst GnuTLS genutzt. Seit Version 0.5.3 kommt OpenSSL zum Einsatz. Dafür muss snap-server mit dem Flag -fopenssl installiert sein. Hattet ihr bereits den snap-server ohne dieses Flag installiert, könnt ihr das Paket sicher über folgenden Aufruf entfernen. Tut ihr dies nicht, kann es zu Konflikten kommen.
1 | $ ghc-pkg unregister -f snap-server
|
Wenn ihr nun einen Server mit TLS starten wollt, geht dies über den folgenden Aufruf:
1 | $ ./app --ssl-port=443 --ssl-cert=cert.pem --ssl-key=key.pem
|
Mit der Funktion rqIsSecure kann nun überprüft werden, ob in einer HTTPS-session gearbeitet wird. Würde man den Server ohne die SSL-Parameter starten, gibt diese Funktion ein false zurück.