Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Swift
Code

Serverless логика с Realm Functions

by
Difficulty:IntermediateLength:MediumLanguages:

Russian (Pусский) translation by Ilya Nikov (you can also view the original English article)

Final product image
What You'll Be Creating

В предыдущих уроках мы рассмотрели платформу Realm, а также базу данных Realm для iOS на устройстве. В этой статье вы узнали, как синхронизировать данные приложения локально, а также в облаке. Хотя это представляет собой полное решение для многих разработчиков, вы можете захотеть сделать больше, чем просто сохранить данные, но также запустить логику на стороне сервера.

В этом году Realm добавила возможность создавать serverless функции через Realm Functions, что позволяет разработчикам создавать логику программы для автоматического реагирования на события базы данных.

Realm’s serverless вычислительное решение сродни Amazon AWS Lambda или Microsoft Azure Functions. Как и они, он позволяет запускать код без необходимости создавать собственные серверы. Ваши функции будут запущены на Realm Object Server. Функции Realm предоставляют возможность писать функции, работающие на JavaScript, которые реагируют на живые объекты Realm и управлять ими через интерфейс панели управления Realm.

Независимо от того, нужно ли реагировать на живые объекты и отправлять push-уведомления пользователям или запускать вызов API другому SDK стороннего поставщика, например Twilio, реагирующие события через функции позволяют вам реагировать на сервере. В этом уроке вы узнаете, как работать с функциями Realm.

Цели этого учебника

В этом уроке вы узнаете, как реализовать и работать с функциями Realm, чтобы создать функцию триггера, которая обновит значение в нашей облачной базе данных. Это будет надуманный пример, но вы можете применить это знание к более практичным проблемам.

В этом уроке мы рассмотрим следующее:

  • обработка событий и функции
  • причины использования функций
  • создание функций с панели инструментов
  • интегрируя функции в ваш сервер объектов Realm.

Предполагаемые знания

В этом учебнике предполагается, что вы прочитали два предыдущих учебника этой серии. Поскольку функции Realm написаны на JavaScript, вы также должны иметь базовое понимание этого языка, хотя вам не обязательно быть экспертом.

Если вы хотите создать праймер в Realm, ознакомьтесь с предыдущими сообщениями в этой серии.

Что такое Realm Functions?

В предыдущих уроках вы использовали Realm для создания хранилища на устройстве, а также для синхронизации пользовательских данных с облаком, но одно заметное отсутствие заключалось в умении работать с серверами данных. Иногда нам нужна серверная логика, которая может реагировать на изменения данных, так же, как триггеры работают в традиционных базах данных.

Именно здесь происходят Realm Functions, обеспечивающие способность предвидеть и реагировать на изменения в Realm. Функции Realm также позволяют командам создавать серверную логику, не нуждаясь при этом в специализированном бэк-енд разработчике, создавая платформу Realm с минимальной конфигурацией и не беспокоясь о сериализации или добавлении дополнительных конечных точек на сервер.

Realm Functions - наш «серверный» уровень логики приложений, в котором вы можете легко создавать серверные функции с простым JavaScript, не прибегая к помощи бэкэнд-команды. Когда синхронизированные данные изменяются, ваша пользовательская логика выполняется, что позволяет разработчикам мобильных устройств быстро и просто создавать и отправлять сложные серверные функции. - Realm.io

Обработка событий в Realm

Функции обрабатывают события через сервер объектов Realm с помощью функций Node.js, которые затем вызывается глобальным API-интерфейсом RealM Object Server, который передает объекты changeEvent(), вызванные логикой функций. Это достигается с помощью экземпляра Node.js на стороне сервера, который подключается к глобальному API-интерфейсу прослушивания событий, что позволяет разработчикам наблюдать за изменениями в пределах Realms и фильтрацией для определенных Realms, которые соответствуют определенному шаблону Regex.

Поэтому разработчики могут прослушивать конкретные и уникальные пути Realm, которые могут быть настроены для определенных пользователей, а затем реагировать на изменения этого пользователя. Затем глобальный прослушиватель событий вызывает уведомление для функций на стороне сервера, чтобы реагировать на изменения.

Пакет уведомлений информирует обработчики событий о виртуальном пути обновленного Realm, а также об объекте Realm или объектах, которые были изменены. Они разбиваются на имена классов и индексов объектов, измененные во время последней транзакции синхронизации.

Создание функции управления событиями Realm включает в себя создание небольшого приложения Node.js с определением приложения и его зависимостей в файле package.json. Дополнительные сведения о создании обработчиков событий в Realm Object Server см. в руководстве по управлению событиями при обработке событий.

