Ruby on Rails taikymo srautas

Moteris, dirbanti prie kompiuterio, naudodama programinę įrangą kokybiniams duomenims analizuoti.

mihailomilovanovičius / Getty Images





01 iš 07

Bėgių taikymo srautas

Kai rašote savo programas nuo pradžios iki pabaigos, tai lengva suprasti srauto valdymas . Programa prasideda čia, ten yra kilpa, čia yra metodų iškvietimai, viskas matoma. Tačiau „Rails“ programoje viskas nėra taip paprasta. Naudodami bet kokią sistemą, jūs atsisakote tokių dalykų kaip „srautas“ valdymo ir pasirenkate greitesnį ar paprastesnį sudėtingų užduočių atlikimo būdą. „Ruby on Rails“ atveju srauto valdymas tvarkomas užkulisiuose, o jums belieka (daugiau ar mažiau) modelių, rodinio ir valdiklių rinkinys.

02 iš 07

HTTP

Bet kurios žiniatinklio programos esmė yra HTTP. HTTP yra tinklo protokolas, kurį jūsų žiniatinklio naršyklė naudoja bendraudama su žiniatinklio serveriu. Iš čia atsiranda tokie terminai kaip „užklausa“, „Gauti“ ir „PASiųsti“ – tai pagrindinis šio protokolo žodynas. Tačiau kadangi „Rails“ yra to abstrakcija, mes negaišsime daug laiko apie tai kalbėdami.



Kai atidarote tinklalapį, paspaudžiate nuorodą arba pateikiate formą žiniatinklio naršyklėje, naršyklė prisijungs prie žiniatinklio serverio per TCP/IP. Tada naršyklė siunčia serveriui „užklausą“, pagalvokite apie tai kaip el. pašto formą, kurią naršyklė užpildo prašydama informacijos tam tikrame puslapyje. Galiausiai serveris siunčia žiniatinklio naršyklei „atsakymą“. Tačiau „Ruby on Rails“ nėra žiniatinklio serveris, žiniatinklio serveris gali būti bet koks Webrickas (kas paprastai nutinka, kai paleidžiate Rails serverį iš komandinė eilutė ) į Apache HTTPD (žiniatinklio serverį, kuris maitina didžiąją dalį žiniatinklio). Žiniatinklio serveris yra tik tarpininkas, jis priima užklausą ir perduoda ją jūsų Rails programai, kuri sugeneruoja atsakymą ir grąžina jį serveriui, o šis savo ruožtu siunčia jį atgal klientui. Taigi srautas iki šiol yra toks:

Klientas -> Serveris -> [Bėgiai] -> Serveris -> Klientas

Bet „bėgiai“ yra tai, kas mus tikrai domina, pasigilinkime ten.



03 iš 07

Maršrutizatorius

Vienas iš pirmųjų dalykų, kuriuos „Rails“ programa atlieka su užklausa, yra išsiųsti ją per maršrutizatorių. Kiekviena užklausa turi URL, kuris rodomas žiniatinklio naršyklės adreso juostoje. Maršrutizatorius nustato, ką reikia daryti su šiuo URL, ar URL yra prasmingas ir ar URL yra kokių nors parametrų. Maršrutizatorius sukonfigūruotas config/routes.rb .

Pirma, žinokite, kad galutinis maršrutizatoriaus tikslas yra suderinti URL su valdikliu ir veiksmu (daugiau apie tai vėliau). Kadangi dauguma „Rails“ programų yra RESTful, o „RESTful“ programose viskas vaizduojama naudojant išteklius, matysite tokias eilutes kaip ištekliai: žinutės tipinėse Rails programose. Tai atitinka tokius URL adresus kaip /posts/7/redaguoti su Posts valdikliu, Redaguoti veiksmas su paštu, kurio ID yra 7. Maršrutizatorius tiesiog nusprendžia, kur nukreipti užklausas. Taigi mūsų [Rails] bloką galima šiek tiek išplėsti.

Maršrutizatorius -> [bėgiai]

04 iš 07

Valdiklis

Dabar, kai maršrutizatorius nusprendė, kuriam valdikliui siųsti užklausą ir kuriam to valdiklio veiksmui, jis jį siunčia. Valdiklis yra susijusių veiksmų grupė, sugrupuota į klasę. Pavyzdžiui, tinklaraštyje visas tinklaraščio įrašų peržiūros, kūrimo, atnaujinimo ir trynimo kodas yra sugrupuotas valdiklyje, pavadintame „Paskelbti“. Veiksmai tiesiog normalūs metodus šios klasės. Valdikliai yra programėlė/valdikliai .

