E-Dobavki - retservo por serĉi manĝaldonaĵojn en Java kaj Spring Boot, verkita de miaj studentoj

Enkonduko

Okazis, ke dum la lastaj preskaŭ du jaroj mi instruas programadon en unu el la IT-lernejoj en Kyiv. Mi komencis fari ĉi tion Nur Por Amuzo. Mi iam skribis programan blogon, tiam mi rezignis ĝin. Sed la deziro rakonti utilajn aferojn al interesitaj homoj ne foriris.

Mia ĉefa lingvo estas Java. Mi verkis ludojn por poŝtelefonoj, programaron por radiokomunikadoj, kaj diversajn retservojn sur ĝi. Kaj mi instruas Javan.

Ĉi tie mi volas rakonti la historion de la trejnado de mia lasta grupo. Kiel ili iris de komenci trejnadon al verkado de funkcianta retservo. Utila retservo por trovi nutrajn suplementojn. Senpaga, sen reklamado, registriĝo kaj SMS.

La servo mem estas ĉi tie - E-Dobavki.com.

E-Dobavki - retservo por serĉi manĝaldonaĵojn en Java kaj Spring Boot, verkita de miaj studentoj

La projekto estas eduka kaj ne enhavas reklamadon. Kiel mi komprenas de ĉi tiu publikigado, vi povas provizi ligilojn al tiaj projektoj.

Antaŭ ol priskribi la projekton mem, mi rakontos al vi iom pri la lernado de la grupo; sen tio, la bildo estos nekompleta.

9 monatoj trejnado

En la lernejo, kie mi instruas, la Java-kurso estas dividita en 2 partojn. Entute, la kurso daŭras proksimume 9 monatojn, kun ĉiuj paŭzoj (Novjaraj ferioj, tempo por verki mezajn projektojn).

La unua parto prezentas studentojn al la bazaj konceptoj de lingvo. Variabloj, metodoj, OOP-bazoj kaj ĉio tio.

La dua parto de la kurso provizas, ke la studento jam pli-malpli komprenas kiel skribi en Java, kaj oni povas doni al li "plenkreskan" teknologian stakon. Ĉio komenciĝas per SQL, poste JDBC, Hibernate. Poste HTTP, servletoj. Poste estas Printempo, iom pri git kaj maven. Kaj studentoj skribas finajn projektojn.

Ĉiu trejnado estas dividita en modulojn. Mi faris klasojn dufoje semajne. La daŭro de unu leciono estas du horoj.

Mia aliro al lernado

Mi liberigis 5 grupojn. Ŝajnas multe dum du jaroj, sed mi preskaŭ ĉiam gvidis 2 grupojn paralele.

Mi provis malsamajn alirojn.

La unua opcio estas, ke unu paro estas asignita por prezento kun teorio. La dua paro estas pura praktiko. Ĉi tiu aliro iel funkciis, sed ĝi ne estis tre efika, laŭ mi.

La dua eblo, al kiu mi venis kaj pri kiu mi nun laboras, estas ne dediĉi tutan paron al teorio. Anstataŭe, mi miksas mallongajn teoriajn sekciojn dum 5-10 minutoj, kaj tuj plifortigas ilin per praktikaj ekzemploj. Ĉi tiu aliro funkcias pli bone.

Se estas sufiĉe da tempo, mi vokas la studentojn al mia loko, sidigas ilin ĉe mia tekokomputilo, kaj ili mem faras praktikajn ekzemplojn. Ĝi funkcias bonege, sed bedaŭrinde ĝi bezonas multan tempon.

Ne ĉiuj atingas la finon

Revelacio por mi estis la fakto, ke ne la tuta grupo atingas la finon de la kurso.

Laŭ miaj observoj, nur duono de la studentoj skribas la finan projekton. Plej multaj el ili estas forigitaj dum la unua parto de la kurso. Kaj tiuj, kiuj atingis la duan parton, kutime ne defalas.

Ili foriras pro diversaj kialoj.

La unua estas komplekseco. Ne gravas kion ili diras, Java ne estas la plej simpla lingvo. Por skribi eĉ la plej simplan programon, vi devas kompreni la koncepton de klaso, metodo. Kaj por kompreni kial vi bezonas skribi publika senmova malplena ĉef(String[] arg) Estas kelkaj pliaj konceptoj por kompreni.

