E-Dobavki - mening talabalarim tomonidan yozilgan Java va Spring Boot-da oziq-ovqat qo'shimchalarini qidirish uchun veb-xizmat

kirish

Shunday bo'ldiki, so'nggi ikki yil davomida men Kiyevdagi IT maktablaridan birida dasturlashdan dars berdim. Men buni faqat o'yin-kulgi uchun qila boshladim. Men bir marta dasturlash blogini yozganman, keyin undan voz kechdim. Ammo qiziqqanlarga foydali narsalarni aytib berish istagi yo'qolmadi.

Mening asosiy tilim Java. Unda mobil telefonlar uchun o'yinlar, radioaloqa uchun dasturiy ta'minot va turli veb-xizmatlar yozdim. Va men Java tilini o'rgataman.

Bu erda men oxirgi guruhimning mashg'ulotlari haqida gapirib bermoqchiman. Qanday qilib ular treningni boshlashdan ishlayotgan veb-xizmatni yozishgacha borishdi. Oziqlantiruvchi qo'shimchalarni topish uchun foydali veb-xizmat. Bepul, reklamasiz, ro'yxatdan o'tish va SMS.

Xizmatning o'zi bu erda - E-Dobavki.com.

E-Dobavki - mening talabalarim tomonidan yozilgan Java va Spring Boot-da oziq-ovqat qo'shimchalarini qidirish uchun veb-xizmat

Loyiha ma'rifiy xususiyatga ega va hech qanday reklama yo'q. Men tushunganimdek Ushbu nashr, siz bunday loyihalarga havolalar berishingiz mumkin.

Loyihaning o'zini tasvirlashdan oldin, men sizga guruhning o'quv jarayoni haqida bir oz gapirib beraman, busiz rasm to'liq bo'lmaydi.

9 oylik trening

Men dars beradigan maktabda Java kursi 2 qismga bo'lingan. Hammasi bo'lib, kurs taxminan 9 oy davom etadi, barcha tanaffuslar (Yangi yil bayramlari, oraliq loyihalarni yozish vaqti).

Birinchi qism talabalarni til haqidagi asosiy tushunchalar bilan tanishtiradi. O'zgaruvchilar, usullar, OOP asoslari va boshqa narsalar.

Kursning ikkinchi qismi talaba Java-da qanday yozishni ko'proq yoki kamroq tushunishini ta'minlaydi va unga "kattalar" texnologiyasi to'plami berilishi mumkin. Hammasi SQL, keyin JDBC, Hibernate bilan boshlanadi. Keyin HTTP, servletlar. Keyingi - Bahor, git va maven haqida bir oz. Va talabalar yakuniy loyihalarni yozadilar.

Barcha treninglar modullarga bo'lingan. Men haftasiga ikki marta dars o'tkazdim. Bir darsning davomiyligi ikki soat.

Mening o'rganishga yondashuvim

Men 5 ta guruhni chiqardim. Ikki yil davomida bu juda ko'p tuyuladi, lekin men deyarli har doim parallel ravishda 2 guruhni boshqardim.

Men turli yondashuvlarni sinab ko'rdim.

Birinchi variant - nazariyaga ega taqdimot uchun bitta juftlik ajratiladi. Ikkinchi juftlik sof amaliyotdir. Bu yondashuv qandaydir tarzda ishladi, lekin menimcha, unchalik samarali emas edi.

Men kelgan va hozir ustida ishlayotgan ikkinchi variant - bu butun bir juftlikni nazariyaga bag'ishlash emas. Buning o'rniga men 5-10 daqiqa davomida nazariyaning qisqa bo'limlarini aralashtiraman va ularni darhol amaliy misollar bilan mustahkamlayman. Ushbu yondashuv yaxshiroq ishlaydi.

Agar etarli vaqt bo'lsa, men talabalarni o'z joyimga chaqiraman, ularni noutbukimga o'tiraman va ular o'zlari amaliy misollar qilishadi. Bu ajoyib ishlaydi, lekin afsuski, ko'p vaqt talab etadi.