Затем мы начнем настройку нашей первой функции Realm.

Настройка вашей первой функции

Для целей этого руководства мы сосредоточимся на примере простой функции, чтобы проиллюстрировать, как создавать и интегрировать функции в платформу Realm Mobile. Предполагается, что у вас уже есть существующее приложение из предыдущих руководств, размещенное на вашем сервере объектов Realm.

Сначала откройте панель инструментов Realm Object Server и выберите вкладку «Функции». На этой странице Realm уже предоставляет вам примерную функцию, которую вы можете включить и запустить быстро, сначала назвав функцию, выбрав, к какому Realm применить ее (наше рабочее приложение в этом случае RealmDoApp), а затем запустить событие функции прослушиватель, нажав кнопку «Пуск».

Starting a function event listener

Продолжайте и выполняйте это при запуске приложения iOS в Xcode Simulator и создайте новую задачу напоминания. Вы заметите, что журнал ниже заполняет сообщения журнала для разных состояний вашего приложения.

log messages showing the different states of your app

Давайте рассмотрим пример кода более подробно:

Функция запускается, выставляя метод обработки событий через экспорт. Функции обработки событий принимают changeEvent в качестве параметра. Эта простая функция просто выводит changeEvent.path на консоль, демонстрируя то, что точно изменяется.

Затем мы получаем ссылку на измененный realm через объект changeEvent, а затем получаем список объектов и изменений. Мы выводим запись о всех вставках, изменениях и удалениях на консоли.

Расширение простой функции

Эта функция-образец не является особо функциональной, но для того, чтобы укрепить наше понимание того, что можно делать с функциями, давайте возьмем эту функцию и настроим ее.

Поскольку это приложение Node.js, мы можем работать со сторонними библиотеками Node.js. В этом случае мы будем использовать библиотеку под названием libphonenumber и модифицируем нашу функцию для анализа записей в виде телефонных номеров с правильным форматированием и международным префиксом.

Прежде чем вводить приведенный ниже код, установите стороннюю библиотеку, введя следующее на сервер объектов Realm:

npm install google-libphonenumber --save

Нажмите Stop в консоли, чтобы остановить работу функции, а затем измените функцию следующим кодом:

В приведенном выше коде мы создаем ссылку на экземпляр сторонней библиотеки google-libphonenumber, а затем получаем список объектов напоминания через realm.objects("Reminder"). Затем мы получаем ссылку на последнее напоминание в массиве, так как оно является самым последним, а затем преобразуем его данные в номер телефона.

Мы выведем результат этого на консоль, прежде чем на самом деле записать отформатированную версию данных обратно в область, используя:

Дайте функции ещё одну попутку, перезапустив ее, и в iOS Simulator введите номер телефона, который не отформатирован достаточно корректно, скажем 17187998177. Через консольный журнал и конечный результат в приложении она должна правильно отформатировать номер, используя стороннюю библиотеку с интервалом и международным префиксом следующим образом:

+1 718-799 8177

То, что мы видим здесь, - бессерверный способ запуска события для изменения (вставки) и форматирования данных до его сохранения в облаке.

Указание регулярных выражений URL-адреса в реальном времени

В нашей функции мы просто указали на конкретное приложение Realm, RealmDo, но вы также можете определить регулярное выражение (regex), чтобы более однозначно различать, какие пути запускают функцию. Чтобы соответствовать всем Realms, вы должны использовать .* (что соответствует нулю или большему количеству символов). Или вы можете сопоставить принадлежащее пользователю Realm с помощью ^/([0-9a-f]+)/Reminder$.

Заключение

Функции Realm создают новые возможности для платформы Realm Mobile Platform, предоставляя простой и элегантный способ добавления серверной логики, способной реагировать на изменения в Realms. Через Dashboard разработчики могут создавать функции, которые реагируют на изменения во всех Realms или только на определенных путях.

В этом уроке вы немного узнали о том, что такое Realm Functions, и как они обеспечивают целостную среду разработки не только для создания и хранения данных, но и для добавления в нее логики. Мы расширили функцию по умолчанию и вызвали стороннюю библиотеку JavaScript для преобразования телефонных номеров.

Хотя наш пример немного надуман, он дает вам представление о том, что вы можете сделать, чтобы управлять объектами Realm по мере их вставки, изменения или удаления. Это похоже на то, как используются традиционные триггеры баз данных.

Пока вы здесь, взгляните на некоторые из наших других статей по разработке iOS здесь, на Envato Tuts +.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.