În tutorialele anterioare, am aruncat o privire la platforma Realm, precum și la baza de date Realm pentru iOS. În acest post, ați învățat cum să sincronizați datele aplicației la nivel local, precum și în cloud. În timp ce aceasta prezintă o soluție completă pentru mulți dezvoltatori, poate doriți să faceți mai mult decât doar persistența datelor, dar și să rulați logica de pe server.
În acest an, Realm a adăugat capacitatea de a crea funcționalități fără server prin Realm Functions, permițând dezvoltatorilor să creeze logica programului pentru a răspunde automat la evenimentele bazei de date.
Soluția de calcul a serverului Realm este similară cu AWS Lambda sau funcțiile Azure ale Microsoft. Ca acestea, vă permite să rulați codul fără a trebui să furnizați propriile servere. Funcțiile dvs. vor fi difuzate pe Realm Object Server. Funcțiile Realm oferă șansa de a scrie funcții bazate pe JavaScript care reacționează la obiectele live ale Realm-ului și le gestionează prin intermediul interfeței tabloului de bord Realm.
Indiferent dacă trebuie să reacționați la obiectele vii și să trimiteți o notificare push către utilizatori sau să declanșați un apel API către un alt furnizor terț, cum ar fi Twilio, evenimentele reactive prin intermediul funcțiilor vă permit să răspundeți și să reacționați la server. În acest tutorial, veți învăța cum să lucrați cu funcțiile Realm.
În acest tutorial, veți învăța cum să implementați și să lucrați cu funcțiile Realm pentru a crea o funcție de declanșare a eșantionului care va actualiza o valoare în baza noastră de date cloud. Acesta va fi un exemplu controversat, dar puteți aplica aceste cunoștințe la mai multe probleme practice.
În acest tutorial, vom acoperi următoarele:
Acest tutorial presupune că ați citit ultimele două tutoriale din această serie. Deoarece funcțiile Realm sunt scrise în JavaScript, ar trebui să aveți și o înțelegere de bază a acelei limbi, deși nu trebuie să fii expert.
Dacă doriți un grund pe Realm, verificați posturile anterioare din această serie.
În tutorialele anterioare ați folosit Realm pentru a crea persistența pe dispozitive, precum și pentru a sincroniza datele de utilizator cu cloud-ul, dar o absență notabilă a fost în capacitatea de a lucra inteligent cu serverul de date. Cu alte cuvinte, avem nevoie de o logică a serverului care să răspundă modificărilor datelor, în același mod în care declanșatorii funcționează în bazele de date tradiționale.
Aici intră Funcțiile Realm, oferind posibilitatea de a anticipa și de a reacționa la schimbările din Tărâmuri. Realm Functions a împuternicit echipele să creeze o logică a serverului fără a avea nevoie de un dezvoltator dedicat pentru back-end, construind pe platforma Realm cu o configurație minimă și fără a fi nevoiți să vă faceți griji în legătură cu serializarea sau adăugarea unor puncte suplimentare către server.
Funcțiile Realm este stratul nostru de aplicații "fără server", în care puteți construi cu ușurință funcții de pe server cu JavaScript simplu, fără echipă de backend. Când se schimbă date sincronizate, execută logica ta personalizată - făcând-o rapid și ușor pentru dezvoltatorii de dispozitive mobile să construiască și să livreze caracteristici sofisticate dependente de server. - Realm.io
Funcțiile gestionează evenimentele prin intermediul Realm Object Server cu funcții Node.js, care ulterior sunt chemați de API-ul global de ascultare a Realm Object Server, care trece changeEvent ()
obiecte declanșate prin logica funcțiilor. Acest lucru se realizează prin intermediul instanței Node.js de pe server, care se conectează la API-ul ascultătorului evenimentelor globale, permițând dezvoltatorilor să observe schimbările din cadrul regiunilor și filtrarea pentru anumite regiuni care se potrivesc cu un model specific Regex.
Prin urmare, dezvoltatorii pot asculta căi specifice și unice ale Realm care pot fi configurate pentru anumiți utilizatori și apoi reacționează la modificările utilizatorului. Apoi, ascultătorul evenimentelor globale declanșează o notificare pentru funcțiile de pe server pentru a răspunde la schimbări.
Pachetul de notificare informează gestionarii evenimentului despre calea virtuală a Realmului actualizat, precum și despre obiectul Realm sau obiectele care s-au schimbat. Acestea sunt defalcate în funcție de numele de clasă și de indicii de obiect modificați în timpul ultimei tranzacții de sincronizare.
Crearea unei funcții Realm Handling implică crearea unei mici aplicații Node.js, cu un package.json
pentru a defini aplicația și dependențele acesteia. Pentru mai multe informații despre crearea programatorilor de evenimente în Realm Object Server, consultați Regulile Realmului privind manipularea evenimentelor.
Apoi, vom începe setarea primei noastre funcții Realm.
În scopul acestui tutorial, ne vom concentra pe un exemplu de funcție simplă pentru a ilustra modul în care funcțiile sunt create și integrate în Realm Mobile Platform. Se presupune că aveți deja aplicația existentă din tutorialele anterioare, găzduite pe Realm Object Server și care rulează, înainte de a continua cu restul tutorialului.
Mai întâi, mergeți la tabloul de bord al serverului Realm Object și selectați funcţii tab. Pe această pagină, Realm vă oferă deja o funcție de probă pe care o puteți activa și o executa rapid, denumind mai întâi funcția, selectând care Realm să o aplicăm (aplicația noastră de lucru în acest caz, RealmDoApp) și apoi pornind evenimentul funcției ascultător apăsând pe start buton.
Continuați și faceți acest lucru, în timp ce difuzați aplicația iOS în Simulatorul Xcode și creați o nouă sarcină de memento. Veți observa că jurnalul de mai jos este populat cu mesaje de jurnal pentru diferitele stări ale aplicației dvs..
Să aruncăm o privire la exemplul de cod în mai multe detalii:
console.log ("Funcția de pornire"); // adăugați aici codul de inițializare modul.exports = function (changeEvent) // codul handlerului de evenimente merge aici console.log ("Schimbări în domeniul:", changeEvent.path); var realm = changeEvent.realm; pentru (var className în changeEvent.changes) var changes = changeEvent.changes [className]; var obiecte = realm.objects (className); console.log ("Modificări în model:", className); pentru (lăsăm pos de modificări.inserții) console.log ("- obiect introdus în poziție", pos, ":", obiecte [pos]); pentru (permiteți modificarea modificărilor) console.log ("- obiect modificat la poziție", pos, ":", obiecte [pos]); pentru (permite trimiterea de modificări.deleții) console.log ("- obiect șters la poziția", pos); console.log (""); ;
Funcția începe prin expunerea metodei de predare a evenimentelor prin exporturi. Funcțiile de gestionare a evenimentelor iau a changeEvent
ca parametru al acestora. Această funcție simplă trimite doar changeEvent.path
la consola, arătând exact ce se schimbă.
Apoi vom face o referire la tărâmul schimbat prin changeEvent
obiect, apoi obțineți o listă de obiecte și modificări. Efectuăm o înregistrare a tuturor inserțiilor, modificărilor și ștergerilor în consola.
Această funcție eșantion nu este cu adevărat funcțională, dar pentru a ne consolida înțelegerea a ceea ce este posibil să facem cu funcțiile, să luăm funcția un pic mai departe și să o personalizăm.
Deoarece este o aplicație Node.js, putem colabora cu bibliotecile Node.js ale terților. În acest caz, vom folosi o bibliotecă numită libphonenumber și vom modifica funcția noastră pentru a analiza intrările ca numere de telefon, cu formatarea corectă și prefixul internațional.
Înainte de a introduce codul de mai jos, instalați biblioteca unei terțe părți introducând următoarele în serverul de obiecte Realm:
npm instalează google-libphonenumber -save
presa Stop în consola pentru a opri funcționarea funcției, apoi modificați funcția cu următorul cod:
var PNF = necesită ('google-libphonenumber') TelefonNumberFormat; var phoneUtil = necesită ('google-libphonenumber'). TelefonNumberUtil.getInstance (); console.log ("Funcția de pornire"); // adăugați codul de inițializare aici modul.exports = function (change_event) var realm = change_event.realm; var modificări = change_event.changes.Reminder; var taskIndexes = changes.modifications; console.log ("Modificat detectat:" + modificări + "pentru taskindexes", taskIndexes); // Obține obiectele de sarcină la procese var reminders = realm.objects ("Reminder"); var memento = memento-uri [reminders.length - 1]; // Returnați obiectul de sarcină din Realm cu indexul console.log ("Noua sarcină primită:" + change_event.path); console.log ("Memento pentru activități", memento); // obțineți data de la wit.ai // utilizați probabil acest https://wit.ai/docs/http/20160526#get--message-link // node-wit: https://github.com/wit-ai / node-wit var număr de telefonNumber = phoneUtil.parse (reminder.name, 'US'); dacă (! phoneNumber) console.log ("Nu este un număr de telefon"); întoarcere; console.log ("Telefonul a fost convertit la", phoneUtil.format (phoneNumber, PNF.INTERNATIONAL)); realm.write (funcția () reminder.name = phoneUtil.format (phoneNumber, PNF.INTERNATIONAL);); ;
În codul de mai sus, creăm o referință de instanță la biblioteca terță parte google-libphonenumber
, și apoi obținerea unei liste de obiecte de memento prin realm.objects ( "Memento")
. Apoi vom face o trimitere la ultimul memento din matrice, deoarece acesta este cel mai recent și apoi convertește datele sale la un număr de telefon.
Vom scoate rezultatul acestei console, înainte de a scrie versiunea formatată a datelor înapoi în regiune, prin:
realm.write (funcția () reminder.name = phoneUtil.format (phoneNumber, PNF.INTERNATIONAL);); ;
Dați funcției o nouă mișcare, reporniți-o, iar în Simulatorul iOS introduceți un număr de telefon care nu este formatat corect, spuneți 17187998177. Prin intermediul jurnalului consolei și al ieșirii finale a aplicației, acesta trebuie formatat corect utilizând biblioteca terță parte, cu spațierea și prefixul internațional, după cum urmează:
+1 718-799 8177
Ceea ce vedem aici este un mod fără server de a declanșa un eveniment pentru o schimbare (inserare) și formatarea datelor înainte de al persista în cloud.
În funcția noastră de tabloul de bord, am arătat pur și simplu o aplicație Realm specifică, RealmDo, dar puteți defini, de asemenea, o expresie regulată (regex) pentru a distinge mai mult ce căi declanșează funcția. Pentru a se potrivi pentru toate Tărâmurile, ai folosi .*
(care se potrivește cu zero sau mai mult de orice caracter). Sau ai putea potrivi cu un Realm cu care ai de-a face ^ / ([0-9A-f] +) / memento $
.
Funcțiile Realm creează noi posibilități pentru platforma Mobile Realm, oferind o modalitate simplă și elegantă de a adăuga o logică fără server care este capabilă să răspundă schimbărilor din Tărâmuri. Prin tabloul de bord, dezvoltatorii pot crea funcții care să răspundă modificărilor din toate domeniile sau doar pe anumite căi.
În acest tutorial, ați învățat un pic despre ceea ce sunt funcțiile Realm și cum oferă un mediu de dezvoltare holistic nu numai pentru crearea și persistența datelor, ci și pentru adăugarea de logică la acesta. Am extins funcția implicită și am sunat o bibliotecă JavaScript a treia parte pentru a converti numerele de telefon.
În timp ce exemplul nostru este puțin controversat, vă oferă o idee despre ceea ce puteți face pentru a gestiona obiectele Realm în timp ce sunt inserate, modificate sau șterse. Acest lucru este la fel ca modul în care bazele de date tradiționale declanșează efectul de levier, dar numai server-less și cu un cod minimal, după cum puteți vedea.
În timp ce sunteți aici, aruncați o privire asupra unora dintre celelalte posturi de dezvoltare iOS de aici pe Envato Tuts+.