Webdev-Haskell/writeup.md

2.1 KiB

#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 mateamtes

  • Zukünftige Benutzer das mateamtes sind ausdrücklich eingeladen eigene Clients/Frontends für die API des mateamtes 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