Hamma ham oxirigacha erisha olmaydi

Men uchun bir vahiy butun guruh kursni oxiriga etkaza olmaganligi edi.

Mening kuzatishlarimga ko'ra, talabalarning faqat yarmi yakuniy loyihani yozadilar. Ularning aksariyati kursning birinchi qismida yo'q qilinadi. Va ikkinchi qismga etib borganlar odatda tushmaydi.

Ular turli sabablarga ko'ra ketishadi.

Birinchisi - murakkablik. Nima deyishmasin, Java eng oddiy til emas. Hatto eng oddiy dasturni yozish uchun siz sinf, metod tushunchasini tushunishingiz kerak. Va nima uchun yozishingiz kerakligini tushunish uchun umumiy statik void main(String[] arg) Tushunish uchun yana bir nechta tushunchalar mavjud.

Buni Turbo Paskal bilan solishtiring, bu ko'p odamlar, shu jumladan men ham boshlagan:

begin
    writeln("ΠŸΠ΅Ρ€Π²Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°");
end.

Bilishimcha, maktab bu muammoni qoβ€˜shimcha testlarni joriy etish orqali hal qiladi. Endi hamma ham Java tilini o'rgana olmaydi. Bu hali kontseptsiya bosqichida, ammo qadam aniq to'g'ri.

Va ikkinchi sabab quyidagi rasmda bo'lgani kabi:

E-Dobavki - mening talabalarim tomonidan yozilgan Java va Spring Boot-da oziq-ovqat qo'shimchalarini qidirish uchun veb-xizmat

Odamlar ko'pincha dasturlash juda ko'p matn terish va buning uchun ko'p pul olish deb o'ylashadi. Kopirayter kabi, faqat ko'proq pul.

Haqiqat biroz boshqacha. Ko'p muntazam kodlar, aniq bo'lmagan xatolar, doimiy o'rganish jarayoni. Bu qiziq, lekin hamma uchun emas.

Bular statistika. Avvaliga bu meni xafa qildi, men noto'g'ri ish qilyapman deb o'yladim. Endi men ko'p kurslar uchun statistika taxminan bir xil ekanligini tushundim. Endi men bu haqda tashvishlanmayman, lekin unga qiziqqan odamlarga o'rgataman.

Xizmat ko'rsatish fikri

Talabalar butun kursni tugatgandan so'ng, yakuniy loyihani yozish vaqti keldi. Turli fikrlar bor edi. Ular ToDo varaqlari, loyihalarni boshqarish loyihalari va boshqa narsalarni taklif qilishdi.

Men oddiy, ammo foydali ish qilmoqchi edim. Mening mezonim oddiy edi - do'stlarim va men undan foydalana olamizmi. Oziq-ovqat qo'shimchalarini qidirish uchun veb-xizmat ushbu talablarga javob berdi.

Fikr oddiy. Do'konda mahsulot sotib olganingizda, siz kompozitsiyada qandaydir E-qo'shimchani ko'rasiz. Kodeksdan bu qanchalik xavfli yoki xavfli emasligi aniq emas (ko'p mamlakatlarda taqiqlangan xavfli qo'shimchalar ham mavjud).

Siz veb-saytni ochasiz, qo'shimcha nomini (raqam, muqobil nomlardan biri) kiritasiz va qo'shimchaning qisqacha mazmunini olasiz:

E-Dobavki - mening talabalarim tomonidan yozilgan Java va Spring Boot-da oziq-ovqat qo'shimchalarini qidirish uchun veb-xizmat

Shunga o'xshash loyihalar mavjud. Bundan tashqari, Google-ga qo'shimchani oddiygina kiritishingiz mumkin, garchi u har doim ham ma'lumotni to'g'ri ko'rsatmasa ham.

Lekin loyiha tarbiyaviy bo'lgani uchun yuqoridagi qiyinchiliklar bizni to'xtata olmadi :)