Komparu ĉi tion kun Turbo Pascal, per kio multaj homoj komencis, inkluzive de mi:

begin
    writeln("Первая программа");
end.

Laŭ mia scio, la lernejo solvos ĉi tiun problemon enkondukante pliajn provojn. Nun ne ĉiuj povas studi Javan. Ĉi tio ankoraŭ estas en la konceptostadio, sed la paŝo klare estas la ĝusta.

Kaj la dua kialo estas kiel en la suba bildo:

E-Dobavki - retservo por serĉi manĝaldonaĵojn en Java kaj Spring Boot, verkita de miaj studentoj

Homoj ofte pensas, ke programado temas pri tajpi multe da teksto kaj ricevi multe da mono por ĝi. Kiel kopiisto, nur pli da mono.

La realo estas iom malsama. Multa rutina kodo, nevideblaj cimoj, konstanta lernado. Ĝi estas interesa, sed ne por ĉiuj.

Ĉi tiuj estas la statistikoj. Komence ĝi ĉagrenis min, mi pensis, ke eble mi faras ion malbone. Nun mi komprenas, ke la statistikoj estas proksimume la samaj por la plej multaj kursoj. Nun mi ne zorgas pri ĝi, sed instruu tiujn homojn, kiuj interesiĝas pri ĝi.

Serva ideo

Post kiam studentoj kompletigis la tutan kurson, estis tempo skribi la finan projekton. Estis malsamaj ideoj. Ili ofertis ToDo-foliojn, projektojn pri administrado de projektoj kaj ion alian.

Mi volis fari ion simplan sed utilan. Mia kriterio estis simpla - ĉu miaj amikoj kaj mi povus uzi ĝin. Reta servo por serĉi manĝaldonaĵojn plenumis ĉi tiujn postulojn.

La ideo estas simpla. Kiam vi aĉetas produkton en vendejo, vi vidas ian E-aldonaĵon en la komponado. Ne estas klare el la kodo kiom danĝera ĝi estas aŭ ne (kaj ankaŭ ekzistas danĝeraj aldonaĵoj kiuj estas malpermesitaj en multaj landoj).

Vi malfermas la retejon, enigu la nomon de la suplemento (nombro, unu el la alternativaj nomoj), kaj ricevas resumon de la suplemento:

E-Dobavki - retservo por serĉi manĝaldonaĵojn en Java kaj Spring Boot, verkita de miaj studentoj

Estas similaj projektoj. Vi ankaŭ povas simple tajpi la aldonaĵon en Guglon, kvankam ĝi ne ĉiam montras la informojn ĝuste.

Sed ĉar la projekto estas eduka, la supraj malfacilaĵoj ne malhelpis nin :)

Реализация

Ĉiuj skribis en Java, fontkodo de la projekto sur Github.

Ni estis 7, inkluzive de mi. Ĉiuj faris tirpeton, kaj mi, aŭ alia persono de la grupo, akceptis ĉi tiun pullpeton.

La efektivigo de la projekto daŭris ĉirkaŭ unu monaton - de la voĉigo de la ideo ĝis la ŝtato, kiun vi nun vidas.

Analizaj aldonaĵoj

La unua afero, kiun unu el la studentoj faris, krom la baza kreado de kadro ĉirkaŭ la datumbazo (unuoj, deponejoj, ktp.), estis analizi aldonaĵojn de ekzistanta informretejo.

Ĉi tio estis necesa por testi la ceterajn punktojn. Ne necesas aldona kodo por plenigi la datumbazon. Rapide analizinte plurajn aldonaĵojn, ni povus plu testi la UI, ordigon kaj filtradon.

Spring Boot permesas krei plurajn profilojn. Profilo estas dosiero kun agordoj.

Por la dev-medio, ni uzis profilon kun loka H2 DBMS kaj la defaŭlta HTTP-haveno (8080). Tiel, ĉiufoje kiam la aplikaĵo estis lanĉita, la datumbazo estis malplenigita. La analizilo en ĉi tiu kazo estis la afero, kiu savis nin.

Serĉu kaj filtradon

Grava punkto estas serĉado kaj filtrado. Persono en vendejo devas rapide klaki sur la kodo de la suplemento, aŭ unu el la nomoj, kaj ricevi la rezulton.

Tial, la Aldona ento havas plurajn kampojn. Ĉi tio estas la aldona kodo, alternativaj nomoj, priskribo. La serĉo estas farita uzante Kiel en ĉiuj kampoj samtempe. Kaj se vi eniras [123] aŭ [amaranton], vi ricevos la saman rezulton.

