Kas yra pilno steko programa? Paprastas paaiškinimas
Pilno steko programa – tai programa, kurioje yra visi sluoksniai, reikalingi jai veikti: frontend'as, kurį žmonės mato ir spaudo, backend'as, veikiantis serveryje ir taikantis taisykles, ir duomenų bazė, kuri prisimena viską. To-do sąrašas, kuris išsaugo jūsų užduotis, leidžia prisijungti iš bet kokio įrenginio ir niekam kitam nerodo jūsų sąrašo, yra pilno steko. Vienas puslapis, rodantis tik jūsų darbo laiką, – ne.
„Stekas“ tiesiog reiškia technologijų sluoksnius, sudėtus vieną ant kito. „Pilnas“ reiškia, kad visi jie yra.
Kodėl tai svarbu kuriant su DI
Kai DI kūrimo įrankiui aprašote programą, žodžiai, kuriuos naudojate, nulemia, kokius sluoksnius jis sukurs. „Padaryk puslapį, rodantį mūsų meniu“ sukuria frontend'ą. „Leisk klientams užsakyti iš meniu ir leisk virtuvei matyti naujus užsakymus“ reikalauja visų trijų sluoksnių, nes užsakymus reikia išsaugoti, bendrinti tarp dviejų tipų naudotojų ir laikyti privačius.
Žinojimas, kuo jie skiriasi, padeda trimis būdais:
- Prašote to, ko reikia. Jei norite, kad duomenys būtų išsaugoti, tai pasakykite. Įrankis, kuris sukuria tik frontend'ą, atrodys baigtas, bet perkrovus viską pamirš.
- Pastebite netikrą baigtumą. Demonstracija su pavyzdiniais duomenimis gali atrodyti identiškai kaip veikianti programa. Žinojimas apie sluoksnius leidžia patikrinti, ar duomenys tikrai kažkur nukeliauja.
- Suprantate eksploatavimo išlaidas. Vien frontend'ą galima pateikti kaip statinius failus. Backend'as ir duomenų bazė yra programos, veikiančios serveriuose, o su tuo susijusi dalis hostingo išlaidų.
Kasdienis palyginimas: restoranas
Pagalvokite apie restoraną.
- Valgomoji salė – tai frontend'as. Meniu, staliukai ir padavėjo bloknotas. Tai, ką mato svečiai, ir turi būti malonu bei paprasta naudotis.
- Virtuvė – tai backend'as. Svečiai į ją neina. Ji priima užsakymus, tikrina, ar patiekalas yra, pagamina jį ir atmeta keistas užklausas. Taisyklės gyvena čia.
- Sandėlis ir užsakymų knyga – tai duomenų bazė. Juose laikoma, kas yra ir kas buvo užsakyta, kad niekas nepasimirštų keičiantis pamainai.
Restoranas, turintis tik valgomąją salę, gali parodyti gražų meniu, bet jūs nebūsite pavalgydinti. Tai frontend'o programa, apsimetanti pilno steko.
Trys sluoksniai detaliau
| Sluoksnis | Kur veikia | Paskirtis | Tipinė technologija |
|---|---|---|---|
| Frontend | Lankytojo naršyklėje | Rodyti ekranus, rinkti įvestį, veikti greitai | HTML, CSS, JavaScript, dažnai React |
| Backend | Serveryje, kurį valdote | Tikrinti leidimus, taikyti verslo taisykles, kviesti kitas paslaugas su slaptais raktais | Node.js, Python, C#, Java ir kiti |
| Duomenų bazė | Serveryje, šalia backend'o | Saugiai laikyti ir greitai rasti duomenis | Postgres, MySQL, SQLite |
Sluoksniai bendrauja fiksuota tvarka. Frontend'as per API – apibrėžtų užklausų rinkinį, kurį priima backend'as – prašo kažko iš backend'o. Backend'as patikrina užklausą, skaito ar rašo duomenų bazėje ir atsako. Frontend'as niekada tiesiogiai nebendrauja su duomenų baze.
Tokia tvarka yra svarbiausia saugumo idėja visame stekе. Viskas frontend'e gali būti perskaityta ir pakeista lankytojo, nes veikia jo įrenginyje. Todėl taisyklės – „tik savininkas gali matyti šią sąskaitą“, „kuponą galima panaudoti vieną kartą“ – turi būti įgyvendintos backend'e. Daugiau apie šį skirstymą žr. frontend ir backend.
Darbo pavyzdys: klasių rezervacijos programa
Tarkime, vedate jogos studiją ir norite, kad žmonės galėtų rezervuoti klases internetu.
Ką daro lankytojas: atidaro svetainę, mato šios savaitės klases, paspaudžia vieną, prisijungia ir rezervuoja vietą.
Kas vyksta po paviršiumi:
- Frontend'as rodo tvarkaraštį. Kad jį užpildytų, jis klausia backend'o: „Kokios klasės yra šią savaitę ir kiek vietų liko?“
- Backend'as klausia duomenų bazės apie klases, suskaičiuoja rezervacijas kiekvienai ir atsako.
- Lankytojas paspaudžia Rezervuoti. Frontend'as siunčia: „rezervuok klasę 42 šiam prisijungusiam asmeniui“.
- Backend'as tikrina: ar šis asmuo tikrai prisijungęs? Ar klasė pilna? Ar jis jau ją rezervavo? Tik jei viskas tvarkoje, jis įrašo naują rezervacijos eilutę į duomenų bazę.
- Backend'as atsako „rezervuota“, o frontend'as parodo patvirtinimą.
- Vėliau studijos savininkė prisijungia ir mato klasių sąrašą. Backend'as patikrina, ar ji administratorė, prieš rodydamas visų vardus.
Dabar įsivaizduokite, kad tai sukurta tik frontend'e. Tvarkaraštis gal ir būtų rodomas, o rezervavimo mygtukas parodytų gražų varnelę, bet rezervacija dingtų perkrovus puslapį, „likusių vietų“ skaičius būtų neteisingas kitiems, o savininkė jos niekada nematytų. 4 žingsnio – patikrinimų – tiesiog nebūtų. Štai praktinis skirtumas.
Pagrindinės sąvokos
- Frontend (kliento pusė): dalis, veikianti naršyklėje.
- Backend (serverio pusė): dalis, veikianti serveryje. Dar vadinama API serveriu.
- Duomenų bazė: vieta, kur duomenys saugomi sutvarkytai. Žr. kas yra duomenų bazė.
- API: užklausų sąrašas, kurį backend'as priima iš frontend'o ar kitų programų.
- Autentifikacija: tikrinimas, kas esate (prisijungimas). Autorizacija: tikrinimas, ką galite daryti.
- Diegimas (deployment): visų sluoksnių įdiegimas į serverius, kad visuomenė galėtų naudotis.
- Monolitas ar paslaugos: viena programa, atliekanti viską, arba keletas mažesnių (pavyzdžiui svetainė ir atskiras API). Abi yra pilno steko.
Dažniausios klaidos ir klaidingi įsitikinimai
- „Atrodo baigta, vadinasi, baigta.“ Pavyzdiniai duomenys ir veikiantis atrodantis mygtukas nėra tas pats, kas išsaugoti duomenys. Perkraukite puslapį, atidarykite privačiame lange ir patikrinkite, ar duomenys išliko.
- Taisyklių dėjimas į frontend'ą. Paslėpti mygtuką nėra apsauga. Jei backend'as netikrina, bet kas, žinantis užklausą, gali ją atlikti.
- Slaptų raktų dėjimas į frontend'ą. Mokėjimo ar DI teikėjo raktas naršyklės kode matomas kiekvienam lankytojui. Raktai priklauso backend'ui, aplinkos kintamuosiuose – žr. aplinkos kintamuosius ir slaptuosius raktus.
- Pilno steko reiškia sudėtinga. Maža pilno steko programa gali būti kelios ekranai, keli backend'o maršrutai ir trys duomenų bazės lentelės. Tai sluoksnių aprašymas, o ne dydis.
- Galvojimas, kad reikia pačiam pasirinkti kiekvieną technologiją. Bet koks protingas, plačiai naudojamas steko pasirinkimas tiks pirmai versijai. Svarbiau yra aiškus duomenų ir taisyklių aprašymas.
Ko prašyti savo DI kūrimo įrankio
Apibūdinkite programą per tris sluoksnius, net jei jų nepavadinate:
- Duomenys: „Saugok klases (pavadinimas, laikas, talpa) ir rezervacijas (klasė, asmuo, rezervavimo laikas) duomenų bazėje.“
- Taisyklės: „Klasės negalima rezervuoti virš talpos. Asmuo gali rezervuoti klasę tik kartą. Tik administratoriai gali matyti, kas rezervavo.“
- Ekranai: „Savaitinis tvarkaraštis, rezervavimo patvirtinimas, administratoriaus puslapis su rezervacijomis pagal klasę.“
- Patikrinimai: „Įgyvendink šias taisykles serveryje, ne tik puslapyje. Visus API raktus laikyk serveryje.“
Tada testuokite kaip skeptikas: perkraukite, prisijunkite kaip du skirtingi žmonės, bandykite pamatyti duomenis, kurių neturėtumėte. Vadovas, kaip kurti programą su DI nuosekliai aprašo visą šį ciklą.
Pilno steko programos Mythex platformoje
Mythex kuria pilno steko žiniatinklio programas pagal pokalbio aprašymą. Pagal nutylėjimą nauja programa gauna React ir TypeScript frontend'ą; kai programai reikia išsaugoti duomenis, Mythex prie projekto prideda atskirą Postgres duomenų bazę, o jei norite, galite papildomai prašyti atskiro API serverio (pavyzdžiui Python, Node, C# ar Java) šalia svetainės. Viskas veikia kartu tiesioginėje peržiūroje ir publikuojama viešu URL. Dokumentacijos puslapis apie kelių paslaugų programas parodo, kaip svetainė ir API kartu peržiūrimi ir publikuojami, o pilno steko programų kūrėjas turi pradinių taškų.
Klausimai
Ką reiškia pilnas stekas?
Pilnas stekas reiškia, kad programa apima visus sluoksnius, reikalingus veikti savarankiškai: frontend'ą, kurį žmonės mato ir spaudo, backend'ą, veikiantį serveryje ir taikantį taisykles, ir duomenų bazę, kuri saugo duomenis. Pilno steko kūrėjas – tai žmogus, galintis dirbti su visais tais sluoksniais.
Ar svetainė yra pilno steko programa?
Ne visada. Informacinė svetainė su fiksuotais puslapiais yra tik frontend. Ji tampa pilno steko, kai jai reikia serverio ir duomenų bazės, pavyzdžiui kad žmonės galėtų registruotis, išsaugoti užsakymus ar matyti savo duomenis.
Man reikia pilno steko programos ar tik frontend'o?
Jei programa turi ką nors prisiminti tarp apsilankymų, laikyti duomenis privačiai kiekvienam naudotojui, priimti mokėjimus ar bendrauti su kitomis paslaugomis su slaptais raktais, jums reikia backend'o ir duomenų bazės – taigi programa yra pilno steko. Jei ji tik rodo informaciją, pakanka frontend'o.
Ar DI gali sukurti pilno steko programą?
Taip. DI kūrimo įrankiai gali parašyti frontend'ą, backend'ą ir duomenų bazių lenteles pagal paprastą aprašymą ir paleisti juos kartu peržiūroje. Vis dėlto turite aprašyti duomenis ir tai, kas gali juos matyti, ir rezultatą patikrinti.