web-frameworks: ruby on rails - wi1.uni- · pdf fileweb-frameworks: ruby on rails thomas...
TRANSCRIPT
Web-Frameworks:Ruby on Railsy
Thomas Jansing
05. Januar 2009
Software-Engineering Seminar (WS 2008/2009)
Agenda
Web-Frameworks
Ruby on Rails
Live-Demo
Erweiterungen
Fazit
1
Agenda
Web-Frameworks
Ruby on Rails
Live-Demo
Erweiterungen
Fazit
2
Web-Anwendungen
Wer hat „Enterprise Application Integration“ gehört?
Bedeutung von Web-Anwendungen: Bekannt
Problem bei Web-Anwendungen: Heterogenität P i /Sk i t hProgrammier-/Skriptsprachen
Datenbanken
Web-ServerWeb Server
Betriebssysteme/Plattformen
Ziel von Web-Frameworks: Erstellen von Web-Anwendungen vereinfachen
3
Kombination von Komponenten zu einer Entwicklungsumgebung
Web-Frameworks
Beispiele für Web-FrameworksNET.NET
DotNetNuke, ...
JAVAStruts, MyFaces, ...
Perl/PHPCatalyst, Symfony, ...
PythonDjangoDjango, ...
Und sonst?
4
Web-Frameworks
Ruby on Rails
Web-Framework: Rails
Programmier-/Skriptsprache: Ruby
5
Allgemeine Konzepte & Paradigmen
Rapid Application Development (RAD)
R id W b D l t & R id P t t i Rapid Web Development & Rapid PrototypingAnforderungen möglichst schnell in ausführbaren Code umsetzen
Extreme Programming (XP)Problemlösung steht im VordergrundProblemlösung steht im Vordergrund
Kleine iterative Schritte mit Rückkopplung
Test-driven development (TDD)Tests werden vor der eigentlichen Implementierung geschrieben
Agile Softwareentwicklung
6
Allgemeine Konzepte & Paradigmen
Model-View-Controller (MVC) Architekturmuster
TrennungDatenmodel (Model)Datenmodel (Model)
Präsentationsschicht (View)
Steuerungsschicht (Controller)
Ziel: Web-Anwendung flexibel gestaltenWiederverwendungWiederverwendung
Geringerer Pflegeaufwand
Geprüfte und stabile Software
7
Agenda
Web-Frameworks
Ruby on Rails
Live-Demo
Erweiterungen
Fazit
8
Ruby
1995 von Yukihiro Matsumoto entwickelt
Obj kt i ti t P i /Sk i t hObjekt-orientierte Programmier-/Skriptsprache
Unterstützung für Prozedurale und Funktionale ProgrammierungProgrammierung
Dynamische Typisierung während der Laufzeit (Duck-Typing)(Duck-Typing)
„Principle of least surprise“
Syntax orientiert sich stark an natürlicher menschlicherSyntax orientiert sich stark an natürlicher menschlicher Sprache
Klassen Methoden (Java) Modelle Aktionen (Ruby)Klassen, Methoden (Java) Modelle, Aktionen (Ruby)
9
Ruby - Beispiel Modell: UserErbt von der ActiveRecord Basis-Klasse
class User < ActiveRecord::Base
d f lf th ti t (l i d)def self.authenticate(login,password)
user = self.find_by_login(login)
ifif user
if user.password != passwordUser-Objekt gefunden?Aktion
user = nil
end
end
user User-Objekt wird zurückgegeben
end
end
10
Rails
Von David Heinemeier Hansson entwickeltMitte 2004 Erste öffentliche VersionMitte 2004: Erste öffentliche Version
Ende 2005: Version 1.0
Ende 2007: Version 2.0Ende 2007: Version 2.0
Open Source Web-Framework (MIT-Lizenz)
PraxisnahPraxisnahBasiert auf Code & Erfahrungen bei der Entwicklung einer Projektmanagement Web-Plattform (basecamphq.com)
„Konvention über Konfiguration“Namenskonventionen vermeiden Konfigurationsaufwand
DRY P i i ( D ´ lf“)DRY-Prinzip („Don´t repeat yourself“)Vermeidung von Redundanz
11
Rails
Meta ProgrammierungA tomatische Generier ng on Programmcode ScaffoldingAutomatische Generierung von Programmcode Scaffolding
CRUD-Funktionalität der Modelle
Modelle, Views, Controller und Tests
Objekt-relationes Mapping (ORM)Konfigurationsaufwand sehr gering
DB-Migrationen Versionierung der DB-Schemata möglich
3 UmgebungenDevelopment
Test
ProductionProduction
12
Aufbau von Rails
13
Wozu Rails?
Rapid PrototypingZiel a Ent ickl ngsda er/Kosten red ierenZiel: u. a. Entwicklungsdauer/Kosten reduzieren
Wodurch? -> Agilität und Flexibilität
Fokus auf Implementierung der Geschäftslogik
kürzere Entwicklungs-Zyklen
Feedback der Nutzer soll schneller in die Entwicklung einfließen
14
Produktiver Einsatz
Wer setzt Ruby on Rails produktiv ein?
XING.com
Qype.com
Eins.de
Viele mehr...
15
XING.com
16
Qype.com
17
Eins.de
18
Produktiver Einsatz
Gemeinsamkeiten?
Web2.0/AJAX
Viel dynamischer Inhalt
Große „Marktplätze“
19
Agenda
Web-Frameworks
Ruby on Rails
Live-Demo
Erweiterungen
Fazit
20
Rails
EntwicklungsumgebungOS Windo s Vista 32 bitOS: Windows Vista 32-bit
Datenbank: SQLite 3 (Ver. 3.6.4)
Ruby (Ver. 1.8.6-27 RC1)Ruby (Ver. 1.8.6 27 RC1)
Ruby-Gems (Paketverwaltung)Rails 2.1.1
SQLite3 Adapter 1.2.3
Mongrel Web-Server 1.1.5
Konfiguration?
Nicht notwendig!
21
Rails
Beispielanwendung: Pizza-Bestell-ServiceAdmin Pi a Ver alt ng (Anlegen Editieren Löschen)Admin Pizza-Verwaltung (Anlegen, Editieren, Löschen)
Kunde Bestellung (Anlegen)
Unterscheidung Admin, Kunde über Login-Funktionalität (Profil)Unterscheidung Admin, Kunde über Login Funktionalität (Profil)
Was erleichtert die Bestellung? Eine Pizza-Suche
Grundgedanke: Rapid Web Development!g p p(Anforderungen möglichst schnell in ausführbaren Code umsetzen)
Was wird benötigt?Modelle (Klassen)
Attribute
Assoziationen (Relationen) zwischen ModellenAssoziationen (Relationen) zwischen Modellen
UML Diagramm
22
g
UML Diagramm
Orders_Pizzas
+name : string
Pizza
+delivery wish : text
Order+name : string+address : string+zip code : integer
User
1** *+name : string+price : decimal+ingredients : string
+delivery_wish : text p_ g+city : string+login : string+password : string
23
Live-Demo
1. Rails-Projekt erstellen“rails pizza-service”
2. Modell generieren“ruby script\generate scaffold modellname attribut:typ ...”
3. DB migrieren“rake db:migrate”
4 Testen 4. Testen “ruby script\server”
http://localhost:3000p
24
Agenda
Web-Frameworks
Ruby on Rails
Live-Demo
Erweiterungen
Fazit
25
Session-Handling
Session-HashVariable: sessionVariable: session
Speichert Objekte über mehrere Requests hinweg
Anwendung: User-Objekt, Warenkorb ...Anwendung: User Objekt, Warenkorb ...Bsp.: session[:user] = User.find_by_id(id)
Flash-HashVariable: flash
Speichert Objekte für zwei aufeinander folgende Requests
Anwendung: Fehlermeldungen, Bestätigungen ...Bsp.: flash[:error] = „Password is incorrect!“
Im View: <%= flash[:error] %>Im View: <%= flash[:error] %>
26
Validierung
Validationen werden im Modell definiert
B Pi M d ll ( \ d l \ i b)Bsp.: Pizza-Modell (app\models\pizza.rb)
# All d i Att ib t ü b d# Alle drei Attribute müssen angegeben werden
validates_presence_of :name, :price, :ingredients
# Das Attribut “Name” der Pizza soll eindeutig sein# Das Attribut Name der Pizza soll eindeutig sein
validates_uniqueness_of :name
# Das Attribut “Preis” soll positiv sein
validates_numericality_of :price, :on => :create,
:greater_than => 0, :message => "Price should be > 0."
27
Live Demo
Web-Services und AJAX sind fester Bestandteil von RailsRails
Live-Demo
28
Sicherheit in Rails
„SQL-Injection“
Person.find(:first, :conditions => “user = ‘#{params[:user]}’ ” + “and pw = #{p [ ]} p‘#{params[:password]}’”)
Keine Überprüfung!
Person.find(:first, :condition => [“user=? and pw=?”, user, pw])p , , p ])
Person.find_by_name_and_pw(:user], params[:password])
Implizite Überprüfung!
29
Sicherheit in Rails
„cross-site scripting“ (XSS)
<%= @einWert %>
Keine Überprüfung!
html_escape() Methode von Ruby für alle Variablen verwenden, die erst bei der Generierung der Views ausgewertet werden
<%=h @einWert %>
Kein Einschleusen von HTML-Code und/oder Skripten möglich
30
Performance
Langsamer alsJa a EE da keine VM orhanden (noch)Java EE, da keine VM vorhanden (noch)
Vergleichbar mitDjango (basiert auf Python)Django (basiert auf Python)
Besser alsSymfony (basiert auf PHP)Symfony (basiert auf PHP)
Caching/Load-Balancing etc. vorhandeng g
Umfangreiche Tools zur Performance-Optimierung g p gvorhanden
31
Agenda
Web-Frameworks
Ruby on Rails
Live-Demo
Erweiterungen
Fazit
32
Fazit
Heterogenität bei Web-Anwendungen
R b R il l W b F kRuby on Rails als Web-FrameworkRAD, XP, TDD, MVC als allgemeine Konzepte
Konvention über Konfiguration“ / DRY Prinzip als spezielle„Konvention über Konfiguration / DRY-Prinzip als spezielle Konzepte
Meta-Programmierung / ORM
Prototyp mit CRUD-Funktionalität
Online-Markplätze/Stadt-Portale als Beispiele für produktiven Einsatz
Mö li h V bMögliche VerbesserungenI18n (Thema der aktuellen Rails Versionen)
Ruby in einer VM? PerformanceRuby in einer VM? Performance
33
Fazit
Vielen Dank für Ihre Aufmerksamkeit !
Fragen?
34
Rails Verzeichnisstruktur
Verzeichnis Inhalt
app Alle wichtigen Bestandteile des MVC-Musters: Hilfs-, Kontroller- und Modell-pp g
Klassen, sowie sämtliche Views (*.html.erb)
config Konfigurationsdateien (z. B. database.yml)
db DB-Migrationsskripte, SQLite3 Datenbank-Datei (nach Anlegen)
doc Dokumente, die mit rdocs erstellt wurden
lib Zusätzliche Ruby-Bibliotheken/Erweiterungen
log Logfiles des WEBrick/Mongrel-Servers
public Öffentliches Wurzel-Verzeichnis des Web-Servers mit statischen Dateien (z. B.
Bilder, JavaScript, CSS, ...)
script Start-Skripte (z B Server-Start DB-Konsole Generatoren)script Start-Skripte (z. B. Server-Start, DB-Konsole, Generatoren)
test Test-Skripte, Unit-Tests, Funktionale Tests sowie Integrationstests
tmp Temporäre Dateien (z. B. Session-Dateien, Cache-Dateien)
35
tmp Temporäre Dateien (z. B. Session Dateien, Cache Dateien)
vendor Plug-Ins und andere Erweiterungen
Rails Tags
Tag Beschreibung
<% RUBY CODE %> Code wird ausgewertet, keine Ausgabe% _ % g g
<%- RUBY_CODE -%> Code wird ausgewertet, keine Ausgabe, unterdrückt <br>
<%= RUBY_CODE %> Code wird ausgewertet und als String ausgegeben_
<%=h RUBY_CODE %> Code wird ausgewertet, Resultat wird durch html_escape gefiltert
<%# RUBY_CODE %> Code wird nicht ausgewertet (Kommentar)
36
Web-Services in Rails
Version 1.0SOAP Web Ser icesSOAP Web-Services
Modul: Action Web Service
Ab Version 2.0Ab Version 2.0Übergang auf Representational State Transfer (REST)
RESTful Web-ServicesModul: Active Resource
Services vs. Resources
Modelle in Rails sind automatisch Ressourcen!
Manipulation durch HTTP-Requests POST, GET, PUT, DELETE
37
Templates
Templates befinden sich unter app\views\
D i T l t E iDrei Template-EnginesEmbedded Ruby (ERb) [*.html.erb]
HTML-Templates mit über Tags eingebettetem Ruby-CodeHTML Templates mit über Tags eingebettetem Ruby Code<%=h RUBY_CODE %>
XML [*.xml.erb]XML-Templates für Web-Services
Ruby JavaScript (RJS) [*.js.rjs]Übersetzt Ruby Code zur Laufzeit in JavaScriptÜbersetzt Ruby Code zur Laufzeit in JavaScript
Controller steuert Views (vgl. MVC-Muster)Render :action => „Template name“„ p _
Anstatt :action auch :template oder :file möglich
38
Layouts
Layouts unter app\views\layouts\Wieder Kon ention statt Konfig ration“Wieder „Konvention statt Konfiguration“Für gesamte Anwendung: application.html.erb
Für einzelne Controller: controller.html.erb
CSS Einbindung: <%= stylesheet_link_tag 'pizza' %>
Statischer Inhalt befindet sich unter public\\public\stylesheets
pizza.css
public\imagespublic\images
public\javascripts script.aculo.us (AJAX-Framework)
39
Prototype (AJAX-Framework)