Visi raksti
Izstrādātājiem·7 min lasīšanai

m77 datubāzes lietošana: kolekcijas, filtri un katra lietotāja dati

Katrai builder77 lietotnei ir iebūvēta datubāze. Lūk, kā darbojas kolekcijas, filtri, kārtošana un katra lietotāja ieraksti — un kā saglabāt privātus datus privātus.

77
builder77 komanda
builder77.com

Lielākoties tev datubāzei tieši nemaz nav jāpieskaras — tu apraksti savu lietotni, un builder77 uzraksta kodu, kas glabā un nolasa datus. Taču, zinot, kā tā darbojas, tu rakstīsi labākas uzvednes, ātrāk atradīsi kļūdas un pieņemsi labus lēmumus par privātumu. Lūk, ekskursija pa m77.db.

Kolekcijas un ieraksti

Dati glabājas kolekcijās — nosauktās ierakstu grupās, piemēram, tasks, bookings vai posts. Shēma nav jādefinē: kolekcija tiek izveidota, kad tajā ieraksti pirmo reizi, un katrs ieraksts ir parasts objekts ar tiem laukiem, kurus tam piešķir.

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

builder77 automātiski pievieno id, createdAt, updatedAt un ownerId. ownerId tiek iestatīts uz pieteikušos lietotnes lietotāju, ja tāds ir, — tas kļūst svarīgi tālāk aprakstītajām atļaujām.

Datu nolasīšana: list, get un 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 salīdzina laukus pēc precīzas atbilstības, un tas sedz lielāko daļu lietotņu vajadzību: statusa filtrus, kategorijas, vecākā ieraksta ID saistītiem ierakstiem. Meklēšanai rakstīšanas laikā nelielā sarakstā parasti ielādē ierakstus un filtrē tos pārlūkā.

Atjaunināšana un dzēšana

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

update apvieno nodotos laukus ar esošo ierakstu, tāpēc jāsūta tikai tas, kas mainījies.

Katra lietotāja dati ar mine: true

Lietotnēm, kurās katram cilvēkam ir savi dati — dienasgrāmatām, budžetiem, ieradumu izsekotājiem —, apvieno m77.auth ar opciju mine. Kad lietotājs ir pieteicies, mine: true atgriež tikai viņa izveidotos ierakstus.

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

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

Ir iebūvēts arī otrs aizsardzības slānis: ierakstu, ko izveidojis pieteicies lietotājs, var atjaunināt vai dzēst tikai tas pats lietotājs. Pat ja kāds pieprasījumu sastāda ar roku, API noraida izmaiņas ierakstos, kas viņam nepieder.

Publiski un privāti dati: īss ceļvedis

  • Publisks saturs (ēdienkartes pozīcijas, bloga raksti, produktu saraksti): lasīšanai pieteikšanās nav vajadzīga. Palūdz builder77 tos iepriekš aizpildīt vai pievieno administrēšanas ekrānu to pārvaldībai, un rediģē tos jebkurā laikā cilnē Dati.
  • Iesniegumi (kontaktformas, gaidīšanas saraksti, rezervācijas): ikviens var tos izveidot; tu tos lasi cilnē Dati.
  • Personas dati (piezīmes, veselības žurnāli, finanses): pieprasi pieteikšanos un vaicā vienmēr ar mine: true.

Īkšķa likums: viss tavas lietotnes priekšgala kodā ir redzams apmeklētājiem, un sarakstus bez mine: true var nolasīt ikviens, kam ir lietotnes saite. Ja dati ir personiski, novieto tos aiz pieteikšanās un mine. Ja visa lietotne ir tikai tev vai tavai komandai, iestatījumos ieslēdz Privāta lietotne.

Cilne Dati

Redaktora cilnē Dati vari pārlūkot katru kolekciju, rediģēt vai dzēst ierakstus, redzēt savas lietotnes lietotājus un pārskatīt augšupielādētos failus. Tas ir ātrākais veids, kā izlabot drukas kļūdu saturā, iztīrīt testa ierakstus vai pārbaudīt, vai forma saglabā to, ko gaidi.

Tie paši dati no Flutter un citiem klientiem

Tīmekļa SDK ir plāns slānis virs REST API, ko izmanto arī Flutter eksporti. Tas nozīmē, ka jebkurš klients var lasīt un rakstīt tās pašas 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)

Lietotnes lietotāju tokeni ir piesaistīti vienam projektam, tāpēc vienas lietotnes tokenu nevar izmantot pret citu. Datubāzes lasīšana un rakstīšana kredītus nepatērē — veido tik datu ietilpīgu lietotni, cik vēlies.

Uzvednes par datiem

To visu vari vadīt vienkāršā valodā: „glabā izdevumus ar summu, kategoriju un datumu; katrs lietotājs redz tikai savus“ vai „pievieno rezervācijām statusa lauku un filtru gaidošajām“. MI pārzina SDK, tāpēc parasti pietiek aprakstīt datu modeli.

Gatavs to izveidot?

Apraksti savu ideju un saņem strādājošu pirmo versiju aptuveni minūtes laikā. Sākt var bez maksas, bankas karte nav vajadzīga.