Giriş
Veb haqqında öyrənməyə çalışarkən
inkişaf, biz adətən front-end back-enddən əhəmiyyətli dərəcədə daha əlçatan olduğunu görürük. Bunun bir çox səbəbi var, xüsusən də koddakı səhifənin müəyyən elementinin dəyişdirilməsi və vebsayta tətbiq edilən dəyişikliyin fərqinə varılması nəticəsində yaranan ani rəy hissi. Bu rəy tez-tez yeni başlayanlar üçün faydalıdır, çünki bu, onlara kodlarını tənzimləməyə və səhvlərindən öyrənməyə imkan verir. Təəssüf ki, backendlə bağlı vəziyyət belə deyil: çox vaxt işin xeyli hissəsi terminalda sadə “Salam Dünya” mesajının görünməsi üçün ətraf mühitin əvvəlcədən qurulmasına və lazım olan asılılıqların quraşdırılmasına həsr olunur., Çərçivələrin inkişaf prosesini asanlaşdırmaq üçün açıq mənbəli cəmiyyətdə davamlı olaraq bir çox irəliləyiş əldə edilir və geliştiricinin təcrübəsinin təkmilləşdirilməsi buna yaxşı bir nümunədir framework, Javascript-də server tərəfində kod yazmağı asanlaşdıran və onu rəqiblərindən fərqləndirən müxtəlif daxili alətlər və funksiyalar təklif edən çox bacarıqlı bir texnologiyadır -on yanaşma, tam funksional layihə qurmaq.
Nə tikəcəyik?
ToDo proqramları front-end inkişafı öyrənən yeni başlayanlar üçün əsas layihədir. Buna görə biz Todo siyahısı API yaratmağa qərar verdik. Bu, bizə interfeysimizə məlumat davamlılığı əlavə etməyə imkan verəcək və bizə bu məlumatları manipulyasiya etmək imkanı verəcək (todos əlavə etmək, yeniləmək, silmək və s….).
Yekun kodu burada tapa bilərsiniz.
Alətlərimiz
Bu layihə üçün sadələşdirilmiş texnoloji yığından istifadə edəcəyik. Bu, real həyat layihələrində tapa biləcəyiniz bir çox alətin minimal versiyası hesab edilə bilər, bunun səbəbi daha yüksək səviyyəli ideyaların eyni olmasıdır. Başlamaq üçün həyata keçirilməsinin təfərrüatları və xüsusi alətin digərindən seçilməsi vacib deyil.
-
NodeJs, qeyd etdiyimiz kimi, server tərəfi proqramların qurulması üçün ən populyar Javascript çərçivələrindən biridir.
-
ExpressJs NodeJS-in üstündə istifadə olunan minimal Javascript çərçivəsidir. Bir çox daxili funksiyalardan istifadə edərək inkişaf prosesini sürətləndirir. O, həmçinin mühəndislər üçün istifadəsini asanlaşdırmaq üçün NodeJS layihələrində inkişaf təcrübələrini standartlaşdırmaq üçün istifadə olunur.
-
LowDB sadə yaddaşdaxili verilənlər bazasıdır. Onun sadəliyi bizə yerləşdirmə və konfiqurasiya kimi daha təkmil mövzularla məşğul olmadan NodeJs layihəsində verilənlər bazası ilə necə qarşılıqlı əlaqə quracağımızı nümayiş etdirməyə imkan verir.
İndi istifadə edəcəyimiz bütün alətləri müəyyən etdikdən sonra klaviaturalarımıza keçək və kodlaşdırmağa başlayaq!
Quraşdırma
Node bütün platformalarda mövcuddur. Bütün quraşdırma təlimatlarını rəsmi internet saytında tapa bilərsiniz. Windows istifadəçiləri qovşağı mühit dəyişənlərinə yol əlavə etməli olduğundan əmin olmalıdırlar ki, o, komanda xəttində istifadə oluna bilsin.
Bizə də npm quraşdırmaq lazımdır. Npm NodeJs üçün standart paket meneceridir. Bu, bizə layihə asılılığımızı idarə etməyə imkan verəcək. Quraşdırma təlimatını burada tapa bilərsiniz.
Layihənin işə salınması
Linkə keçin və başlanğıc layihəni klonlayın:
Bu, layihəmiz üçün sadə başlanğıc deposudur. Layihə fayl strukturu ilə birlikdə istifadə edəcəyimiz bütün asılılıqları ehtiva edir. Hər bir elementə çatdıqdan sonra izah edəcəyik. Terminalınızı açın, layihənin yoluna gedin və əmri işlədin:
npm install
Bu, paket.json faylında göstərilən layihənin bütün asılılıqlarını quraşdıracaq. package.json hər hansı Javascript/NodeJs layihəsinin kökündə tapılan fayldır, o, sonuncu haqqında metadata ehtiva edir və bütün layihə asılılıqlarını, skriptləri və versiyaları idarə etmək üçün istifadə olunur.
Bütün asılılıqlar quraşdırıldıqdan sonra tətbiqimizə başlaya bilərik:
npm run start
“start” paketdə qeyd etdiyimiz skriptdir. json faylı. O, bizim vəziyyətimizdə app.js olan tətbiqimizə giriş faylını təyin edir.
İndi terminalınızda aşağıdakı mesaj görünməlidir:
Bu o deməkdir ki, serverimiz uğurla başladı və 3000 portuna göndərilən sorğuları dinləyir. Gəlin app.js-ə baxaq və burada nə baş verdiyini izah edək:
App.js bizim layihə giriş faylımızdır (və bu anda yeganə fayldır). Biz app adlı ekspress tətbiqi işə salırıq, müəyyən edirik ki, http metodu “GET” və '/' alt yolu olan bütün sorğular bu marşrut tərəfindən idarə olunacaq, sorğu və cavab obyektini qəbul edən ara proqram adlanan funksiyaya keçir. parametrlər. Bu çox vacibdir, çünki sorğunun idarə olunması üçün lazım olan bütün məlumatları (parametrlər, sorğunun əsas hissəsi, sorğu başlıqları və s.) ehtiva edir və cavab obyekti müştəriyə qaytarılacaq obyektdir. Biz sadəcə “Salam dünya” mesajı göndərməklə başlayırıq. Bundan sonra tətbiqimizi müəyyən edilmiş porta (bizim vəziyyətimizdə 3000) daxil olan hər hansı sorğuları dinləməyə məcbur edirik və proqramımızın işlək vəziyyətdə olduğunu və sorğuları qəbul etməyə hazır olduğunu bildirmək üçün “3000 portuna qulaq asırıq” mesajını qeyd edirik.
Terminalınızı açın və keçid çubuğuna “localhost:3000/” yazın və Enter düyməsini basın. Bu, serverimizə yerli olaraq çatmaq üçün istifadə edə biləcəyimiz müəyyən yoldur. Siz aşağıdakı mesajı alacaqsınız:
Verilənlər bazasının konfiqurasiyası
Lowdb istifadəsi asan olan açıq mənbəli verilənlər bazasıdır və heç bir xüsusi quraşdırma tələb etmir. Bunun arxasındakı ümumi fikir bütün məlumatları yerli json faylında saxlamaqdır. LowDB quraşdırıldıqdan sonra (bu, biz bütün asılılıqları quraşdıranda həyata keçirilirdi), biz db.js-ə aşağıdakı kodu əlavə edə bilərik:
Bu kod LowDB-nin rəsmi sənədlərində tapılan kodla olduqca oxşardır. Biz öz istifadə vəziyyətimiz üçün onu bir az tənzimlədik. Bunu sətir-sətir izah edək:
İlk bir neçə sətir lazımi asılılıqların idxalı üçündür. “Qoşulmaq” “yol” modulunda mövcud olan köməkçi funksiyadır. Bu, yollarla işləmək və idarə etmək üçün bir çox üsul təklif edən NodeJ-lərin əsas modullarından biridir. “Aşağı” və “JSONFile” LowDB tərəfindən ifşa olunan iki sinifdir. Birincisi, məlumatlarımızı ehtiva edən json fayl nümunəsini yaradır. İkincisi, ona təsir edəcək faktiki verilənlər bazası nümunəsini yaradır. Nəhayət, “lodash” ümumi proqramlaşdırma tapşırıqları üçün geniş çeşiddə kommunal funksiyalar təklif edən ən çox istifadə olunan javascript kitabxanalarından biridir. Məlumatlarımızı idarə etmək üçün onun qabaqcıl üsullarından istifadə etmək imkanı vermək üçün onu verilənlər bazası nümunəmizə əlavə edirik.
Əvvəlcə db.json faylının yolunu müəyyənləşdiririk. Bu, məlumatlarımızı ehtiva edən və LowDB-yə ötürülən fayldır. Əgər fayl göstərilən yolda tapılmazsa, LowDB onu yaradacaq.
Daha sonra fayl yolunu LowDB adapterinə ötürürük və onu yeni LowDB verilənlər bazası nümunəmizə ötürürük. “db” dəyişəni daha sonra verilənlər bazamızla əlaqə saxlamaq üçün istifadə edilə bilər. Verilənlər bazası nümunəsi yaradıldıqdan sonra db.read() istifadə edərək json faylından oxuyuruq. Bu, verilənlər bazası nümunəmizdə "məlumat" sahəsini təyin edəcək ki, verilənlər bazası məzmununa daxil ola bilək. Diqqət yetirin ki, biz bu sətirdən əvvəl “gözlə” ilə çıxmışıq. Bu, bu təlimatın həlli üçün naməlum vaxt tələb edə biləcəyini və NodeJs prosesinin kodun qalan hissəsinə davam etməzdən əvvəl onun icrasını gözləməli olduğunu müəyyən etmək üçündür. Biz bunu ona görə edirik ki, oxu əməliyyatı müəyyən edilmiş fayla yaddaş girişini tələb edir və bu cür əməliyyatın yerinə yetirilməsi vaxtı maşınınızın texniki xüsusiyyətlərindən asılıdır.
İndi məlumat sahəsinə çıxışımız olduğundan, biz onu boş yazılar massivindən ibarət obyekt kimi təyin edirik, daha doğrusu, faylda hər hansı əvvəlki məlumatların olub-olmadığını yoxlayırıq və belə deyilsə, boş massivi təyin edirik.
Nəhayət, verilənlərə etdiyimiz dəyişiklikləri tətbiq etmək üçün db.write() funksiyasını icra edirik və verilənlər bazası nümunəsini layihəmizdəki digər fayllarda istifadə etmək üçün ixrac edirik.
Ümumi sorğu/cavab iş axını
Aşağıdakı diaqramı nəzərdən keçirin:
Bu, NodeJs/Express ilə qurulmuş çoxlu backend proqramlarında tətbiq olunan ümumi arxitekturanı göstərir. Sorğunun idarə edilməsinin arxasında ümumi iş prosesini başa düşmək sizə NodeJs proqramlarını qurmağa və strukturlaşdırmağa imkan verəcək, həm də bu anlayışları praktiki olaraq seçdiyiniz istənilən texniki yığına köçürməyə imkan verəcək. Bu prosesə müdaxilə edən müxtəlif təbəqələri araşdıracaq və onların rollarını izah edəcəyik:
## HTTP Sorğu Layeri
Bu, tətbiqimizdəki ilk təbəqədir, onu müxtəlif müştərilərdən gələn müxtəlif sorğuların geniş spektrini qəbul edən bir şlüz kimi təsəvvür edin, hər bir sorğu təhlil edilir və onun idarə olunması üçün tətbiqin xüsusi hissəsinə ötürülür.
-
Routerlər: burada biz Ekspress marşrutlaşdırıcıları nəzərdə tuturuq, lakin bu konsepsiya bir çox backend çərçivələrində tapıla bilər. Routerlər biznes məntiqimizdəki məntiqi paylanmanı kodumuza tətbiq etmək üçün bir yoldur, yəni oxşar xüsusiyyətləri paylaşan elementlərin hər bir dəsti eyni giriş tərəfindən idarə olunur və digər dəstlərdən ayrıla bilər. Bu, kodun hər bir komponentini digərlərindən müstəqil etmək və saxlanması və genişləndirilməsini asanlaşdırmaq kimi üstünlüklərə malikdir. Daha konkret desək, misal olaraq, “/posts” paylaşılan url yolunun şərtlərini yerinə yetirən bütün sorğular eyni marşrutlaşdırıcı tərəfindən idarə olunacaq. Onların http metodundan (GET, POST və s.) asılı olaraq fərqli bir nəzarətçi istifadə olunacaq.
-
Nəzarətçilər: nəzarətçi marşrutlaşdırıcılardan süzülmüş sorğuları qəbul edir, əlavə emal tətbiq edir və uyğun xidmət üsullarını çağırır.
Biznes məntiqi təbəqəsi
Bu təbəqə tətbiqin xüsusi istifadə hallarından və onun arxasında duran biznes məntiqindən asılı olaraq unikaldır.
-
Xidmətlər: Xidmətlər tətbiqin əsas məntiqini ehtiva edən metodlar toplusudur. Onlar həmçinin ORMs/ODMs vasitəsilə verilənlər bazası ilə qarşılıqlı əlaqə qururlar. %20Sənəd%20Mapping,qrafik%20verilənlər bazası%2C%20 və s.).
-
Üçüncü tərəf xidmətləri: bir çox müasir proqramlar tətbiqin məntiqinin bir hissəsini API vasitəsilə əldə edilə bilən xüsusi xidmətlərə həvalə etməyi seçir. Bu növ xidmətlər ödənişlərin idarə edilməsi xidmətləri, statik faylların saxlanması, bildirişlər və s. ola bilər.
-
ODM/ORM: ORM və ODM-lər xidmətlər və verilənlər bazası arasında vasitəçi rolunu oynayır. Onların rolu, tərtibatçıya SQL kimi xüsusi verilənlər bazası dilləri əvəzinə, seçdiyi proqramlaşdırma dilində kod yazmağa imkan verən verilənlər bazasında yüksək səviyyəli abstraksiya təmin etməkdir.
Data Persistence Layer
- Verilənlər bazaları: daha əvvəl qeyd etdiyimiz kimi, demək olar ki, bütün proqramlar müəyyən formada məlumatların davamlılığına ehtiyac duyur. Bu hissə verilənlər bazaları tərəfindən idarə olunur və məlumatların xarakterindən, biznes məntiqindən və bir çox digər mülahizələrdən asılı olaraq, müəyyən verilənlər bazasının digərinə nisbətən seçilməsi tətbiqin səmərəliliyi və miqyaslılığı üçün həlledici hesab olunur.
Nümunə: Yazı əlavə etmək
İndi memarlığın əsas ideyasını başa düşdükdən sonra gəlin onu sadə nümunəmizə tətbiq edək. Tətbiqimizə todo yazısı əlavə etmək xüsusiyyətini tətbiq edəcəyik. Fərz edək ki, hər hansı bir yazının sonradan verilənlər bazamızda müəyyən etməyə imkan verəcək unikal identifikatoru, sətirdən ibarət başlıq və tam ədəd tipli sifariş var. Diaqramımızdan sonra marşrutlaşdırıcını həyata keçirməyə başlayacağıq. index.js faylına aşağıdakı kodu əlavə edin:
Bu bizim router faylımızdır. Biz nəzarətçimizdən ekspress və “addPost” metodunu idxal edirik (biz bunu tezliklə həyata keçirəcəyik), ekspress marşrutlaşdırıcının nümunəsini yaradırıq və addPost metodunu marşrutlaşdırıcımıza bağlayırıq, yəni kök yolu və http olan hər sorğu üçün metodu "POST", "addPost" metodu onu idarə etmək üçün çağırılacaq.
Metodumuzu nəzarətçidə tətbiq etməzdən əvvəl biz əsas app.js faylımızda yeni marşrutlaşdırıcıya istinad edirik və onun yolunu “/posts” olaraq təyin edirik: Göstərilən yolları olan bütün marşrutlar bu marşrutlaşdırıcıya yönləndiriləcək, ona görə də onu idarə etmək olar. müxtəlif nəzarətçi üsulları ilə:
Routeri idxal edirik və onu "yazılar" adlandırırıq. app.use(“/posts”,..) o deməkdir ki, “/posts” alt yolu olan bütün sorğular, http metodundan asılı olmayaraq, göstərilən marşrutlaşdırıcıya yönləndiriləcək.
app.js-ə edilən digər dəyişikliklərə verilənlər bazası konfiqurasiya faylının icrası üçün idxal edilməsi və sorğunun əsas obyektinə daxil olmağımıza imkan yaratmaq üçün express.json()-dan ara proqram kimi istifadə edilməsi daxildir.
Marşrutlarımız təyin olunduqdan sonra biz controller.js faylına “addPost” metodunu əlavə edə bilərik:
“addPost” sorğu, cavab obyektləri və növbəti funksiyanı parametr kimi qəbul edən ara proqram funksiyasıdır. Növbəti funksiya çağırıldıqda proses zəncirdəki növbəti ara proqrama keçəcək və ya sorğunu bitirəcək. Metodun kodunda biz sorğu orqanından başlıq və sifarişi çıxarırıq və onları parametr kimi “createPost” xidmət funksiyasına ötürürük. Bu funksiya post atributlarını alır, yeni yazı yaradır və onu qaytarır. Yeni yazı yaradıldıqdan sonra onu 200 status kodu ilə birlikdə müştəriyə qaytarırıq, yəni sorğu uğurla başa çatmışdır. Hər hansı gözlənilməz xətanı tutmaq və onu növbəti ara proqrama ötürmək üçün kodumuzun cəhd/tutmaq blokunun içərisinə yerləşdirildiyini görə bilərsiniz. Bütün marşrutlaşdırıcılara xətanı çıxaran və müştəriyə mənalı xəta mesajı qaytaran səhvlərin idarə edilməsi üçün ara proqram əlavə etmək ən yaxşı təcrübə hesab olunur.
İndi yalnız service.js-də “createPost” funksiyasını yerinə yetirmək qalır:
Arxitekturanın müxtəlif təbəqələrini izah edərkən daha əvvəl qeyd etdiyimiz kimi, xidmət səviyyəsi ORM/ODM-dən istifadə etməklə məlumatların saxlanması həlli ilə qarşılıqlı əlaqədə olur. Bununla belə, bizim nümunəmizdə ayrıca ORM-dən istifadə etməyə ehtiyac qalmayacaq, çünki Lowdb Javascript üçün daxili dəstəklə gəlir. Onun sintaksisi ilə bağlı bütün təfərrüatları sənədlərdə tapa bilərsiniz.
“createPost” metodu başlıq və sifarişi parametrlər kimi qəbul edir və onlardan yazı obyektini yaratmaq üçün istifadə edir. Unikal identifikator üçün biz simvolların unikal ardıcıllığını yaradan “nanoid” adlı xüsusi kitabxanadan istifadə edirik. Yeni postu verilənlər bazasındakı yazılar massivinə əlavə edirik və bu dəyişiklikləri yazırıq; yeni yazı daha sonra funksiya tərəfindən qaytarılır.
Artıq “createPost” hazırdır, yazıların əlavə edilməsi funksiyası artıq tamamlanıb və işləyir. Biz onu API-ləri sınamaq üçün məşhur alət olan Postman istifadə edərək sınaqdan keçiririk:
Sorğu üçün http metodu kimi “POST”u, “localhost:3000/posts” təyin edilmiş url yolu ilə birlikdə seçirik. Başlıq və sifarişi bədən bölməsinə json formatı olaraq əlavə edirik və sorğu göndəririk. Yuxarıda göstərildiyi kimi, biz yeni yaradılmış yazı ilə birlikdə 200 OK statusunu alırıq.
Nəticə
Bu layihədə bir çox konsepsiya və ideyalar araşdırılmışdır: Biz layihə mühitimizi necə quraşdırmaq və qurmaq barədə danışdıq, yerli məlumatların davamlılığı üçün LowDB-ni necə konfiqurasiya etməyi öyrəndik, NodeJS/Express backend proqramlarının ümumi arxitekturasını araşdırdıq və necə edəcəyimizi gördük. sadə bir misalda tətbiq edin. Nəhayət, Postman istifadə edərək tətbiqimizi sınaqdan keçirdik.
Burada məqsəd müasir backend proqramlarının yaradılmasına daxil olan hər şeyin sadələşdirilmiş versiyasını ifşa etmək idi. Daha əvvəl gördüyümüz kimi, NodeJs sadə və mürəkkəb API-lər yaratmağa imkan verən güclü bir vasitədir. Demək olar ki, hər hansı bir istifadə halı üçün ekspress və çoxlu alətlər və kitabxanalar kimi zəngin çərçivə ekosistemi ilə birləşərək, müasir backend inkişafı üçün qanuni həlldir - öyrənməyi və mənimsəməyi tövsiyə etdiyimiz bir həlldir.
Yüksəlməyə hazırsınız? Code Labs Academy-ın Full-Stack Web Development Bootcamp proqramına qoşulun və texnologiyada irəlidə qalın.