Merhaba ben saldırı timlerinden Bunjo, bu konuda "Sinatra" gemi ile web programlama serisine devam ediyoruz.
Sinatra
Sinatra, Ruby programlama dilinde yazılmış hafif, basit ve esnek bir web uygulama çerçevesidir. Sinatra, minimal bir yapıya sahip olduğu için küçük ve orta ölçekli projelerde kullanımı kolaydır. Web uygulamalarını hızlı bir şekilde geliştirmek için tasarlanmıştır ve düşük öğrenme eğrisine sahiptir.
Sinatra Temel Özellikleri:
Hafif ve Basit: Sinatra, web uygulamaları oluşturmak için gereken minimum abstraksiyon ve karmaşıklığı sağlar. Bu sayede, kullanıcılar ihtiyaçlarına uygun özelleştirmeler yapabilirler.
DSL (Domain-Specific Language): Sinatra, birçok web uygulaması için yaygın olarak kullanılan işlemleri kolaylaştırmak için tasarlanmış özel bir dil (DSL) sunar. Bu, route'lar, middleware'ler ve diğer HTTP işlemleri için açık ve anlaşılır bir sözdizimi sağlar.
RESTful Yapı: Sinatra, RESTful (Representational State Transfer) tasarım prensiplerini destekler. Bu, HTTP protokolünü kullanarak kaynakları temsil etme ve yönetme konusunda kolaylık sağlar.
Yapılandırılabilirlik: Sinatra, kullanıcılara ihtiyaçlarına uygun olarak yapılandırma olanağı tanır.
Örneğin, kullanıcılar farklı view motorlarını (ERB, Haml gibi), session yönetimini veya port numarasını kolayca değiştirebilirler.
Entegrasyon: Sinatra, diğer Ruby kütüphaneleri ve framework'leri ile uyumlu çalışabilir. Bu, kullanıcıların ihtiyaçlarına uygun bir ekosistem oluşturmalarına olanak tanır.
Küçük Bir Topluluk ve Aktif Geliştirme: Sinatra, küçük ancak aktif bir topluluğa sahiptir. Bu, kullanıcıların sorularına hızlıca yanıt alabilmelerini ve geliştirme sürecini takip edebilmelerini sağlar.
Rails İle Sinatra Karşılaştırması
Özellik | Rails | Sinatra |
---|---|---|
Tip | Tam kapsamlı MVC çerçevesi | Hafif ve modüler mikro çerçeve |
Kullanım Alanı | Orta ve Büyük Ölçekli Uygulamalar | Küçük ve Orta Ölçekli Projeler |
Proje Yapısı | Kapsamlı ve Standart MVC yapısı | Yapılandırma Özgürlüğü, Standart bir yapı zorunlu değil |
Veritabanı Entegrasyonu | Güçlü ORM (Active Record) | Veritabanı entegrasyonu mümkün, ancak kendi seçimlerinize bağlı |
View Motoru | Genellikle ERB (Embedded Ruby) | Kullanıcı tercihine bağlı (ERB, Haml, vb.) |
RESTful Tasarım | Doğal RESTful konvansiyonlar | RESTful tasarımın uygulanması gerekiyor |
Routing | Raporlama için açık ve kapsamlı | Sadece temel route'lar, daha basit ve esnek |
Middleware | Geniş middleware yelpazesi (Rack) | Özelleştirilebilir middleware'lerle daha basit |
Otomatik Kod Üretimi | Scaffolding ve otomatik kod üretimi | Daha az otomatik kod üretimi, daha fazla özelleştirme |
Community & Ecosystem | Geniş bir topluluk ve ekosistem | Küçük ancak aktif bir topluluk, daha sınırlı ekosistem |
Öğrenme Eğrisi | Daha yüksek, daha karmaşık yapısı | Daha düşük, hızlı başlangıç ve öğrenme eğrisi |
Middleware
Middleware, yazılım uygulamalarında, özellikle web uygulamalarında, gelen veya giden veri akışını işleyen ve değiştiren yazılım bileşenleridir. Middleware, bir uygulama veya sistem içindeki farklı katmanlar arasında veri transferini sağlayarak, uygulama içindeki çeşitli işlemleri kolaylaştırır.
Sinatra, Rack adı verilen bir ara yazılım (middleware) katmanını temel olarak kullanır. Rack, Ruby tabanlı web uygulamalarının sunucularla iletişim kurmasını sağlayan bir arabirim (interface) sunar. Rack middleware'leri, HTTP isteklerini alır, işler ve ardından HTTP yanıtlarını oluşturur. Bu middleware'ler, web uygulamanızın çeşitli aşamalarında özelleştirmeler veya düzenlemeler eklemenize olanak tanır.
Logger Middleware: HTTP istek ve yanıtlarını günlük dosyasına kaydeden bir middleware.
Session Middleware: Kullanıcı oturum bilgilerini yöneten bir middleware.
Static File Middleware: Statik dosyaların (CSS, JavaScript, resimler, vb.) sunucu tarafından doğrudan servis edilmesini sağlayan bir middleware.
Cors Middleware: Cross-Origin Resource Sharing (CORS) politikalarını yöneten bir middleware.
ERB Uzantıları Hakkında
".erb" uzantısı, "Embedded Ruby" anlamına gelir ve Ruby kodunu HTML veya başka bir belge türü içine yerleştirmenizi sağlayan bir şablon dosyasını belirtir. Bu dosyalar, içinde Ruby ifadelerini ve kodunu içeren, dinamik içerik üretmek için kullanılan şablonları temsil eder.
Sinatra ve Ruby on Rails gibi web uygulama çerçeveleri, genellikle .erb uzantılı şablon dosyalarını kullanarak HTML sayfalarını oluşturur. Bu sayede, dinamik içeriklerle birlikte statik HTML yapısını birleştirebilir ve kullanıcılara değişen verileri sunabilirsiniz.
Örnek:
Ruby:
<!DOCTYPE html>
<html>
<head>
<title><%= @title %></title>
</head>
<body>
<h1>Merhaba, <%= @user_name %>!</h1>
</body>
</html>
Sinatra Temel Yapısı
Sinatra ile alakalı temel bilgileri öğrendiğimize göre şimdi de temel yapısından bahsedelim.
Sinatra geminin yüklenmesi:
CoffeeScript:
gem install sinatra
HTTP isteklerini işleyecek olan "rackup" gemi
CoffeeScript:
gem install rackup
Şimdi sitemiz için bir proje klasörü oluşturalım, içerisine de
dosyalarını ekleyelim.
- main.rb -
Sinatra gemini içeriye aktaralım.
Ruby:
require 'sinatra'
Default olarak "4567" portu kullanılır bunu değiştirmek için:
Ruby:
set :port, 8080
:views ve : public_folder sembolleri sayfalar için klasörü ve topluluğa açık olarak paylaşılan klasörü temsil eder
Ruby:
set :views, File.join(File.dirname(__FILE__), 'source')
set :public_folder, File.join(File.dirname(__FILE__), 'public')
"/" dizini yani ana sayfaya istek atıldığı zaman açılacak sayfayı gösterir. Biz burada index.erb dosyasına yönlendiriyoruz.
Ruby:
get '/' do
erb :index
end
- main.rb -
Ruby:
require 'sinatra'
set :port, 8080
set :views, File.join(File.dirname(__FILE__), 'source')
set :public_folder, File.join(File.dirname(__FILE__), 'public')
get '/' do
erb :index
end
- /source/index.erb -
HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Örnek Web Sitesi</title>
<link rel="stylesheet" href="/public/css/styles.css">
</head>
<body>
<header>
<h1>Örnek Web Sitesi</h1>
</header>
<nav>
<a href="#">Anasayfa</a>
<a href="#">Hakkımızda</a>
<a href="#">Hizmetlerimiz</a>
<a href="#">İletişim</a>
</nav>
<section>
<article>
<h2>Hoş Geldiniz</h2>
<p>Merhaba! Bu örnek web sitesi basit bir HTML ve CSS kullanılarak oluşturulmuştur.</p>
</article>
<article>
<h2>Hakkımızda</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla facilisi.</p>
</article>
<article>
<h2>Hizmetlerimiz</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla facilisi.</p>
</article>
<article>
<h2>İletişim</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla facilisi.</p>
</article>
</section>
<footer>
© 2024 Örnek Web Sitesi. Tüm hakları saklıdır.
</footer>
</body>
</html>
- /public/css/styles.css -
Ruby:
body {
font-family: 'Arial', sans-serif;
margin: 0;
padding: 0;
background-color: #f0f0f0;
}
header {
background-color: #333;
color: #fff;
text-align: center;
padding: 1em 0;
}
nav {
background-color: #444;
color: #fff;
text-align: center;
padding: 0.5em 0;
}
nav a {
text-decoration: none;
color: #fff;
margin: 0 1em;
}
section {
padding: 2em;
}
article {
margin-bottom: 1.5em;
}
footer {
background-color: #333;
color: #fff;
text-align: center;
padding: 1em 0;
position: fixed;
bottom: 0;
width: 100%;
}
Site:
http://localhost:8080/ adresine gittim.
Terminale yansıyan trafik:
Not: Eğer var olmayan bir sayfaya giderseniz Sinatra sizi böyle bir sayfayla karşılar:
HTML ve CSS kodları internetten örnek olarak alınmıştır.
Yeni konularda session kontrollerini ve middleware ile çalışma konularını anlatacağım
Bu konu bu kadardı okuyan herkese teşekkür ederim.