Dans les tutoriels précédents, nous avons examiné la plate-forme Realm ainsi que la base de données Realm sur périphérique pour iOS. Dans cet article, vous avez appris à synchroniser les données de votre application localement et dans le cloud. Bien que cela constitue une solution complète pour de nombreux développeurs, vous souhaiterez peut-être faire davantage que simplement conserver des données, mais également exécuter une logique côté serveur..
Cette année, Realm a ajouté la possibilité de créer une fonctionnalité sans serveur via des fonctions de domaine, permettant aux développeurs de créer une logique de programme pour répondre automatiquement aux événements de base de données..
La solution informatique sans serveur de Realm s'apparente à AWS Lambda d'Amazon ou aux fonctions Azure de Microsoft. Comme eux, il vous permet d’exécuter du code sans avoir à provisionner vos propres serveurs. Vos fonctions seront exécutées sur le serveur d'objets Realm. Les fonctions de domaine donnent la possibilité d'écrire des fonctions basées sur JavaScript qui réagissent aux objets réels de Royaume et les gèrent via l'interface de tableau de bord de Royaume..
Que vous deviez réagir aux objets vivants et envoyer une notification push aux utilisateurs ou déclencher un appel d'API à un autre kit de développement logiciel tiers tel que Twilio, les événements réactifs via des fonctions vous permettent de réagir et de réagir côté serveur. Dans ce tutoriel, vous allez apprendre à travailler avec les fonctions du royaume..
Dans ce didacticiel, vous apprendrez à mettre en œuvre et à utiliser les fonctions de domaine pour créer un exemple de fonction de déclencheur qui mettra à jour une valeur de notre base de données cloud. Ce sera un exemple artificiel, mais vous pouvez appliquer cette connaissance à des problèmes plus pratiques.
Dans ce tutoriel, nous allons couvrir les points suivants:
Ce didacticiel suppose que vous avez lu les deux didacticiels précédents de cette série. Comme les fonctions de domaine sont écrites en JavaScript, vous devez également avoir une compréhension de base de cette langue, bien que vous n’ayez pas besoin d’être un expert..
Si vous voulez un aperçu de Realm, consultez les précédents articles de cette série..
Dans les didacticiels précédents, vous avez utilisé Realm pour créer une persistance sur le périphérique, ainsi que pour synchroniser les données utilisateur avec le cloud, mais l'un des problèmes notables réside dans la capacité de travailler intelligemment avec les données côté serveur. Nous avons parfois besoin d'une logique côté serveur capable de réagir aux modifications des données, de la même manière que les déclencheurs fonctionnent dans les bases de données traditionnelles..
C’est là que les fonctions de domaine entrent en jeu, offrant la possibilité d’anticiper les changements dans les domaines et d’y réagir. Realm Functions a également permis aux équipes de créer une logique côté serveur sans recourir à un développeur back-end dédié, en s'appuyant sur la plate-forme Realm avec une configuration minimale et sans avoir à se soucier de la sérialisation ni de l'ajout de points de terminaison au serveur..
Realm Functions est notre couche logique d'application «sans serveur», dans laquelle vous pouvez facilement créer des fonctionnalités côté serveur avec du JavaScript simple, sans équipe d'arrière-plan. Lorsque les données synchronisées changent, votre logique personnalisée s'exécute, ce qui permet aux développeurs mobiles de créer et de fournir facilement des fonctionnalités sophistiquées dépendant du serveur. - Realm.io
Les fonctions gèrent les événements via le serveur d'objets Realm avec les fonctions Node.js, qui sont ensuite appelées par l'API d'écoute globale du serveur d'objets Realm, qui passe changeEvent ()
objets déclenchés via la logique de fonction. Cette opération est réalisée via l'instance Node.js côté serveur, qui se connecte à l'API d'écouteur d'événements globale, permettant aux développeurs d'observer les modifications dans les domaines et de filtrer les domaines spécifiques correspondant à un modèle Regex spécifique..
Les développeurs peuvent donc écouter des chemins de domaine spécifiques et uniques pouvant être configurés pour des utilisateurs spécifiques, puis réagir aux modifications de ces utilisateurs. L’écouteur d’événements global déclenche ensuite une notification pour que les fonctions côté serveur répondent aux modifications..
Le paquet de notification informe les gestionnaires d'événements du chemin virtuel du royaume mis à jour, ainsi que de l'objet ou des objets qui ont été modifiés. Ceux-ci sont ventilés par nom de classe et index d’objet modifiés lors de la dernière transaction de synchronisation..
La création d’une fonction de gestion d’événements implique la création d’une petite application Node.js, avec un package.json
définir l'application et ses dépendances. Pour plus d’informations sur la création de gestionnaires d’événements dans Realm Object Server, reportez-vous aux Consignes relatives au royaume sur la gestion des événements..
Ensuite, nous allons commencer à configurer notre première fonction de royaume.
Pour les besoins de ce didacticiel, nous allons nous concentrer sur un exemple de fonction simple pour illustrer la manière dont les fonctions sont créées et intégrées à la plate-forme mobile Realm. Il est supposé que vous disposez déjà de l'application existante des didacticiels précédents, hébergée sur votre serveur d'objets Realm et en cours d'exécution, avant de poursuivre la suite de ce didacticiel..
Tout d’abord, dirigez-vous vers le tableau de bord Realm Object Server et sélectionnez le Les fonctions languette. Sur cette page, Realm vous fournit déjà un exemple de fonction que vous pouvez activer et exécuter rapidement en nommant d'abord la fonction, en choisissant le domaine auquel vous souhaitez l'appliquer (notre application fonctionnelle dans ce cas, RealmDoApp), puis en démarrant l'événement function. auditeur en appuyant sur le Début bouton.
Continuez ainsi, tout en exécutant votre application iOS dans Xcode Simulator, et créez une nouvelle tâche de rappel. Vous remarquerez que le journal ci-dessous est rempli de messages de journal pour les différents états de votre application..
Jetons un coup d'oeil à l'exemple de code plus en détail:
console.log ("Fonction de démarrage"); // ajoute votre code d'initialisation ici module.exports = function (changeEvent) // le code du gestionnaire d'événements va ici console.log ("Modifications du domaine sur:", changeEvent.path); var realm = changeEvent.realm; for (var className dans changeEvent.changes) var changes = changeEvent.changes [className]; objets var = realm.objects (className); console.log ("Modifications du modèle:", nom de classe); for (laissez pos of changes.insertions) console.log ("- objet inséré à la position", pos, ":", objets [pos]); pour (laissez pos de changes.modifications) console.log ("- objet modifié à la position", pos, ":", objets [pos]); pour (laissez pos de changes.deletions) console.log ("- objet supprimé à la position", pos); console.log (""); ;
La fonction commence par exposer la méthode de traitement des événements lors des exportations. Les fonctions de gestion des événements prennent une changeEvent
comme paramètre. Cette fonction simple ne fait que sortir le changeEvent.path
à la console, montrant ce qui est changé exactement.
Nous obtenons ensuite une référence au domaine modifié à travers le changeEvent
objet, puis obtenir une liste d'objets et de modifications. Nous produisons un enregistrement de toutes les insertions, modifications et suppressions sur la console.
Cet exemple de fonction n'est pas vraiment fonctionnel, mais pour renforcer notre compréhension de ce qu'il est possible de faire avec les fonctions, allons un peu plus loin et personnalisons-le..
Comme il s'agit d'une application Node.js, nous pouvons travailler avec des bibliothèques tierces Node.js. Dans ce cas, nous utiliserons une bibliothèque appelée libphonenumber et modifierons notre fonction pour analyser les entrées sous forme de numéros de téléphone, avec le formatage correct et le préfixe international..
Avant d'entrer le code ci-dessous, installez la bibliothèque tierce en entrant les informations suivantes dans le serveur d'objets du royaume:
npm installer google-libphonenumber --save
presse Arrêtez dans la console pour arrêter l'exécution de la fonction, puis modifiez-la avec le code suivant:
var PNF = require ('google-libphonenumber'). PhoneNumberFormat; var phoneUtil = require ('google-libphonenumber'). PhoneNumberUtil.getInstance (); console.log ("Fonction de démarrage"); // ajoute votre code d'initialisation ici module.exports = function (change_event) var realm = change_event.realm; var changes = change_event.changes.Reminder; var taskIndexes = changes.modifications; console.log ("Changement détecté:" + changements + "pour les index de tâche", index de tâche); // Obtient les objets de tâches pour traiter var rappelers = realm.objects ("Reminder"); var rappel = rappels [rappels.length - 1]; // Récupère l'objet de tâche du royaume avec l'index console.log ("Nouvelle tâche reçue:" + change_event.path); console.log ("Rappel de tâche", rappel); // get date from wit.ai // probablement utiliser cette https://wit.ai/docs/http/20160526#get--message-link // node-wit: https://github.com/wit-ai / node-wit var numéroPhone = phoneUtil.parse (rappel.nom, 'US'); if (! phoneNumber) console.log ("Pas un numéro de téléphone"); revenir; console.log ("Téléphone converti en", phoneUtil.format (phoneNumber, PNF.INTERNATIONAL)); realm.write (function () reminder.name = phoneUtil.format (phoneNumber, PNF.INTERNATIONAL);); ;
Dans le code ci-dessus, nous créons une référence d'instance à la bibliothèque tierce google-libphonenumber
, puis obtenir une liste des objets de rappel via realm.objects ("Rappel")
. Ensuite, nous obtenons une référence au dernier rappel du tableau, car il s’agit du plus récent, puis nous convertissons ses données en un numéro de téléphone..
Nous publierons le résultat de cela sur la console avant d'écrire la version formatée des données dans le royaume, via:
realm.write (function () reminder.name = phoneUtil.format (phoneNumber, PNF.INTERNATIONAL);); ;
Donnez à la fonction un autre tour en la redémarrant et, dans le simulateur iOS, entrez un numéro de téléphone mal formaté, par exemple. 17187998177. À travers le journal de la console et la sortie finale sur l'application, le numéro doit être correctement formaté à l'aide de la bibliothèque tierce, avec l'espacement et le préfixe international comme suit:
+1 718-799 8177
Ce que nous voyons ici est une manière sans serveur de déclencher un événement pour une modification (insertion) et de formater les données avant de les conserver dans le cloud..
Dans notre fonction de tableau de bord, nous avons simplement indiqué une application de royaume spécifique, RealmDo, mais vous pouvez également définir une expression régulière (regex) pour distinguer de manière plus précise les chemins qui déclenchent la fonction. Pour correspondre à tous les royaumes, vous utiliseriez .*
(qui correspond à zéro ou plus de n'importe quel caractère). Ou vous pouvez associer un royaume appartenant à un utilisateur avec ^ / ([0-9a-f] +) / Rappel $
.
Les fonctions de domaine créent de nouvelles possibilités pour la plate-forme mobile de royaume en offrant un moyen simple et élégant d’ajouter une logique sans serveur capable de réagir aux modifications des domaines. À l'aide du tableau de bord, les développeurs peuvent créer des fonctions qui répondent aux changements dans tous les domaines ou uniquement sur des chemins spécifiques..
Dans ce didacticiel, vous en apprendrez un peu plus sur ce que sont les fonctions de domaine et sur la manière dont elles fournissent un environnement de développement global, non seulement pour la création et la persistance de données, mais également pour l’ajout de logique à ce dernier. Nous avons étendu la fonction par défaut et appelé une bibliothèque JavaScript tierce pour convertir les numéros de téléphone..
Bien que notre exemple soit un peu artificiel, il vous donne une idée de ce que vous pouvez faire pour gérer les objets Realm lorsqu'ils sont insérés, modifiés ou supprimés. Ceci est similaire à la façon dont les bases de données traditionnelles exploitent les déclencheurs, uniquement sans serveur et avec un code minimal, comme vous pouvez le constater..
Pendant que vous êtes ici, jetez un œil à certains de nos autres articles sur le développement iOS ici sur Envato Tuts.+.