Middleware dan Rack
Tumpukan Rack.
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({}).inspectKontrak 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_METHODseperti GET atau POSTPATH_INFOadalah jalur yang dimintaQUERY_STRINGadalah 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
endMembangun Kelas Perangkat Tengah
Perangkat tengah menyimpan aplikasi yang dibungkus dan meneruskan permintaan kepadanya melalui call.
- Konstruktor menerima aplikasi bagian dalam
calldapat 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.inspectMenggunakan Perangkat Tengah di Sinatra
Tambahkan perangkat tengah ke aplikasi Sinatra dengan use.
use Rack::Logger- Urutan pemanggilan
usemenentukan urutan tumpukan
require 'sinatra'
use Rack::Logger
get '/' do
'Logged request'
endconfig.ru dan rackup
File config.ru menjalankan aplikasi Rack dengan rackup atau Puma.
runmenetapkan aplikasi terakhirusemenambahkan perangkat tengah sebelumnya
# config.ru
require './app'
use Rack::CommonLogger
run Sinatra::ApplicationPerangkat Tengah Bawaan yang Umum
Rack disertai perangkat tengah yang berguna.
- Log permintaan
Rack::CommonLogger - Kompresi gzip
Rack::Deflater Rack::Staticuntuk 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].inspectMenghentikan 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
usedi Sinatra atauconfig.ruuntuk menyusun tumpukan - Perangkat tengah dapat memodifikasi respons atau menghentikan permintaan lebih awal
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
- Dasar-Dasar Sinatra
- Rute dan Parameter
- API JSON
- Middleware dan Rack