Ni faris ĉion ĉi surbaze de Specifoj. Ĉi tio estas parto de Spring kiu permesas vin priskribi bazajn serĉkondiĉojn (kiel iu kampo, ekzemple), kaj poste kombini ĉi tiujn kondiĉojn (OR aŭ KAJ).

Skribinte dekduon da specifoj, vi povas demandi kompleksajn demandojn kiel "ĉiuj danĝeraj koloraj aldonaĵoj, kiuj havas la vorton [ruĝa] en la priskribo."

Koncerne labori kun la Spring-datumbazo, mi trovas ĝin tre oportuna. Ĉi tio estas precipe vera kiam oni laboras kun kompleksaj demandoj. Mi komprenas, ke ĉi tio havas sian propran superkoston, kaj mane skribita kaj optimumigita SQL-demando funkcios pli rapide.

Sed mi ankaŭ aliĝas al la vidpunkto, ke ne necesas optimumigi ĉion anticipe. La unua versio devas komenci, funkcii kaj permesi la anstataŭigon de individuaj partoj. Kaj se estas ŝarĝo, ĉi tiuj individuaj partoj devas esti reverkitaj.

Sekureco

Ĝi estas simpla. Estas uzantoj kun la ADMIN-rolo - ili povas redakti aldonojn, forigi ilin kaj aldoni novajn.

Kaj estas aliaj uzantoj (registritaj aŭ ne). Ili povas nur foliumi la liston de aldonaĵoj kaj serĉi tiujn, kiujn ili bezonas.

Spring Security kutimis apartigi rajtojn. Uzantdatenoj estas konservitaj en datumbazo.

Uzantoj povas registriĝi. Nun ĝi donas nenion. Se studentoj daŭre disvolvas la servon kaj enkondukos kelkajn personigitajn funkciojn, tiam registriĝo estos utila.

Respondema kaj Bootstrap

La sekva punkto estas adaptebleco. En la kazo de nia servo (almenaŭ kiel ni vidis ĝin), la plimulto de uzantoj estos kun poŝtelefonoj. Kaj vi devas rapide vidi la suplementon de via poŝtelefono.

Por ne suferi kun CSS, ni prenis Bootstrap. Malmultekosta, gaja, kaj aspektas deca.

Mi ne povas nomi la interfacon ideala. La ĉefpaĝo estas eĉ malpli, kaj la paĝo por detala priskribo de la aldonaĵo estas malvasta; ĉe poŝtelefonoj ĝi devas esti pli larĝa.

Mi povas nur diri, ke mi provis kiel eble plej malmulte malhelpi la laboron. Ĉi tio ankoraŭ estas studenta projekto. Kaj kompreneble, la infanoj povos korekti tiajn momentojn poste.

Minuto de SEO-Optimumigo

Ĉar mi estis proksime implikita en retejoj kaj ĉio rilata al SEO dum pli ol du jaroj, mi ne povus liberigi projekton sen almenaŭ baza SEO-optimumigo.

Fakte, mi faris ŝablonan generacion de Titolo kaj Priskribo por ĉiu aldonaĵo. La URL estas preskaŭ CNC, kvankam ĝi povas esti mallongigita.

Mi ankaŭ aldonis ĉeestajn vendotablojn. Aldonis la retejon al Yandex Webmaster kaj Google Search Console por monitori avertojn de serĉiloj.

Ne sufiĉas. Vi ankaŭ devas aldoni robots.txt kaj sitemap.xml por plena indeksado. Sed denove, ĉi tio estas studenta projekto. Mi diros al ili, kion oni devas fari, kaj se ili volas, ili faros tion.

Vi devas kunsendi SSL-atestilon. La senpaga Let's Encrypt ankaŭ funkcios. Mi faris tion por Spring Boot. Ĝi ne estas malfacile fari, kaj la konfido de la PS pligrandiĝas.

Kio sekvas por la projekto?

Tiam, fakte, la elekto dependas de la uloj. La originala ideo de la projekto ankaŭ inkludis datumbazon de produktoj kun ligiloj al aldonaĵoj.

Enigu "Snickers" kaj vidu kiajn nutrajn aldonaĵojn ĝi enhavas.

