0Pricing
Ruby Academy · Ders

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({}).inspect

Rack 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öntemi
  • PATH_INFO, istenen yol
  • QUERY_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
end

Ara 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.inspect

Sinatra'da Ara Yazılım Kullanma

Bir Sinatra uygulamasına use ile ara yazılım ekleyin.

  • use Rack::Logger
  • use çağrılarının sırası yığın sırasını belirler
require 'sinatra'

use Rack::Logger

get '/' do
  'Logged request'
end

config.ru ve rackup

Bir config.ru dosyası, bir Rack uygulamasını rackup veya Puma ile başlatır.

  • run son uygulamayı belirler
  • use ondan önce ara yazılım ekler
# config.ru
require './app'
use Rack::CommonLogger
run Sinatra::Application

Yaygın Yerleşik Ara Yazılımlar

Rack, kullanışlı ara yazılımlarla birlikte gelir.

  • Rack::CommonLogger istek günlükleri
  • Rack::Deflater gzip sıkıştırması
  • Rack::Static dosyalara hizmet verir
  • Rack::Session::Cookie oturumlar
# 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 use veya config.ru kullanı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

  1. Sinatra Temelleri
  2. Yollar ve Parametreler
  3. JSON API'leri
  4. Ara Katman Yazılımı ve Rack
← Ruby Academy Sayfasına Dön