web frameworks
TRANSCRIPT
Web FrameworksA brief overview
Gianfranco Reppucci@giefferre
So, what?
• Cos’è un framework web?
• Quale framework utilizzare?
• Qualche esempio pratico
• Alcune considerazioni
OK, ma perché parlare di web framework?
Non tutto quello che viene considerato “web development” si riduce a “creare siti”
• Web Application
• Social Network Apps & Mashup
• Web services
• ...
Framework = ?
• I primi siti web erano una collezione di pagine HTML statiche
• Ogni aggiornamento richiedeva un cambiamento manuale
<html><head>
<title>My wonderful website</title></head><body>
<h1>Hello World!</h1><p>This is my ancient website. Enjoy your time here.</p><a href=”page2.html”>Click here to open page 2</a>
</body></html>
Framework = ?
• Per creare pagine web dinamiche sono stati introdotti i linguaggi di programmazione “server-side”
<%@ language="vbscript" %><html>...<body> <h1>Un esempio di codice dinamico</h1> <% For i = 1 to 10 Step 1 response.write("Questo messaggio sarà stampato 10 volte") Next %></body></html>
Framework = ?
Col crescere delle esigenze e con l’evolversi dei design patterns, sono aumentate le possibilità e le complicazioni
• Database
• Manipolazione immagini
• Elaborazione files
• ...
Framework = ?
• Un framework è un software che permette di supportare la fase di sviluppo di siti, web application o web services.
• Lo scopo di un framework è ridurre l’overhead di un programmatore nello scrivere parti di codice comuni (gestione database, templating, sessioni, ecc)
Ovvero
Un framework è una collezione di “strati” di software, ognuno dei
quali esegue compiti diversi
Caratteristiche
• Database configuration, access, mapping (Object-Relational Mapping)
• URL mapping
• Templating
Caratteristiche
• Caching
• Security
• AJAX
• Helpers
Framework != CMS
• È un errore molto frequente quello di confondere il concetto di Content Management System con quello di Framework.
• Solitamente (ma non sempre!) un CMS è qualcosa di più specifico e complesso di un framework
Framework != CMS
Il CMS è un’applicazione “pronta all’uso” che solitamente serve per creare facilmente siti e webapp:
• È un contenitore(di pagine, articoli, contenuti multimediali, ecc.)
• Il backend è più o meno standard
• Ha un proprio sistema di templating
• Di solito customizzabili solo tramite l’uso di plugin specifici
Quale framework utilizzare?
Dipende da:
• Linguaggio di sviluppo che si vuole adoperare
• Necessità strutturali del progetto
PHP
Python
Asp.NET
Ruby
Java
JavascriptErlang
Smalltalk
Clojure
C
Per ognuno dei linguaggi esistenti esistono diversi framework
Python
• Django
• Flask
• TurboGear
• Zope 2
PHP
• Zend
• CodeIgniter
• Symphony
• Slim
• CakePHP
Ruby
• Ruby on Rails
• Sinatra
• Ramaze
Javascript
• node.js
• meteor JS
• SproutCore
Punti in comune
• Paradigma Model-View-Controller
• Strutturazione “Three-tier”(client, application, database)
• A volte, sono molto simili
Infatti...
Un esempio pratico
• PHP: Slim
• Python: Flask
• Javascript: node.js + Express JS
Installazione: Slim
user@host:projectA$ curl -s https://getcomposer.org/installer | php
Create un file composer.json{ "require": { "slim/slim": "2.*" }}
Da shell:
user@host:projectA$ php composer.phar install
Da shell:
Installazione: ExpressJS
Create un file package.json{ "name": "node-express-test", "description": "NodeJS + ExpressJS test", "version": "0.0.1", "private": true, "dependencies": { "express": "3.x" }}
Scaricate ed installate node.js
user@host:projectB$ npm install
Da shell:
Installazione: Flask
user@host:projectC$ pip install flask
Da shell:
EPIC WIN
Hello world: Slim
<?phprequire 'vendor/autoload.php';
$app = new \Slim\Slim();$app->get('/', function () { echo "Hello World!";});
$app->run();?>
index.php
Hello world: ExpressJS
var express = require('express');var app = express();
app.get('/', function(req, res){ res.send('Hello World!');});
app.listen(8002);
index.js
Hello world: Flask
from flask import Flaskapp = Flask(__name__)
@app.route('/')def hello_world(): return 'Hello World!'
if __name__ == '__main__': app.run(port=8003)
index.py
Development server: PHP
user@host:projectA$ php -S localhost:8001
Da shell (PHP >= 5.4):
Altrimenti bisogna installare un classico stack *AMP
Development server: node.js
user@host:projectB$ node index.js
Da shell:
Development server: Python
user@host:projectC$ python index.py
Da shell:
Alcune considerazioni
I costrutti dei vari framework iniziano a somigliarsi tantissimo
Alcune considerazioni
Va bene specializzarsi con una tecnologia, ma è necessario “cambiare aria” ogni tanto
Alcune considerazioni
Scegliete il framework rispetto al progetto che dovete sviluppare
Riferimenti
• http://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks
• http://en.wikipedia.org/wiki/Web_application_framework
• http://www.slimframework.com/
• http://nodejs.org/
• http://expressjs.com/
• http://www.pip-installer.org/en/latest/installing.html
• http://flask.pocoo.org/