Ara Katman Yazılımı ve Rack
Rack yığını
Ara Katman Yazılımı ve Rack, CoddyKit'te ücretsiz bir Ruby Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Ruby Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Ruby Academy kursu toplamda 4 dersten oluşur.
Rack Nedir
Rack, Ruby web sunucuları ile çatılar arasındaki en küçük arayüzdür. Sinatra, Rails ve diğerleri Rack üzerinde çalışır.
- İsteklerin ve yanıtların nasıl akacağını standartlaştırır
- Yeniden kullanılabilir ara yazılımı etkinleştirir
- Rack uygulaması,
call(env)'e yanıt veren her şeydir
app = lambda do |env|
[200, { 'Content-Type' => 'text/plain' }, ['Hello Rack']]
end
puts app.call({}).inspectRack Sözleşmesi
Bir Rack uygulamasının call yöntemi üç öğeli bir dizi döndürmelidir:
- Durum tamsayısı (ör. 200)
- Üstbilgiler karması
each'e yanıt veren Gövde (genellikle bir dize dizisi)
status, headers, body = 200, { 'Content-Type' => 'text/html' }, ['<h1>Hi</h1>']
puts status
puts headers.inspect
body.each { |chunk| puts chunk }env Karması
env bağımsız değişkeni isteği açıklayan bir karmadır.
REQUEST_METHOD, GET veya POST gibi istek yöntemiPATH_INFO, istenen yolQUERY_STRING, ham sorgu parametreleri
env = { 'REQUEST_METHOD' => 'GET', 'PATH_INFO' => '/home' }
puts "#{env['REQUEST_METHOD']} #{env['PATH_INFO']}"Ara Yazılım Nedir
Ara yazılım, istek uygulamaya ulaşmadan önce veya ulaştıktan sonra davranış eklemek için uygulamayı sarar.
- Günlükleme, kimlik doğrulama, sıkıştırma
- Her ara yazılım da
call(env)'e yanıt verir - Zincirdeki sonraki uygulamayı çağırır
class Logger
def initialize(app)
@app = app
end
def call(env)
puts "Request: #{env['PATH_INFO']}"
@app.call(env)
end
endAra Yazılım Sınıfı Oluşturma
Ara yazılım, sardığı uygulamayı saklar ve call içinde ona yönlendirir.
- Kurucu, iç uygulamayı alır
call, env'yi değiştirebilir ve ardından isteği iletebilir- Geri dönüşte yanıtı da değiştirebilir
class UpcaseBody
def initialize(app)
@app = app
end
def call(env)
status, headers, body = @app.call(env)
new_body = body.map(&:upcase)
[status, headers, new_body]
end
end
puts 'Middleware defined'Ara Yazılım Yığını
Ara yazılım bir yığın oluşturur. İstek uygulamaya doğru aşağı akar, yanıt yukarı doğru geri döner.
- Dıştaki ara yazılım girişte ilk çalışır
- Dıştaki ara yazılım çıkışta son çalışır
inner = lambda { |env| [200, {}, ['core']] }
class Wrap
def initialize(app); @app = app; end
def call(env)
s, h, b = @app.call(env)
[s, h, b.map { |x| "[#{x}]" }]
end
end
puts Wrap.new(inner).call({}).last.inspectSinatra'da Ara Yazılım Kullanma
Bir Sinatra uygulamasına use ile ara yazılım ekleyin.
use Rack::Loggeruseçağrılarının sırası yığın sırasını belirler
require 'sinatra'
use Rack::Logger
get '/' do
'Logged request'
endconfig.ru ve rackup
Bir config.ru dosyası, bir Rack uygulamasını rackup veya Puma ile başlatır.
runson uygulamayı belirleruseondan önce ara yazılım ekler
# config.ru
require './app'
use Rack::CommonLogger
run Sinatra::ApplicationYaygın Yerleşik Ara Yazılımlar
Rack, kullanışlı ara yazılımlarla birlikte gelir.
Rack::CommonLoggeristek günlükleriRack::Deflatergzip sıkıştırmasıRack::Staticdosyalara hizmet verirRack::Session::Cookieoturumlar
# In config.ru
# use Rack::Deflater
# use Rack::Static, urls: ['/assets'], root: 'public'
puts 'See comments for usage'Yanıtı Değiştirme
Ara yazılım, iç uygulama çalıştıktan sonra genellikle yanıt üstbilgileri ekler.
- Yanıt üçlüsünü alın
- Üstbilgileri değiştirip ardından üçlüyü döndürün
class AddHeader
def initialize(app); @app = app; end
def call(env)
status, headers, body = @app.call(env)
headers['X-Powered-By'] = 'Ruby'
[status, headers, body]
end
end
app = AddHeader.new(lambda { |e| [200, {}, ['ok']] })
puts app.call({})[1].inspectİstek Akışını Kısa Devreye Alma
Ara yazılım, iç uygulamayı çağırmadan bir isteği durdurabilir.
- Kimlik doğrulama denetimleri veya hız sınırları için kullanışlıdır
- Yanıt üçlüsünü doğrudan döndürün
class Auth
def initialize(app); @app = app; end
def call(env)
return [401, {}, ['Unauthorized']] unless env['token']
@app.call(env)
end
end
app = Auth.new(lambda { |e| [200, {}, ['ok']] })
puts app.call({})[0]Hızlı Kontrol
Rack anlayışınızı doğrulayın.
Özet
Rack yığınını öğrendiniz:
- Rack, Ruby web çatıları altında bulunan ortak arayüzdür
- Rack uygulaması
call(env)'e yanıt verir ve[status, headers, body]döndürür - Ara yazılım, ortak davranışlar eklemek için uygulamayı sarar
- Yığını birleştirmek için Sinatra'da
useveyaconfig.rukullanın - Ara yazılım yanıtları değiştirebilir veya istekleri kısa devreye alabilir
Sıkça Sorulan Sorular
“Ara Katman Yazılımı ve Rack” dersi ücretsiz mi?
Evet — “Ara Katman Yazılımı ve Rack” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Ruby Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Ruby Academy kursu toplamda 4 dersten oluşur.
“Ara Katman Yazılımı ve Rack” dersinde ne öğreneceğim?
Rack yığını Ruby Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Ruby Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Ruby Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Ara Katman Yazılımı ve Rack” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Ruby Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Ruby Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Sinatra Temelleri
- Yollar ve Parametreler
- JSON API'leri
- Ara Katman Yazılımı ve Rack