Tarkime, kad interneto naršyklė išsiuntė užklausą /posts/42 . Maršrutizatorius nusprendžia, kad tai reiškia Įrašas valdiklis, Rodyti metodas ir rodomo įrašo ID 42 , todėl jis vadinamas Rodyti metodas su šiuo parametru. The Rodyti metodas nėra atsakingas už modelio naudojimą duomenims gauti ir rodinio naudojimą išvesties kūrimui. Taigi mūsų išplėstas [Rails] blokas dabar yra:



Maršrutizatorius -> Valdiklis# veiksmas
05 iš 07

Modelis

Modelis yra ir lengviausiai suprantamas, ir sunkiausiai įgyvendinamas. Modelis yra atsakingas už sąveiką su duomenų baze. Paprasčiausias būdas tai paaiškinti yra modelis – tai paprastas metodų iškvietimų rinkinys, grąžinantis paprastus „Ruby“ objektus, kurie tvarko visas sąveikas (skaito ir rašo) iš duomenų bazės. Taigi, remiantis tinklaraščio pavyzdžiu, API, kurią valdiklis naudos duomenims gauti naudodamas modelį, atrodys panašiai Post.find(params[:id]) . The parametrai yra tai, ką maršrutizatorius išanalizuoja iš URL, Post yra modelis. Tai sukuria SQL užklausas arba daro viską, ko reikia tinklaraščio įrašui gauti. Modeliai yra programėlė/modeliai .

Svarbu pažymėti, kad ne visiems veiksmams reikia naudoti modelį. Sąveika su modeliu reikalinga tik tada, kai duomenis reikia įkelti iš duomenų bazės arba išsaugoti duomenų bazėje. Todėl savo mažoje schemoje po jo uždėsime klaustuką.



Maršrutizatorius -> Valdiklis# veiksmas -> Modelis?
06 iš 07

Vaizdas

Galiausiai laikas pradėti kurti HTML. HTML netvarko pats valdiklis, jo netvarko ir modelis. MVC sistemos naudojimo tikslas yra viską suskirstyti į dalis. Duomenų bazės operacijos lieka režime, HTML generavimas lieka rodinyje, o valdiklis (kviečiamas maršrutizatoriaus) iškviečia juos abu.

HTML paprastai generuojamas naudojant įterptąjį Ruby. Jei esate susipažinę su PHP, tai yra, HTML failas su įterptu PHP kodu, tada įdėtas Ruby bus labai pažįstamas. Šie vaizdai yra programa / rodiniai , o valdiklis paskambins vienam iš jų, kad sugeneruotų išvestį ir išsiųstų ją atgal į žiniatinklio serverį. Visi duomenys, kuriuos valdiklis gavo naudodamas modelį, paprastai bus saugomi atvejo kintamasis kurie dėl tam tikros Rubino magijos bus prieinami kaip egzempliorių kintamieji rodinyje. Be to, įterptam Ruby nereikia generuoti HTML, jis gali generuoti bet kokio tipo tekstą. Tai pamatysite kurdami XML, skirtą RSS, JSON ir kt.



Ši išvestis siunčiama atgal į žiniatinklio serverį, kuris siunčia jį atgal į interneto naršyklę, kuri užbaigia procesą.

07 iš 07

Pilnas paveikslas

Ir viskas. Štai visas užklausos „Ruby on Rails“ žiniatinklio programai galiojimo laikas.



  1. Interneto naršyklė – Naršyklė pateikia užklausą dažniausiai vartotojo vardu, kai jis spusteli nuorodą.
  2. Žiniatinklio serveris – žiniatinklio serveris priima užklausą ir siunčia ją Rails programai.
  3. Maršrutizatorius – Maršrutizatorius, pirmoji Rails programos dalis, kuri mato užklausą, analizuoja užklausą ir nustato, kurią valdiklio/veiksmo porą ji turėtų iškviesti.
  4. Valdiklis – valdiklis vadinamas. Valdiklio užduotis yra gauti duomenis naudojant modelį ir išsiųsti juos į rodinį.
  5. Modelis – jei reikia gauti kokius nors duomenis, modelis naudojamas duomenims iš duomenų bazės gauti.
  6. Rodinys – duomenys siunčiami į rodinį, kuriame generuojama HTML išvestis.
  7. Tinklapio serveris - Sugeneruotas HTML siunčiamas atgal į serverį, Rails dabar baigė vykdyti užklausą.
  8. Žiniatinklio naršyklė – serveris siunčia duomenis atgal į interneto naršyklę, o rezultatai rodomi.