Supabasen käsitteet aukeavat suomeksi helpoimmin tietokannasta käsin. Jokaisen projektin pohjalla on tavallinen Postgres-tietokanta, ja kirjautuminen, tiedostotallennus ja valmis rajapinta, jonka kautta sovellus lukee ja kirjoittaa dataa, toimivat kaikki sen päällä.
Käytännössä tästä seuraa, että kun taulu luodaan, rajapinta sitä varten syntyy itsestään, ja käyttöoikeudet määritellään samalla kielellä kuin muukin tietokantatyö. Sinun ei tarvitse kirjoittaa palvelinkoodia väliin.
Postgres pohjana
Postgres on relaatiotietokanta, jota on kehitetty vuosikymmeniä ja joka pyörii yhtä lailla pankkien järjestelmissä kuin harrastusprojekteissa. Data on tauluissa, joilla on sarakkeet ja tyypit, ja taulut liitetään toisiinsa avainten kautta.
Aloittelijalle tästä seuraa kaksi asiaa. Kysely kirjoitetaan SQL:llä, joka on standardikieli, joten jokainen opas, esimerkki ja mallin antama vastaus koskee myös omaa tietokantaasi. Ja data on siirrettävissä: Postgres-tietokannan saa ulos ja toiseen paikkaan ilman että koodi pitää kirjoittaa uusiksi.
Taulujen suunnittelu kannattaa tehdä huolella heti alussa. Yksi taulu käyttäjille, yksi projekteille, yksi projektin riveille, ja jokaisessa viittaus siihen, kenelle rivi kuuluu. Tuo viimeinen sarake on se, jonka varaan koko käyttöoikeusmalli myöhemmin rakentuu.
Maksuttoman tason luvut
Supabasen maksuton taso sisältää 500 MB tietokantaa jaetulla suorittimella ja 500 MB muistilla sekä 1 GB tiedostotallennusta. Saman hinnaston mukaan mukana on 5 GB ulosmenevää liikennettä ja 5 GB välimuistista liikennettä kuukaudessa, 50 000 kuukausittaista aktiivista käyttäjää ja kaksi aktiivista projektia kerrallaan.
Viidensadan megatavun tietokanta kuulostaa pieneltä ja on käytännössä iso. Tekstiriveinä siihen mahtuu satojatuhansia rivejä. Se täyttyy vasta, jos alat tallentaa kuvia tai tiedostoja itse tietokantaan, ja juuri siksi tiedostot kuuluvat tiedostotallennukseen eivätkä tauluun.
Kahden projektin raja tulee vastaan nopeasti. Harjoitusprojekti, keskeneräinen kokeilu ja oikea sovellus eivät mahdu maksuttomalle tasolle yhtä aikaa, joten vanhat kokeilut kannattaa poistaa sitä mukaa kun ne on opittu.
Rivitason tietoturva ennen julkaisua
Supabasessa selain puhuu suoraan tietokannan kanssa, joten suojaus tehdään tietokannassa. Menetelmä on rivitason tietoturva, joka päättää rivi riviltä, kuka saa nähdä mitäkin.
Supabasen ohje varoittaa, että rajapinnalle avattuun skeemaan kuuluva taulu ilman rivitason tietoturvaa on luettavissa ja kirjoitettavissa kaikilla rooleilla, joilla on siihen oikeus. Kun suojaus on päällä, julkaistavalla avaimella ei saman ohjeen mukaan pääse käsiksi mihinkään dataan ennen kuin käytännöt on luotu.
Käytäntö on sääntö, joka kertoo ehdon. Tyypillisin ehto on se, että kirjautuneen käyttäjän tunniste vastaa rivin omistajasaraketta. Ohje neuvoo kirjoittamaan erilliset käytännöt select-, insert-, update- ja delete-operaatioille, koska Postgres ei hyväksy useaa operaatiota yhdessä for-lauseessa. Neljä sääntöä taulua kohti kuulostaa työläältä ja on tarkoituksellista, koska lukeminen ja poistaminen ovat eri asioita.
Testaa säännöt kahdella tilillä. Kirjaudu sisään yhtenä käyttäjänä, luo rivi, kirjaudu toisena ja yritä lukea sama rivi. Jos se näkyy, sääntö on väärä. Tämä kahden minuutin testi on ainoa tapa varmistua siitä, että sääntö tekee sen mitä luulet.
Projektin pysähtyminen ja sen välttäminen
Maksuttoman tason projektit pysäytetään saman hinnaston mukaan viikon käyttämättömyyden jälkeen. Pysäytetty projekti ei katoa, mutta se ei vastaa pyyntöihin ennen kuin käynnistät sen konsolista, ja käynnistys kestää hetken.
Tämä on tavallinen syy siihen, että portfolioprojekti näyttää rikkinäiseltä juuri silloin, kun joku katsoo sitä. Jos linkität demon työhakemukseen, avaa se itse muutaman päivän välein tai siirrä se maksulliselle tasolle siksi ajaksi.
Maksullinen Pro-taso poistaa pysäytyksen ja sisältää saman hinnaston mukaan laskentakrediitin, joka kattaa yhden Micro-instanssin. Siirtymä kannattaa tehdä siinä vaiheessa, kun sovelluksella on käyttäjiä, jotka odottavat sen olevan pystyssä.
Termit, jotka kannattaa opetella
Supabasen dokumentaatio on englanniksi, ja muutama termi toistuu jatkuvasti. Row Level Security on rivitason tietoturva. Policy on käytäntö eli yksittäinen sääntö. Schema on skeema, tietokannan looginen kokonaisuus, ja julkinen skeema on se, jonka rajapinta näyttää ulos.
Anon key eli julkaistava avain on tarkoitettu selaimeen, ja se on turvallinen vain silloin, kun rivitason tietoturva on kunnossa. Service role key on palvelinavain, joka ohittaa kaikki käytännöt. Sitä ei viedä selaimeen koskaan, eikä sitä kirjoiteta ympäristömuuttujaan, jonka nimi paljastuu käännöksessä asiakaspuolelle.
Migration on migraatio eli tietokannan rakenteen muutos tallennettuna tiedostoon. Kun teet muutokset migraatioina etkä käsin konsolissa, saat saman rakenteen pystyyn uudelleen milloin tahansa. Käsin tehty muutos katoaa muistista kolmessa viikossa.
Valmis rajapinta ja sen käyttö
Jokaista julkisen skeeman taulua vastaa valmis rajapinta, jota sovellus kutsuu kirjastolla. Haku, lisäys, päivitys ja poisto kirjoitetaan muutamalla rivillä, ja suodatus tehdään samoilla ehdoilla kuin SQL:ssä.
Yksi tapa erottaa toimiva rakenne huonosta on katsoa, montako kutsua yksi näkymä tekee. Lista, joka hakee ensin projektit ja sitten jokaiselle projektille rivit erikseen, tekee kaksikymmentäyksi kutsua kahdenkymmenen projektin listalle. Sama data saadaan yhdellä kyselyllä, joka hakee liitetyt rivit mukaan. Tekoäly kirjoittaa usein ensin sen huonon version, joten pyydä siltä nimenomaan yksi kysely.
Reaaliaikainen kuuntelu on oma ominaisuutensa. Sovellus tilaa taulun muutokset, ja uusi rivi ilmestyy näkymään ilman sivun päivitystä. Se sopii yhteiskäyttöisiin listoihin ja on turha yksin käytettävässä lomakkeessa.
Vahvuudet ja rajat
Supabase sopii hyvin sovelluksiin, joissa dataa luetaan ja kirjoitetaan taulumaisesti ja käyttäjiä on selkeästi eroteltuina: varausjärjestelmät, kirjanpito, sisäiset työkalut, listat ja hallintanäkymät. Reaaliaikainen kuuntelu tekee myös yhteiskäyttöisistä näkymistä suoraviivaisia.
Raja tulee vastaan silloin, kun logiikka on monimutkaista ja se pitäisi ajaa turvallisesti. Tietokannan käytännöt riittävät pääsynhallintaan. Liiketoimintasäännöt, joissa yksi tapahtuma muuttaa montaa taulua ehdollisesti, vaativat palvelinfunktio, ja siinä kohtaa projekti alkaa muistuttaa tavallista sovelluskehitystä.
Ensimmäinen projekti pystyyn
Luo projekti, tee yksi taulu ja lisää siihen sarake, joka kertoo rivin omistajan. Kytke rivitason tietoturva päälle heti, kirjoita neljä käytäntöä ja testaa ne kahdella tilillä. Vasta sen jälkeen liitä tietokanta sovellukseen ja tee ensimmäinen kysely.
Kun tuo toimii, kirjoita jokainen rakennemuutos migraationa ja pidä kokeiluprojektit erillään siitä projektista, jonka aiot näyttää muille. Nämä kaksi tapaa erottavat sovelluksen, joka kestää kuukauden, siitä joka pitää rakentaa uudestaan ensimmäisen ison muutoksen kohdalla.