Visi straipsniai
Programuotojams·7 min. skaitymo

m77 duomenų bazės naudojimas: kolekcijos, filtrai ir naudotojų duomenys

Kiekviena builder77 programėlė turi integruotą duomenų bazę. Štai kaip veikia kolekcijos, filtrai, rikiavimas ir kiekvieno naudotojo įrašai — ir kaip privačius duomenis išlaikyti privačius.

77
builder77 komanda
builder77.com

Dažniausiai tiesiogiai duomenų bazės neliesi — aprašai savo programėlę, o builder77 parašo kodą, kuris saugo ir skaito duomenis. Tačiau žinodamas, kaip ji veikia, rašysi geresnes užklausas, greičiau rasi klaidas ir priimsi gerus sprendimus dėl privatumo. Štai ekskursija po m77.db.

Kolekcijos ir įrašai

Duomenys gyvena kolekcijose — pavadintose įrašų grupėse, tokiose kaip tasks, bookings ar posts. Schemos apibrėžti nereikia: kolekcija sukuriama, kai į ją įrašai pirmą kartą, o kiekvienas įrašas yra paprastas objektas su tais laukais, kuriuos jam suteiki.

js
const task = await m77.db.create('tasks', { title: 'Write launch post', done: false });
// -> { id, title, done, createdAt, updatedAt, ownerId }

builder77 automatiškai prideda id, createdAt, updatedAt ir ownerId. ownerId nustatomas kaip prisijungęs programėlės naudotojas, jei toks yra, — tai tampa svarbu toliau aprašytiems leidimams.

Duomenų skaitymas: list, get ir count

js
const open = await m77.db.list('tasks', {
  where: { done: false },   // exact-match filter
  sort: '-createdAt',       // '-' = descending
  limit: 50                 // up to 500
});

const one = await m77.db.get('tasks', id);          // record or null
const doneCount = await m77.db.count('tasks', { where: { done: true } });

where lygina laukus pagal tikslų atitikmenį, o to užtenka daugumai programėlių poreikių: būsenos filtrams, kategorijoms, tėvinio įrašo ID susijusiems įrašams. Paieškai rašant nedideliame sąraše įprasta įkelti įrašus ir filtruoti juos naršyklėje.

Atnaujinimas ir trynimas

js
await m77.db.update('tasks', id, { done: true });   // shallow merge
await m77.db.remove('tasks', id);

update sulieja tavo perduotus laukus su esamu įrašu, todėl reikia siųsti tik tai, kas pasikeitė.

Kiekvieno naudotojo duomenys su mine: true

Programėlėse, kuriose kiekvienas žmogus turi savo duomenis — dienoraščiuose, biudžetuose, įpročių sekikliuose, — derink m77.auth su parinktimi mine. Kai naudotojas prisijungęs, mine: true grąžina tik jo sukurtus įrašus.

js
await m77.auth.signIn({ email, password });

const myEntries = await m77.db.list('entries', { mine: true, sort: '-createdAt' });

Integruotas ir antras apsaugos sluoksnis: prisijungusio naudotojo sukurtą įrašą gali atnaujinti ar ištrinti tik tas pats naudotojas. Net jei kas nors užklausą sudarys rankiniu būdu, API atmes įrašų, kurie jam nepriklauso, pakeitimus.

Vieši ir privatūs duomenys trumpai

  • Viešas turinys (meniu patiekalai, tinklaraščio įrašai, produktų sąrašai): skaitymui prisijungti nereikia. Paprašyk builder77 juos užpildyti iš anksto arba pridėk administravimo ekraną jiems tvarkyti ir redaguok juos bet kada skirtuke „Duomenys“.
  • Užpildytos formos (kontaktų formos, laukiančiųjų sąrašai, rezervacijos): sukurti juos gali bet kas; tu juos skaitai skirtuke „Duomenys“.
  • Asmeniniai duomenys (užrašai, sveikatos žurnalai, finansai): reikalauk prisijungimo ir visada teik užklausas su mine: true.

Paprasta taisyklė: viskas, kas yra tavo programėlės priekinės dalies kode, matoma lankytojams, o sąrašus be mine: true gali perskaityti kiekvienas, turintis programėlės nuorodą. Jei duomenys asmeniniai, paslėpk juos už prisijungimo ir mine. Jei visa programėlė skirta tik tau ar tavo komandai, nustatymuose įjunk Privati programėlė.

Skirtukas „Duomenys“

Kūrėjo aplinkoje skirtuke Duomenys gali naršyti kiekvieną kolekciją, redaguoti ar trinti įrašus, matyti savo programėlės naudotojus ir peržiūrėti įkeltus failus. Tai greičiausias būdas ištaisyti rašybos klaidą turinyje, išvalyti bandomuosius įrašus ar patikrinti, ar forma išsaugo tai, ko tikiesi.

Tie patys duomenys iš Flutter ir kitų klientų

Žiniatinklio SDK yra plonas sluoksnis virš REST API, kurį naudoja ir Flutter eksportai. Tai reiškia, kad bet kuris klientas gali skaityti ir rašyti tas pačias kolekcijas:

http
GET  /api/runtime/<projectId>/db/tasks?where={"done":false}&sort=-createdAt&limit=100
POST /api/runtime/<projectId>/db/tasks   { "data": { "title": "Hi" } }
Authorization: Bearer <appUserToken>   (optional, from /auth/signin)

Programėlės naudotojų prieigos raktai galioja tik vienam projektui, todėl vienos programėlės rakto negalima panaudoti kitai. Duomenų bazės skaitymai ir rašymai kreditų nenaudoja — kurk tiek duomenų reikalaujančią programėlę, kiek nori.

Užklausos apie duomenis

Visa tai gali valdyti paprasta kalba: „saugok išlaidas su suma, kategorija ir data; kiekvienas naudotojas mato tik savo“ arba „pridėk rezervacijoms būsenos lauką ir filtrą laukiančioms“. DI išmano SDK, todėl paprastai užtenka aprašyti duomenų modelį.

Pasiruošęs tai sukurti?

Aprašyk savo idėją ir maždaug per minutę gauk veikiančią pirmąją versiją. Pradėti galima nemokamai, banko kortelės nereikia.