GraphQL Ruby. Kuidas on tulemuslikkus?
GraphQLil, nagu igal tehnoloogial, on omad probleemid, millest mõned tulenevad otseselt arhitektuurist ja mõned on identsed sellega, mida me näeme mis tahes muu rakenduse puhul. Siiski on lahendused...

Õppige meie eksperdilt rohkem hammaste rollist Ruby ökosüsteemis ja parandage oma rubiinimängu oskust.
Töötades koos Ruby veebiraamistikud on tavaline, et asju peetakse enesestmõistetavaks. Me teame, et raamistik tegeleb HTTP-päringutega ja täidab meie eest vahendusloogikat. Kui me muutume uudishimulikumaks, hakkame mõtlema, mis on kulisside taga, seal hakkame kuulma Rackist.
The projekt on kirjeldatud kui "modulaarne Ruby veebiserveri liides". Rack on liides, mis võimaldab meil luua veebirakendusi, mis ühendavad veebiserverite, veebiraamistike ja vahendusprogrammide API-d.
Nagu ülaltoodud pildil kirjeldatud, toimib Rack vahendajana meie veebirakenduse ja rakendusserveri vahel, ta mähib HTTP päringud lihtsaimasse
viisil võimalik.
Rack rakendus on Ruby objekt (mitte klass), mis reageerib helista
. See võtab täpselt ühe argumendi, milleks on keskkond ja tagastab külmutamata Array of
täpselt kolm väärtust:
ja keha.
Üksikasjalikud andmed Rack Application'i kohta leiate järgmiselt. siin.
nõuda 'rack'
klass RackApp
def call(env)
status = 200
headers = { 'Content-Type' => 'text/html' }
body = ['<h1>Minu Rack App<h1>']
[staatus, päised, keha]
end
end
Käsitlejad ühendavad veebiserverid Rackiga. Rack sisaldab käsitsejaid Thin, WEBrick, FastCGI, CGI, SCGI ja LiteSpeed jaoks. Iga Racki toetav rakendusserver peaks
anda käsitseja ühenduse loomiseks (Pumal on oma käsitseja).Käsitsejad aktiveeritakse tavaliselt kutsumisega MyHandler.run(myapp)
. Teise valikulise hashi võib edastada serverispetsiifilise konfiguratsiooni lisamiseks.
Kasutades õhukese rakendusserveri
Rack::Handler::Thin.run(app)
Konfiguratsiooni lisamise vaikimisi fail on config.ru
ja seda saab täita, kasutades rackup
käsk teie konsoolis.
Rack võimaldab meil luua vahendusrakendusi (rakendused meie peamise veebirakenduse ja rakendusserveri vahel). Need vahendusrakendused on omavahel seotud ja neid käivitatakse järjestikku.
Rack Middleware peab rakendama kõiki spetsifikatsioone, mis on seotud Riiulirakendus ja vastama järgmistele punktidele:
klass RackMiddleware
def initialize(app)
@app = app
end
def call(env)
@app.call(env)
end
end
Nüüd, kui me teame põhitõdesid, oleme valmis looma oma esimese Rack-rakenduse Rack Middleware'iga ja käivitama seda Puma (Application Server) abil.
Veenduge, et teil on rack
kalliskivi ja puma
gem paigaldatud.
gem paigaldada hammasratas
gem install puma
Kõigepealt peame looma faili nimega config.ru
ja see fail kasutab
Rack::Builder DSL, et käivitada rakendus ja lisada vahendusprogramm.
Seespoolt config.ru
faili, lisame lihtsa Rack rakenduse, mille defineerisime failis
eelmised lõigud.
# config.ru
klass RackApp
def call(env)
status = 200
headers = { 'Content-Type' => 'text/html' }
body = ['<h1>Minu Rack App<h1>']
[staatus, päised, keha]
end
end
Siin teeme väikese muudatuse meie lihtsasse vaheprogrammile ja nüüd lisab see pärast täitmist meie HTML-korpusesse serveri tarkvara.
# config.ru
klass RackMiddleware
def initialize(app)
@app = app
end
def call(env)
status, headers, body = @app.call(env)
body << env['SERVER_SOFTWARE']
[status, headers, body]
end
end
Viimase sammuna käivitame serveri ja näeme, kuidas meie rakendus töötab. Meie config.ru
fail näeb välja järgmiselt:
# config.ru
klass RackApp
def call(env)
status = 200
headers = { 'Content-Type' => 'text/html' }
body = ['<h1>Minu Rack App<h1>']
[staatus, päised, keha]
end
end
class RackMiddleware
def initialize(app)
@app = app
end
def call(env)
status, headers, body = @app.call(env)
body << env['SERVER_SOFTWARE']
[status, headers, body]
end
end
use RackMiddleware
käivitada RackApp.new
Viimastes ridades täpsustame vahendusprogrammi, kasutades kasutada
ja käivitame rakenduse kasutades joosta.
Me oleme valmis täitma rackup
meie konsooli ja näeme, et server töötab. Me võime kontrollida port, kus meie rakendus töötab, ja peaksime pärast sellele juurdepääsu nägema midagi sellist:
Mõnikord on hea minna tagasi põhitõdede juurde ja õppida tundma tehnoloogiat, millega me töötame. Learning Rack annab meile selge ülevaate arhitektuurist ja paljastab "maagia" taga oleva Ruby veebiraamistikud.