Ruby Academy · Pelajaran

Middleware dan Rack

Tumpukan Rack.

Pelajaran 4 dari 413 langkah

Middleware dan Rack adalah pelajaran Ruby Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Ruby Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Ruby Academy mencakup 4 pelajaran total.

Apa Itu Rack?

Rack adalah antarmuka minimal antara server web Ruby dan kerangka kerja. Sinatra, Rails, serta yang lainnya semuanya berjalan di atas Rack.

  • Menstandarkan alur permintaan dan respons
  • Memungkinkan perangkat tengah yang dapat digunakan kembali
  • Aplikasi Rack adalah apa pun yang merespons call(env)
app = lambda do |env|
  [200, { 'Content-Type' => 'text/plain' }, ['Hello Rack']]
end

puts app.call({}).inspect

Kontrak Rack

call milik aplikasi Rack harus mengembalikan larik berisi tiga elemen:

  • Bilangan bulat status (misalnya 200)
  • Hash header
  • Isi yang merespons each (biasanya larik string)
status, headers, body = 200, { 'Content-Type' => 'text/html' }, ['<h1>Hi</h1>']
puts status
puts headers.inspect
body.each { |chunk| puts chunk }

Hash env

Argumen env adalah hash yang menjelaskan permintaan.

  • REQUEST_METHOD seperti GET atau POST
  • PATH_INFO adalah jalur yang diminta
  • QUERY_STRING adalah parameter kueri mentah
env = { 'REQUEST_METHOD' => 'GET', 'PATH_INFO' => '/home' }
puts "#{env['REQUEST_METHOD']} #{env['PATH_INFO']}"

Apa Itu Perangkat Tengah?

Perangkat tengah membungkus aplikasi untuk menambahkan perilaku sebelum atau setelah permintaan mencapainya.

  • Pencatatan, autentikasi, kompresi
  • Setiap perangkat tengah juga merespons call(env)
  • Perangkat tersebut memanggil aplikasi berikutnya dalam rantai
class Logger
  def initialize(app)
    @app = app
  end

  def call(env)
    puts "Request: #{env['PATH_INFO']}"
    @app.call(env)
  end
end

Membangun Kelas Perangkat Tengah

Perangkat tengah menyimpan aplikasi yang dibungkus dan meneruskan permintaan kepadanya melalui call.

  • Konstruktor menerima aplikasi bagian dalam
  • call dapat mengubah env, lalu meneruskannya
  • Perangkat tersebut juga dapat mengubah respons saat kembali
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'

Tumpukan Perangkat Tengah

Perangkat tengah membentuk sebuah tumpukan. Permintaan mengalir turun menuju aplikasi, sedangkan respons mengalir kembali ke atas.

  • Perangkat tengah terluar berjalan lebih dahulu saat masuk
  • Perangkat tengah terluar berjalan paling akhir saat keluar
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

Menggunakan Perangkat Tengah di Sinatra

Tambahkan perangkat tengah ke aplikasi Sinatra dengan use.

  • use Rack::Logger
  • Urutan pemanggilan use menentukan urutan tumpukan
require 'sinatra'

use Rack::Logger

get '/' do
  'Logged request'
end

config.ru dan rackup

File config.ru menjalankan aplikasi Rack dengan rackup atau Puma.

  • run menetapkan aplikasi terakhir
  • use menambahkan perangkat tengah sebelumnya
# config.ru
require './app'
use Rack::CommonLogger
run Sinatra::Application

Perangkat Tengah Bawaan yang Umum

Rack disertai perangkat tengah yang berguna.

  • Log permintaan Rack::CommonLogger
  • Kompresi gzip Rack::Deflater
  • Rack::Static untuk menyajikan file
  • Sesi Rack::Session::Cookie
# In config.ru
# use Rack::Deflater
# use Rack::Static, urls: ['/assets'], root: 'public'
puts 'See comments for usage'

Memodifikasi Respons

Perangkat tengah sering menambahkan header respons setelah aplikasi bagian dalam berjalan.

  • Simpan tiga bagian respons
  • Ubah header, lalu kembalikan respons tersebut
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

Menghentikan Permintaan Lebih Awal

Perangkat tengah dapat menghentikan permintaan tanpa memanggil aplikasi bagian dalam.

  • Berguna untuk gerbang autentikasi atau pembatas laju
  • Kembalikan tiga bagian respons secara langsung
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]

Pemeriksaan Singkat

Verifikasikan pemahaman Anda tentang Rack.

Ringkasan

Anda telah mempelajari tumpukan Rack:

  • Rack adalah antarmuka umum di bawah kerangka kerja web Ruby
  • Aplikasi Rack merespons call(env) dan mengembalikan [status, headers, body]
  • Perangkat tengah membungkus aplikasi untuk menambahkan perilaku lintas komponen
  • Gunakan use di Sinatra atau config.ru untuk menyusun tumpukan
  • Perangkat tengah dapat memodifikasi respons atau menghentikan permintaan lebih awal
Gratis untuk memulai

Belajar Ruby dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
29
Pelajaran
109

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Middleware dan Rack” gratis?

Ya — teks lengkap “Middleware dan Rack” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Ruby Academy, upgrade ke CoddyKit PRO. Kursus Ruby Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Middleware dan Rack”?

Tumpukan Rack. Kamu berlatih Ruby Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Ruby Academy?

Tidak diperlukan pengalaman sebelumnya. Ruby Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Middleware dan Rack” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Ruby Academy ini?

Ya. Setiap pelajaran Ruby Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Dasar-Dasar Sinatra
  2. Rute dan Parameter
  3. API JSON
  4. Middleware dan Rack
← Kembali ke Ruby Academy