РСализация

Hamma Java-da yozgan, Github-dagi loyihaning manba kodi.

Biz 7 kishi edik, shu jumladan men ham. Hamma jalb qilish so'rovini berdi va men yoki guruhdagi boshqa shaxs bu tortishish so'rovini qabul qildim.

Loyihani amalga oshirish taxminan bir oy davom etdi - g'oyani aytishdan tortib, hozir ko'rayotgan holatga qadar.

Tahlil qiluvchi qo'shimchalar

Talabalardan biri qilgan birinchi narsa, ma'lumotlar bazasi (ob'ektlar, omborlar va boshqalar) atrofida asosiy ramka yaratishdan tashqari, mavjud ma'lumot saytidan qo'shimchalarni tahlil qilish edi.

Bu qolgan nuqtalarni sinab ko'rish uchun kerak edi. Ma'lumotlar bazasini to'ldirish uchun qo'shimcha kod kerak emas. Bir nechta qo'shimchalarni tezda tahlil qilib, biz UI, saralash va filtrlashni qo'shimcha tekshirishimiz mumkin.

Spring Boot bir nechta profillarni yaratishga imkon beradi. Profil - bu sozlamalarga ega fayl.

Dev muhiti uchun biz mahalliy H2 DBMS va standart HTTP portiga (8080) ega profildan foydalandik. Shunday qilib, har safar dastur ishga tushirilganda ma'lumotlar bazasi tozalandi. Bu holatda tahlilchi bizni qutqargan narsa edi.

Qidiruv va filtrlash

Muhim nuqta - qidiruv va filtrlash. Do'kondagi odam tezda qo'shimchaning kodini yoki nomlardan birini bosib, natijani olishi kerak.

Shuning uchun qo'shimcha ob'ekt bir nechta maydonlarga ega. Bu qo'shimcha kod, muqobil nomlar, tavsif. Qidiruv bir vaqtning o'zida barcha sohalarda Like tugmasi yordamida amalga oshiriladi. Agar siz [123] yoki [amaranth] ni kiritsangiz, xuddi shunday natijaga erishasiz.

Biz bularning barchasini Texnik xususiyatlar asosida qildik. Bu bahorning bir qismi bo'lib, u sizga asosiy qidiruv shartlarini (masalan, ba'zi maydonlarni) tavsiflashga va keyin ushbu shartlarni (YOKI yoki VA) birlashtirishga imkon beradi.

O'nlab spetsifikatsiyalarni yozganingizdan so'ng, siz "tavsifida [qizil] so'zi bo'lgan barcha xavfli rang beruvchi qo'shimchalar" kabi murakkab so'rovlarni berishingiz mumkin.

Spring ma'lumotlar bazasi bilan ishlash nuqtai nazaridan, men uni juda qulay deb bilaman. Bu, ayniqsa, murakkab so'rovlar bilan ishlashda to'g'ri keladi. Buning o'ziga xos yuki borligini tushunaman va qo'lda yozilgan va optimallashtirilgan SQL so'rovi tezroq ishlaydi.

Ammo men hamma narsani oldindan optimallashtirishning hojati yo'q degan fikrga ham amal qilaman. Birinchi versiya ishga tushishi, ishlashi va alohida qismlarni almashtirishga ruxsat berishi kerak. Va agar yuk bo'lsa, bu alohida qismlarni qayta yozish kerak.

xavfsizlik

Hammasi oddiy. ADMIN roliga ega foydalanuvchilar bor - ular qo'shimchalarni tahrirlashlari, o'chirishlari va yangilarini qo'shishlari mumkin.

