L'approccio tradizionale alla programmazione Web è sicuramente costituito dai CGI. I CGI sono gestiti dalla libreria cgi
distribuita con Ruby che fornisce tutti gli strumenti per scrivere script CGI a partire dai metodi per la generazione di HTML fino a d arrivare agli strumenti per la gestione delle sessioni e dei cookie.
Vediamo innanzitutto come si crea del codice HTML dinamico utilizzando un valore passato attraverso un parametro:
require 'cgi' cgi = CGI.new("html4") cgi.out do cgi.html do cgi.body do cgi.h2 {"Esempio di CGI"} + cgi.i {"scritto in "} + cgi.a("http://www.ruby-lang.org") { cgi['linguaggio']} end end end
Salvandolo come esempio_cgi.rb
ed eseguendolo si ottiene banalmente:
$ ruby esempio_cgi.rb (offline mode: enter name=value pairs on standard input) linguaggio=Ruby Content-Type: text/html Content-Length: 200 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <HTML> <BODY> <H2>Esempio di CGI</H2> <I>scritto in </I><A HREF="http://www.ruby-lang.org">Ruby</A> </BODY> </HTML>
Dove operando in modalità offline abbiamo prima passato il parametro linguaggio=Ruby
e poi premuto i tasti Ctrl+D
(o Ctrl+Z
in Windows) per eseguire lo script. Il valore passato a "new
" corrisponde al livello di HTML desiderato, sono possibili i seguenti valori: html3
, html4
, html4Tr
e html4Fr
.
Nel nostro esempio abbiamo utilizzato i metodi html
, body
, h1
, i
, a
che corrispondono agli omonimi tag HTML. Ovviamente esistono anche i tag più complessi come form
, table
e tutti gli altri; per un elenco completo si faccia riferimento alla documentazione ufficiale (ri CGI
oppure online)all'indirizzo.
In pratica questi metodi si occupano di aprire il tag, inserire il risultato dell'esecuzione del blocco di codice (che deve restituire una stringa) e chiudere il tag all'uscita dal blocco.
Per utilizzare i parametri passati, generalmente, all'interno degli URL sono possibili due strade: una è quella vista nell'esempio e consiste nell'accedere al parametro attraverso il nome
cgi['linguaggio']
l'altro metodo consiste nel trasformare la lista di parametri in hash e poi fare riferimento a tali valori, ad esempio se abbiamo a che fare con un URL che termina nel seguente modo
esempio.cgi?linguaggio=Ruby&implementazione=JRuby
possiamo creare un hash dei parametri
hash_param = cgi.params
dove hash_param
sarà
{"linguaggio=>["Ruby"], "implementazione=>["JRuby"]}
Come si può notare ad ogni chiave è associato un array di valori. Utilizzando questo metodo è possibile eseguire sui parametri tutte le operazione disponibili per gli hash.
I CGI hanno notoriamente delle pessime prestazioni, una soluzione a tale problema è rappresentato da FastCGI. Ne esiste un'implementazione in Ruby installabile via gem.