Tyypillisin Laravel-projekti on verkkopalvelu, joka tarjoilee sisältöä selaimelle tai rajapinnan kautta muille sovelluksille. Siinä on käyttäjähallinta, tietokanta, muutama integraatio ulkopuolisiin järjestelmiin ja käyttöliittymä, jonka kautta asioita hallitaan.
Tällainen projekti voi olla asiakasportaali, sisäinen työkalu, julkiselle internetille avattu palvelu tai taustajärjestelmä, jota käytetään muiden sovellusten kautta. Kokoluokka vaihtelee kymmenistä käyttäjistä satoihin tuhansiin.
Laravel sopii tähän hyvin, koska se tarjoaa valmiit ratkaisut yleisimpiin ongelmiin. Autentikointi, valtuutus, tietokantakyselyt, lomakkeiden validointi, virheiden käsittely. Nämä ovat asioita, jotka jokaisessa projektissa pitää tehdä, ja Laravelissa ne on jo tehty.
Kolmas kategoria ovat taustajärjestelmät, jotka eivät näy käyttäjälle lainkaan. Ne pyörivät taustalla, käsittelevät dataa ja keskustelevat muiden järjestelmien kanssa.
Tyypillinen esimerkki on järjestelmä, joka hakee dataa yhdestä järjestelmästä, muokkaa sitä ja lähettää sen eteenpäin toiseen. Tai järjestelmä, joka käsittelee saapuvia tiedostoja ja tallentaa ne tietokantaan. Tai järjestelmä, joka ajaa laskelmia säännöllisesti ja tuottaa raportteja.
Laravel sopii tähän hyvin, koska sen jonojärjestelmä on kypsä ja luotettava. Taustatehtävät voidaan siirtää jonoihin, jolloin ne eivät hidasta käyttäjän toimintaa. Horizon tarjoaa näkyvyyden siihen, mitä jonoissa tapahtuu.
Käytämme uusinta vakaata versiota. Laravel julkaisee uuden pääversion vuosittain, ja jokainen versio saa tietoturvapäivityksiä kaksi vuotta julkaisusta. Vanhojen versioiden käyttäminen on riski, koska ne eivät saa enää korjauksia.
Sanctum on nykyään oletusvalinta rajapintojen autentikointiin. Se on kevyempi kuin Passport ja riittää useimpiin käyttötapauksiin. Passport on tarpeen vain, jos tarvitaan OAuth2-protokollan täyttä tukea.
Pest on nykyaikainen testauskehys, joka on rakennettu PHPUnitin päälle. Se on syntaksiltaan selkeämpi kuin PHPUnit, ja se on nykyään Laravel-projektien oletusvalinta. Kirjoitamme testit jokaiselle projektille, myös pienille.
Laravel Pint on virallinen työkalu koodin muotoiluun. Se pitää tyylin yhdenmukaisena riippumatta siitä, kuka koodia kirjoittaa.
PostgreSQL on oletusvalintamme. Se on teknisesti edistyneempi kuin MySQL, ja se tukee esimerkiksi JSONB-tietotyyppiä, joka on hyödyllinen joustavassa datassa. MySQL on edelleen hyvä valinta, jos organisaatiolla on jo osaamista siitä tai jos järjestelmäintegraatiot sitä vaativat.
Laravel tukee useita eri lähestymistapoja. Inertia.js on nykyään suosituin, koska se yhdistää Laravelin backendin ja Reactin tai Vuen frontendin ilman erillistä rajapintaa. Livewire on vaihtoehto, joka pitää kaiken PHP:ssä. Perinteinen Blade-template toimii edelleen, jos sovellus on yksinkertainen.
Larastan on PHPStanin laajennus, joka ymmärtää Laravelin rakenteet. Se löytää virheitä, joita ei muuten huomattaisi ennen tuotantoa.
Projekti on rakennettu nopeasti, testit on jätetty pois, ja nyt kukaan ei uskalla tehdä muutoksia, koska pelätään että jokin hajoaa. Tämä on yleisin yksittäinen ongelma. Testien lisääminen jälkikäteen on työlästä, mutta se on usein halvempaa kuin koko sovelluksen uudelleenkirjoittaminen.
Laravelissa on selkeät paikat eri asioille. Controller hoitaa pyynnön, Model hoitaa datan, Service hoitaa logiikan. Kun nämä menevät sekaisin, koodi muuttuu vaikeaksi ymmärtää ja ylläpitää. Tämä on yleistä erityisesti projekteissa, jotka on rakennettu kiireessä.
Pitkäkestoiset operaatiot ajetaan synkronisesti, jolloin käyttäjä odottaa. Tämä on yksinkertaista mutta ei skaalaudu. Jonot ovat olemassa juuri tätä varten.
Kehitys, testi ja tuotanto käyttävät samoja resursseja, tai konfiguraatio on sama kaikissa ympäristöissä. Tämä johtaa siihen, että testaus vaikuttaa tuotantoon, ja se on ongelma.
Laravel-ekosysteemi on laaja, ja on helppo asentaa paketti jokaiseen ongelmaan. Jokainen paketti on kuitenkin riippuvuus, joka pitää päivittää ja joka voi rikkoutua. Suosimme, että paketteja käytetään harkiten ja että jokainen paketti on perusteltu.
Laravel tukee välimuistia usealla eri tasolla, mutta sitä ei käytetä. Tämä näkyy erityisesti sivuston nopeudessa, kun sama data haetaan tietokannasta joka kerta uudelleen.
Projekti on rakennettu Laravel 8:lla, ja nyt ollaan versiossa 11. Päivittäminen versio kerrallaan on työlästä, mutta se on pakollista. Vanha versio ei saa tietoturvapäivityksiä.
Meillä on kokemusta Laravelista useiden vuosien ajalta. Olemme rakentaneet sovelluksia tyhjästä, jatkaneet muiden aloittamia projekteja, päivittäneet vanhoja versioita ja korvanneet hitaasti mätänev iä osia nykyaikaisemmilla.
Tiedämme, missä kohdissa Laravel-projektit yleensä kaatuvat, koska olemme nähneet ne kohdat useaan kertaan. Tämä ei tarkoita, että tekisimme kaiken oikein ensimmäisellä kerralla. Se tarkoittaa, että osaamme varautua ongelmiin ennen kuin ne ilmenevät.
Teemme työn itse. Emme alihanki projekteja eteenpäin. Se kuka myy on se joka tekee.