Va boshqa foydalanuvchilar bor (ro'yxatdan o'tgan yoki yo'q). Ular faqat qo'shimchalar ro'yxatini ko'rib chiqishlari va keraklilarini qidirishlari mumkin.

Spring Security huquqlarni ajratish uchun ishlatilgan. Foydalanuvchi ma'lumotlari ma'lumotlar bazasida saqlanadi.

Foydalanuvchilar ro'yxatdan o'tishlari mumkin. Endi u hech narsa bermaydi. Agar talabalar xizmatni rivojlantirishda davom etsa va ba'zi shaxsiylashtirilgan funktsiyalarni joriy qilsalar, ro'yxatdan o'tish foydali bo'ladi.

Javobgarlik va yuklash

Keyingi nuqta - moslashuvchanlik. Bizning xizmatimiz holatida (hech bo'lmaganda biz buni ko'rganimizdek), foydalanuvchilarning aksariyati mobil telefonlar bilan bo'ladi. Va qo'shimchani mobil telefoningizdan tezda ko'rishingiz kerak.

CSS-dan azob chekmaslik uchun biz Bootstrap-ni oldik. Arzon, quvnoq va munosib ko'rinadi.

Interfeysni ideal deb atay olmayman. Asosiy sahifa bundan ham kamroq va qo'shimchaning batafsil tavsifi uchun sahifa tor, mobil telefonlarda uni kengroq qilish kerak.

Ishga imkon qadar kamroq aralashishga harakat qilganimni aytishim mumkin. Bu hali ham talabalar loyihasi. Va, albatta, yigitlar bunday daqiqalarni keyinroq to'g'rilashlari mumkin.

SEO optimallashtirishning bir daqiqasi

Ikki yildan ortiq vaqt davomida veb-saytlar va SEO bilan bog'liq barcha narsalar bilan yaqindan shug'ullanganim sababli, hech bo'lmaganda asosiy SEO optimallashtirishsiz loyihani chiqara olmadim.

Darhaqiqat, men har bir qo'shimcha uchun sarlavha va tavsif shablonlarini yaratdim. URL deyarli CNC, lekin uni qisqartirish mumkin.

Men davomat hisoblagichlarini ham qo'shdim. Qidiruv tizimlaridan ogohlantirishlarni kuzatish uchun sayt Yandex Webmaster va Google Search Console-ga qo'shildi.

Bu yetarli emas. To'liq indekslash uchun robots.txt va sitemap.xml ni ham qo'shishingiz kerak. Ammo yana takror aytaman, bu talabalar loyihasi. Men ularga nima qilish kerakligini aytaman, agar xohlasalar, buni qilishadi.

SSL sertifikatini biriktirishingiz kerak. Bepul Let's Encrypt ham ishlaydi. Men buni Spring Boot uchun qildim. Buni qilish qiyin emas va PSning ishonchi ortadi.

Loyiha uchun keyingi nima?

Keyin, aslida, tanlov yigitlarga bog'liq. Loyihaning asl g'oyasi, shuningdek, qo'shimchalarga havolalar bilan mahsulotlarning ma'lumotlar bazasini o'z ichiga oladi.

"Snickers" ni kiriting va unda qanday ozuqaviy qo'shimchalar borligini ko'ring.

Loyihaning boshida ham men hech qanday mahsulotimiz yo'qligini bilardim :) Shuning uchun biz faqat qo'shimchalar bilan boshladik.

Endi siz mahsulotlarni qo'shishingiz va qo'shimchalarni kiritishingiz mumkin. bulochka. Agar u keng ma'lumotlar bazasi bo'lsa, foydalanuvchilar bo'ladi.

Joylashtirish

Loyiha VPS, Aruba Cloud-da o'rnatildi. Bu biz topa oladigan eng arzon VPS. Men ushbu provayderdan loyihalarim uchun bir yildan ko'proq vaqt davomida foydalanaman va men bundan mamnunman.

VPS xususiyatlari: 1 GB operativ xotira, 1 protsessor (chastota haqida bilmayman), 20 GB SSD. Bizning loyihamiz uchun bu etarli.

Loyiha odatdagi mvn toza paketi yordamida qurilgan. Natijada yog 'jar - barcha bog'liqliklar bilan bajariladigan fayl.

Bularning barchasini biroz avtomatlashtirish uchun men bir nechta bash skriptlarini yozdim.

Birinchi skript eski jar faylini o'chiradi va yangisini yaratadi.

Ikkinchi skript yig'ilgan kavanozni ishga tushiradi, unga kerakli profil nomini beradi. Ushbu profil ma'lumotlar bazasiga ulanish ma'lumotlarini o'z ichiga oladi.

DB - bir xil VPS-da MySQL.

Loyihaning umumiy qayta boshlanishi quyidagilarni o'z ichiga oladi:

  • SSH orqali VPS-ga kiring
  • so'nggi git o'zgarishlarini yuklab oling
  • local-jar.sh ni ishga tushiring
  • ishlaydigan dasturni o'chirish
  • launch-production.sh ni ishga tushiring

Ushbu protsedura uch daqiqa davom etadi. Bu men uchun bunday kichik loyiha uchun oqilona tanlov kabi ko'rinadi.

Muammolar

Loyihani yaratishdagi asosiy qiyinchiliklar tashkiliy xususiyatga ega edi.

Qanday qilib dasturlashni biladigan odamlar guruhi bor, lekin unchalik yaxshi emas. Ular nimanidir bilishadi, lekin baribir uni amalda qo'llay olmaydilar. Va endi ular loyihani bir oyda yakunlashlari kerak.

Men bu guruhda shartli guruh rahbarini aniqladim. U vazifalar ro'yxati bilan Google Docni saqladi, topshiriqlarni taqsimladi va ularning qabul qilinishini nazorat qildi. Shuningdek, u tortishish so'rovlarini qabul qildi.

Shuningdek, men talabalardan har kuni kechqurun loyihada qilgan ishlari haqida qisqacha hisobot yozishni so'radim. Agar siz hech narsa qilmagan bo'lsangiz, "hech narsa qilmagan" deb yozing. Bu ajoyib amaliyot va sizni biroz taranglashtiradi. Afsuski, hamma ham bu qoidaga amal qilmadi.

Bu harakatning maqsadi oddiy edi. Qisqa vaqtga bo'lsa ham, birgalikda ishlash uchun jamoa tuzing.

Men yigitlar o'z ishlari muhimligini his qilishlarini xohlardim. Ular vakuumda sferik kod yozmasligini tushuning. Va ular birgalikda amalga oshirayotgan narsa odamlar undan keyin foydalanadigan loyihadir.

Birinchi yoki ikki hafta yig'ilish edi. Tashkilotlar va kichik majburiyatlar sust amalga oshirildi. Sekin-asta men ularni qo'zg'atdim va ish yanada qiziqarli bo'ldi. Suhbatdagi muloqot jonlandi, talabalar o'z qo'shimchalarini taklif qilishdi.

Maqsadga erishilganiga ishonaman. Loyiha tugadi, yigitlar jamoada ishlashda ozgina tajribaga ega bo'lishdi. Do'stlarga ko'rsatilishi va yanada rivojlanishi mumkin bo'lgan ko'rinadigan, aniq natija bor.

topilmalar

O'rganish qiziqarli.

Har bir darsdan keyin men hayajonlanib qaytdim. Men har bir juftlikni noyob qilishga va iloji boricha ko'proq bilim berishga harakat qilaman.

Men oβ€˜rgatgan guruh finalga chiqqani ma’qul. Yigitlar "Men ishga joylashdim, hammasi yaxshi, rahmat" deb yozishsa, ayniqsa ajoyib. Agar u kichik bo'lsa ham, birinchi navbatda eng katta pul bo'lmasa ham. Lekin eng muhimi, ular o'z xohish-istaklariga qadam qo'yishdi va ular muvaffaqiyatga erishdilar.

Maqola juda katta hajmli bo'lib chiqqan bo'lsa-da, barcha fikrlarni qamrab olishning iloji yo'q edi. Shuning uchun, savollaringizni sharhlarda yozing.

Manba: www.habr.com

a Izoh qo'shish