Middleware ja Rack
Rack-pino.
Middleware ja Rack on ilmainen Ruby Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Ruby Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Ruby Academy-kurssilla on yhteensä 4 oppituntia.
Mikä Rack on
Rack on Ruby-verkkopalvelinten ja sovelluskehysten välinen minimaalinen rajapinta. Sinatra, Rails ja muut sovelluskehykset toimivat Rackin päällä.
- Yhtenäistää pyyntöjen ja vastausten kulun
- Mahdollistaa uudelleenkäytettävän väliohjelmiston
- Rack-sovellus on mikä tahansa olio, joka vastaa kutsuun
call(env)
app = lambda do |env|
[200, { 'Content-Type' => 'text/plain' }, ['Hello Rack']]
end
puts app.call({}).inspectRack-sopimus
Rack-sovelluksen call-menetelmän on palautettava kolmen alkion taulukko:
- Status-kokonaisluku (esimerkiksi 200)
- Headers-hash
- Body, joka vastaa kutsuun
each(yleensä merkkijonojen taulukko)
status, headers, body = 200, { 'Content-Type' => 'text/html' }, ['<h1>Hi</h1>']
puts status
puts headers.inspect
body.each { |chunk| puts chunk }env-hash
env-argumentti on pyynnön kuvaava hash.
REQUEST_METHOD, kuten GET tai POSTPATH_INFO, pyydetty polkuQUERY_STRING, käsittelemättömät kyselyparametrit
env = { 'REQUEST_METHOD' => 'GET', 'PATH_INFO' => '/home' }
puts "#{env['REQUEST_METHOD']} #{env['PATH_INFO']}"Mikä väliohjelmisto on
Väliohjelmisto ympäröi sovelluksen ja lisää toiminnallisuutta ennen pyynnön saapumista sovellukseen tai sen jälkeen.
- Lokitus, autentikointi ja pakkaus
- Jokainen väliohjelmisto vastaa myös kutsuun
call(env) - Se kutsuu ketjun seuraavaa sovellusta
class Logger
def initialize(app)
@app = app
end
def call(env)
puts "Request: #{env['PATH_INFO']}"
@app.call(env)
end
endVäliohjelmistoluokan rakentaminen
Väliohjelmisto tallentaa ympäröimänsä sovelluksen ja välittää kutsun sille call-menetelmässä.
- Rakentaja vastaanottaa sisemmän sovelluksen
callvoi muokata env-arvoa ja välittää kutsun eteenpäin- Se voi myös muuttaa vastausta paluumatkalla
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'Väliohjelmistopino
Väliohjelmisto muodostaa pinon. Pyyntö kulkee pinoa pitkin sovellukseen ja vastaus takaisin ylöspäin.
- Ulompi väliohjelmisto suoritetaan ensimmäisenä menomatkalla
- Ulompi väliohjelmisto suoritetaan viimeisenä paluumatkalla
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.inspectVäliohjelmiston käyttäminen Sinatrassa
Lisätkää väliohjelmisto Sinatra-sovellukseen komennolla use.
use Rack::Loggeruse-kutsujen järjestys määrittää pinon järjestyksen
require 'sinatra'
use Rack::Logger
get '/' do
'Logged request'
endconfig.ru ja rackup
config.ru-tiedosto käynnistää Rack-sovelluksen komennolla rackup tai Pumalla.
runasettaa lopullisen sovelluksenuselisää sitä edeltävän väliohjelmiston
# config.ru
require './app'
use Rack::CommonLogger
run Sinatra::ApplicationYleisiä sisäänrakennettuja väliohjelmistoja
Rack toimitetaan hyödyllisten väliohjelmistojen kanssa.
Rack::CommonLoggerpyyntölokitRack::Deflatergzip-pakkausRack::Statictiedostojen tarjoaminenRack::Session::Cookieistunnot
# In config.ru
# use Rack::Deflater
# use Rack::Static, urls: ['/assets'], root: 'public'
puts 'See comments for usage'Vastauksen muuttaminen
Väliohjelmisto lisää usein vastausotsakkeita sisemmän sovelluksen suorittamisen jälkeen.
- Ottakaa vastaan kolmiosainen vastaus
- Muuttakaa otsakkeita ja palauttakaa vastaus
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].inspectPyyntöjen oikosulkeminen
Väliohjelmisto voi pysäyttää pyynnön kutsumatta sisempää sovellusta.
- Hyödyllinen autentikoinnin tarkistuksissa tai nopeusrajoituksissa
- Palauttakaa vastauskolmikko suoraan
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]Pikatarkistus
Varmistakaa Rackia koskeva ymmärryksenne.
Kertaus
Opitte Rack-pinon toimintaperiaatteen:
- Rack on Ruby-verkkosovelluskehysten alla oleva yhteinen rajapinta
- Rack-sovellus vastaa kutsuun
call(env)ja palauttaa arvon[status, headers, body] - Väliohjelmisto ympäröi sovelluksen ja lisää poikkileikkaavaa toiminnallisuutta
- Kootkaa pino käyttämällä
use-komentoa Sinatrassa taiconfig.ru-tiedostoa - Väliohjelmisto voi muuttaa vastauksia tai oikaista pyynnöt
Opi Ruby tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 29
- Oppitunnit
- 109
Usein kysytyt kysymykset
Onko oppitunti ”Middleware ja Rack” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Ruby Academy-oppimispolun 3 oppituntia, myös oppitunnin “Middleware ja Rack”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Ruby Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Middleware ja Rack”?
Rack-pino. Harjoittelet Ruby Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Ruby Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Ruby Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”Middleware ja Rack”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Ruby Academy-oppitunnilla?
Kyllä. Jokainen Ruby Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Sinatran perusteet
- Reitit ja parametrit
- JSON-rajapinnat
- Middleware ja Rack