#Modernes Web-Development in Haskell am Beispiel des Projektes `mateamt` ##Webentwicklung * Typischerweise unterteilt in Frontend und Backend * Typische Sprachen Backend: * PHP * Java * Ruby * Python * Frontendentwicklung geschieht in: * HTML * CSS * JavaScript * Häufige Bibliotheken im Frontend: * React * Bootstrap * jQuery ##Haskell * Rein funktionale Programmiersprache * Nicht-strikt evaluiert * Stark statisch typisiert * Volle Typinferenz * Typische Einsatzgebiete: * Big Data * Banken- und Finanzsektor * Wissenschaft (Simulationen, Hochparallele Berechnungen) * Theoretisch: Überall, da Turing-Vollständig ###Hauptunterschiede zur imperativen Programmierung * Vermeidung bzw. klare Trennung von Seiteneffekten (Disk IO, DB, Netzwerk, etc.) * Unveränderliche Variablen * Keine Schleifen * Kein State ##Vorteile von Haskell in der Webentwicklung * Serialisierung und Deserialisierung von Daten meist unkompliziert, da stark typisiert * Datenverarbeitung kann einfach auf Korrektheit geprüft werden * Webanwendungen sind i.d.R. stateless, Haskell auch * Haskell kann sehr gut mit konkurrenten Berechnungen umgehen, welche bei Webanwendungen häufig auftreten ##Konventionen beim `mateamt` und Unterschiede vom `yammat` * Programmiert ist es (wieder) in Haskell * Grundsätzlich ist das `mateamt` 'nur' ein Backend * Microservice-Architektur (Im Gegensatz zum monolithischen `yammat`) ermöglicht klarere Trennung zwischen Daten- und Kundenseite (Separation of Concerns) * Es wird ein modifiziertes MVC-Architekturmodell verwendet: * 'View' ist ausgelassen, da keine Anzeige erfolgt * Vorteil ist auch hier eine Domänentrennung zwischen Datenbank und Controller. * Kommunikation mit Frontend(s) läuft über eine definierte JSON-REST-API ##Das Frontend des `mateamt`es * Zukünftige Benutzer das `mateamt`es sind ausdrücklich eingeladen eigene Clients/Frontends für die API des `mateamt`es in einer Sprache ihrer Wahl zu implementieren. * Zur Unterstützung der Entwicklung eigener Clients/Frontends werden angeboten: * OpenAPI 3.0 beschreibung der API * Swagger UI * Ein Referenzclient (der `matebeamte`) ist bereits in Arbeit