Sinatra microframework és a REST modell

A Ruby alapú webfejlesztésről mindenkinek a RoR, azaz a Ruby on Rails jut eszébe. Ezen méltán népszerű keretrendszer azonban csak egy a sok közül.

A Sinatra keretrendszer segítségével REST modellre épülő egyszerű, letisztult weblapokat programozhatunk Ruby nyelven, melyek közzétehetőek a korábban már ismertetett Phusion Passenger segítségével.

A REST

Ahhoz, hogy megértsük a Sinatra működését, tisztában kell lennünk a REST modell webes vonatkozásaival. A HTTP protokoll négy adatátviteli metódust ismer: GET, POST, PUT, DELETE. (ezek közül a fejlesztők nagyrészt csak a GET-et és a POST-ot használják) a GET adatok lekérésére, a POST adatok küldésére, a PUT adatok frissítésére a DELETE pedig adatok törlésére szolgál. Ezeket a metódus típusokat igéknek hívjuk, ők mondják meg hogy az adott adattal mit csináljunk. Egy összehasonlítással élve:

REST MYSQL
GET SELECT
POST INSTERT
PUT UPDATE
DELETE DELETE

Bővebb információ a REST-ről a Wiki oldalán érhető el: http://hu.wikipedia.org/wiki/REST

A Sinatra telepítése

A Sinatra a REST segítségével fantasztikusan átlátható, elegáns módot ad a programozásra. A ezen leírás feltételezi Ruby és RubyGems meglétét a számítógépen. Telepítsük a Sinatra-t:

gem install sinatra

Hozzunk létre egy könyvtárat a projectnek, valamint egy app.rb fájlt, majd hívjuk meg benne a sinatra gem-et:

require 'sinatra'

Kezdődhet a programozás! Hozzunk létre egy kezdőlapot:

get '/' do
"Hello World!"
end

Mentsük a fájlunkat és futtassuk:

ruby app.rb

A böngészőben a http://localhost:3000 -es címen érhető el a WebRick kiszolgáló által működtetett Sinatra alapú oldal. A GET szekcióban lévő szöveg megjelenik a böngészőben.

Renderelés

Természetesen lehetőség van renderelésre, ERB vagy HAML "nézet fájlok" használatával. Ebben az esetben az oldal tartalmát nem az app.rb -be írjuk meg, hanem egy tetszőleges fájlban a views mappán belül.

Hívjuk meg a sinatra után az ERB (Embed Ruby) modult is a fájl elején:

require 'erb'

Majd hozzunk létre egy kezdolap.erb fájlt. Az app.rb-ben a következőként szerepeljen a kezdőlap definicíója:

get '/' do
erb :kezdolap
end

A Kezdőlap modulba írt HTML elemek jelennek meg a böngészőben. Az ERB segítségével vegyesen használhatunk HTML és Ruby kódokat a fájlban. A Ruby kódok ilyen speciális <% karakterek közé illesztendőek %>, hasonlóan mint a . Egy későbbi írásomban a HAML absztrakciós nyelvvel fogok foglalkozni, ami szerintem sokkal jobb az ERB-nél, ám mivel az ERB egyszerűbb, most ezzel a példával élek.

 

Layout kezelés

A views/layouts/application.erb fájlt létrehozva, a renderelt oldalak részére keretet adhatunk. (fejléc, oldalsáv, lábléc...stb)

 


  ..
  
    <%= yield %>
  

A yield helyére kerül a tartalom, melyet az aktuálisan megnyitott nézet fájlból renderelünk.

 

A fájl útvonalát a :layout kapcsolóval állíthatjuk be a fájl elején, páldául: 

:layout 'system/layout'

Ha vannak oldal oldalaink, ahol nem szeretnénk a layout-ot használni (például bejelentkező oldal), a következőképp járhatunk el a rendereléssel:

erb :bejelentkezes, :layout => false

Paraméterek

Paramétereket nyerhetünk ki az útvonalból, például egy felhasználói profil azonosítóját:

get 'profil/:id' do
# A paramétert a params[:id] változó tárolja!
end

 

Amiért REST alapú...

Egy űrlap feldolgozása esetén POST metódust használhatunk:

post '/bekuld' do
#Beküldött adatok feldolgozása
erb :bekuld
end

Ebben az esetben a HTML űrlap fejléce a következő:

Egyszerű az egész, mint a pofon! Akár ugyanazt az útvonalat is használhatjuk különböző metódusokkal:

get '/profil/:id' do
# Profil megtekintése
end

post '/profil/:id' do
# Profil beküldése
end
put '/profil/:id' do
# Profil frissítése
post
delete '/profil/:id' do
# Profil törlése
end

A böngésző címsorában ugyanazt látjuk mind a négy esetben (például: profil/123), ám a műveleti ige más-más. Igazán elegáns!

Segédfüggvények

Lehetőség van az az egész oldalon elérhető segédfüggvények létrehozására:

helpers do
# ide írhatjuk a függvény definiciókat
end

Ami kimaradt

Nem esett szó az adatbázis kezelési lehetőségekről. Erre a feladatra a Sinatra fejlesztőik a DataMapper adatbázis absztrakciós réteget ajánlja, ám ez egy olyan fantasztikus eszköz, ami egy külön cikket érdemel, ahogy a HAML és SASS is, amik HTML és CSS generálásra szolgálnak.

Kiváló áttekintő a rendszerről:

http://sinatra-book.gittr.com/