Eĉ je la komenco de la projekto, mi sciis, ke ni ne havos produktojn :) Tial ni komencis nur per aldonaĵoj.

Nun vi povas aldoni produktojn kaj enkonduki pliajn. bulkoj. Se ĝi estas ampleksa datumbazo, estos uzantoj.

Deplojo

La projekto estis deplojita sur VPS, Aruba Cloud. Ĉi tiu estas la plej malmultekosta VPS, kiun ni povus trovi. Mi uzas ĉi tiun provizanton dum pli ol jaro por miaj projektoj, kaj mi estas agrable kontenta pri ĝi.

VPS-karakterizaĵoj: 1 GB RAM, 1 CPU (mi ne scias pri la ofteco), 20 GB SSD. Por nia projekto tio sufiĉas.

La projekto estas konstruita uzante la kutiman mvn-puran pakaĵon. La rezulto estas dika kruĉo - rulebla dosiero kun ĉiuj dependecoj.

Por iom aŭtomatigi ĉion ĉi, mi skribis kelkajn bash-skriptojn.

La unua skripto forigas la malnovan jardosieron kaj konstruas novan.

La dua skripto lanĉas la kunmetitan kruĉon, pasigante al ĝi la nomon de la postulata profilo. Ĉi tiu profilo enhavas informojn pri datumbaza konekto.

DB - MySQL sur la sama VPS.

Totala rekomenco de projekto inkluzivas:

  • ensalutu en VPS per SSH
  • elŝutu la plej novajn git-ŝanĝojn
  • rulu local-jar.sh
  • mortigi kurantan aplikaĵon
  • ruli launch-production.sh

Ĉi tiu proceduro daŭras tri minutojn. Ĉi tio ŝajnas al mi saĝa elekto por tia malgranda projekto.

Malfacilaĵoj

La ĉefaj malfacilaĵoj en kreado de la projekto estis de organiza naturo.

Estas grupo de homoj, kiuj ŝajne scipovas programi, sed ne tre bone. Ili scias ion, sed ili ankoraŭ ne povas vere apliki ĝin. Kaj nun ili devas kompletigi la projekton en monato.

Mi identigis kondiĉan teamgvidanton en ĉi tiu grupo. Li konservis Google Doc kun listo de taskoj, distribuis taskojn kaj kontrolis ilian akcepton. Li ankaŭ akceptis tirpetojn.

Mi ankaŭ petis la studentojn verki mallongan raporton ĉiuvespere pri la laboro, kiun ili faris pri la projekto. Se vi faris nenion, bone, simple skribu "faris nenion". Ĉi tio estas bonega praktiko kaj iom streĉas vin. Ne ĉiuj sekvis ĉi tiun regulon, bedaŭrinde.

La celo de ĉi tiu tuta movado estis simpla. Formu teamon, eĉ se nur por mallonga tempo, por kunlabori.

Mi volis, ke la infanoj sentu, ke ilia laboro estas grava. Komprenu, ke ili ne skribas sferan kodon en vakuo. Kaj kion ili faras kune estas projekto, kiun homoj tiam uzos.

La unua aŭ du semajnoj estis amasiĝo. Entoj kaj malgrandaj komitoj estis faritaj malvigle. Iom post iom mi instigis ilin, kaj la laboro fariĝis pli amuza. Komunikado en la babilejo fariĝis pli vigla, studentoj proponis siajn aldonojn.

Mi kredas, ke la celo estas atingita. La projekto estas farita, la infanoj akiris iom da sperto laborante en teamo. Estas videbla, palpebla rezulto, kiu povas esti montrita al amikoj kaj pluevoluinta.

trovoj

Lernado estas interesa.

Post ĉiu klaso mi revenis emocie ekscitita. Mi provas igi ĉiun paron unika kaj transdoni kiel eble plej multe da scio.

Estas agrable kiam la grupo, kiun mi instruas, atingas la finalon. Estas precipe mojose kiam uloj skribas "Mi ricevis laboron, ĉio estas bona, dankon." Eĉ se ĝi estas junulo, eĉ se ĝi ne estas la plej granda mono komence. Sed la plej grava afero estas, ke ili faris paŝon al siaj deziroj, kaj ili sukcesis.

Kvankam la artikolo montriĝis sufiĉe volumena, certe ne eblis kovri ĉiujn punktojn. Sekve, skribu viajn demandojn en la komentoj.

fonto: www.habr.com

Aldoni komenton