Quickstarters
Feature Overview
How to Build a Backend for Kotlin?
39 мин
введение в этом учебном пособии вы научитесь создавать полный бэкенд для android приложения (написанного на kotlin) с использованием back4app мы пройдем через интеграцию основных функций back4app, включая управление базами данных, функции cloud code, rest и graphql api, аутентификацию пользователей и запросы в реальном времени (live queries), чтобы создать безопасный, масштабируемый и надежный бэкенд, который бесшовно взаимодействует с вашим android приложением вы также увидите, как быстрая настройка и интуитивно понятная среда back4app могут значительно сократить время и усилия по сравнению с ручной настройкой серверов и баз данных в процессе вы получите практический опыт с ключевыми функциональными возможностями, включая расширенные функции безопасности, планирование задач с помощью cloud jobs и настройку вебхуков для внешних интеграций к концу этого учебного пособия вы будете хорошо подготовлены, чтобы улучшить эту базовую настройку до готового к производству приложения или легко интегрировать пользовательскую логику и сторонние api по мере необходимости предварительные требования чтобы завершить это учебное пособие, вам потребуется аккаунт back4app и новый проект back4app начало работы с back4app https //www back4app com/docs/get started/new parse app если у вас нет аккаунта, вы можете создать его бесплатно следуйте приведенному выше руководству, чтобы подготовить ваш проект базовая среда разработки android/kotlin убедитесь, что у вас установлена android studio на вашем компьютере вы можете следовать официальной документации по настройке android studio https //developer android com/studio если вы еще не настроили ее минимум android 4 0 или выше в конфигурации gradle вашего приложения обычно вы устанавливаете это в вашем minsdkversion в build gradle вашего модуля знание kotlin и базовых концепций android документация для разработчиков android https //developer android com/docs если вы новичок в android или kotlin, ознакомьтесь с официальной документацией или учебным пособием для начинающих перед началом убедитесь, что у вас есть все эти предварительные условия, прежде чем вы начнете настройка вашего проекта back4app и готовность вашей локальной android среды помогут вам легче следовать инструкциям шаг 1 – настройка проекта back4app создание нового проекта первый шаг в создании вашего android бэкенда на back4app – это создание нового проекта если вы еще не создали его, выполните следующие шаги войдите в свою учетную запись back4app нажмите кнопку “новое приложение” на вашей панели управления back4app дайте вашему приложению имя (например, “android kotlin backend tutorial”) после создания проекта вы увидите его в списке на вашей панели управления back4app этот проект станет основой для всех конфигураций бэкенда, обсуждаемых в этом учебнике подключите parse sdk back4app полагается на платформу parse для управления вашими данными, предоставления функций в реальном времени, обработки аутентификации пользователей и многого другого интеграция вашего android приложения с back4app включает добавление зависимостей parse android sdk в ваши файлы gradle и их инициализацию с учетными данными из вашей панели управления back4app получите ваши ключи parse в вашей панели управления back4app перейдите в раздел “настройки приложения” или “безопасность и ключи”, чтобы найти ваш идентификатор приложения и ключ клиента вы также найдете url сервера parse (обычно в формате https //parseapi back4app com ) добавьте sdk parse в ваши build gradle файлы в вашем корневом build gradle (уровень проекта) allprojects { repositories { maven { url "https //jitpack io" } } } в вашем модульном build gradle (обычно app/build gradle ) dependencies { implementation "com github parse community parse sdk android\ parse\ latest version here" } инициализируйте parse в вашем android приложении создайте пользовательский application класс (например, app kt ) если у вас его еще нет package com example app import android app application import com parse parse import com parse parseinstallation class app application() { override fun oncreate() { super oncreate() // initialize parse parse initialize( parse configuration builder(this) applicationid("your app id") // from back4app dashboard clientkey("your client key") // from back4app dashboard server("https //parseapi back4app com/") build() ) // (optional) track statistics around app opens parseinstallation getcurrentinstallation() saveinbackground() } } далее откройте ваш androidmanifest xml и зарегистрируйте пользовательский application класс \<?xml version="1 0" encoding="utf 8"?> \<manifest xmlns\ android="http //schemas android com/apk/res/android" package="com example app"> \<application android\ name=" app" android\ icon="@mipmap/ic launcher" android\ label="@string/app name" android\ usescleartexttraffic="true" > \</application> \</manifest> завершив этот шаг, вы установили безопасное соединение между вашим android (kotlin) фронтендом и бэкендом back4app все запросы и транзакции данных безопасно маршрутизируются через этот sdk, что снижает сложность ручных вызовов rest или graphql (хотя вы все равно можете использовать их при необходимости) шаг 2 – настройка базы данных сохранение и запрос данных с вашим проектом back4app, настроенным и интегрированным с parse sdk в ваше android приложение, вы теперь можете начинать сохранять и извлекать данные ниже приведен пример на kotlin для создания и получения данных import com parse parseobject import com parse parsequery import com parse savecallback import com parse parseexception // example create a todo item fun createtodoitem(title string, iscompleted boolean) { val todo = parseobject("todo") todo put("title", title) todo put("iscompleted", iscompleted) todo saveinbackground { e parseexception? > if (e == null) { println("todo saved successfully") } else { println("error saving todo ${e localizedmessage}") } } } // example query all todo items fun fetchtodos() { val query = parsequery\<parseobject>("todo") query findinbackground { results, e > if (e == null) { println("fetched todo items ${results size}") } else { println("error fetching todos ${e localizedmessage}") } } } в качестве альтернативы вы можете использовать конечные точки rest api back4app curl x post \\ h "x parse application id your application id" \\ h "x parse rest api key your rest api key" \\ h "content type application/json" \\ d '{"title" "buy groceries", "iscompleted" false}' \\ https //parseapi back4app com/classes/todo back4app также предоставляет интерфейс graphql mutation { createtodo(input { fields { title "clean the house" iscompleted false } }) { todo { objectid title iscompleted } } } эти разнообразные варианты позволяют вам интегрировать операции с данными таким образом, который лучше всего подходит вашему процессу разработки — будь то через parse sdk, rest или graphql проектирование схемы и типы данных по умолчанию parse позволяет создание схемы на лету , но вы также можете определить свои классы и типы данных в панели управления back4app для большего контроля перейдите в раздел “база данных” в вашей панели управления back4app создайте новый класс (например, “todo”) и добавьте соответствующие столбцы, такие как заголовок (string) и iscompleted (boolean) back4app предлагает ai агента, который может помочь вам разработать вашу модель данных откройте ai агента из вашей панели управления приложением или в меню опишите вашу модель данных простым языком (например, “пожалуйста, создайте новое приложение todo на back4app с полной схемой класса ”) позвольте ai агенту создать схему для вас использование ai агента может сэкономить ваше время при настройке архитектуры данных и обеспечить согласованность в вашем приложении реляционные данные если у вас есть реляционные данные — скажем, объект category , который указывает на несколько todo элементов — вы можете использовать pointers или relations в parse например, добавление указателя на category // linking a todo to a category with a pointer fun createtaskforcategory(categoryobjectid string, title string) { val todo = parseobject("todo") val categorypointer = parseobject("category") categorypointer objectid = categoryobjectid todo put("title", title) todo put("category", categorypointer) todo saveinbackground { e > if (e == null) { println("created task with category relationship") } else { println("error creating task ${e localizedmessage}") } } } когда вы выполняете запрос, вы также можете включить данные указателя val query = parsequery getquery\<parseobject>("todo") query include("category") query findinbackground { todos, e > if (e == null) { println("fetched ${todos size} todos with category data") } } этот include("category") вызов извлекает детали категории вместе с каждой задачей todo, делая ваши реляционные данные легко доступными живые запросы для обновлений в реальном времени back4app предоставляет live queries вы можете подписаться на изменения в конкретном классе из вашего android приложения включите live queries в вашей панели управления back4app в разделе server settings инициализируйте подписку на живой запрос в вашем коде import com parse parselivequeryclient import com parse parsequery import com parse subscriptionhandling val parselivequeryclient = parselivequeryclient factory getclient() val parsequery = parsequery\<parseobject>("todo") val subscriptionhandling subscriptionhandling\<parseobject> = parselivequeryclient subscribe(parsequery) subscriptionhandling handleevent(subscriptionhandling event create) { querytodo, todo > println("new todo created ${todo getstring("title")}") } subscriptionhandling handleevent(subscriptionhandling event update) { querytodo, todo > println("todo updated ${todo getstring("title")}") } subscriptionhandling handleevent(subscriptionhandling event delete) { querytodo, todo > println("todo deleted ${todo getstring("title")}") } каждый раз, когда создается, обновляется или удаляется новый todo, клиент получает обратный вызов в реальном времени — идеально для совместных или динамических приложений шаг 3 – применение безопасности с помощью acl и clp механизм безопасности back4app back4app серьезно относится к безопасности, предоставляя списки контроля доступа (acl) и разрешения на уровне класса (clp) эти функции позволяют ограничить, кто может читать или записывать данные на уровне отдельных объектов или классов, обеспечивая, чтобы только авторизованные пользователи могли изменять ваши данные списки контроля доступа (acl) acl применяется к отдельным объектам, чтобы определить, какие пользователи, роли или общественность могут выполнять операции чтения/записи например fun createprivatetodo(title string, owneruser parseobject) { val todo = parseobject("todo") todo put("title", title) // create an acl granting read/write access only to the owner val acl = com parse parseacl(owneruser) acl publicreadaccess = false acl publicwriteaccess = false todo acl = acl todo saveinbackground { e > if (e == null) { println("saved private todo") } else { println("error ${e localizedmessage}") } } } разрешения на уровне класса (clps) clps управляют стандартными разрешениями всего класса, такими как возможность чтения или записи класса для общественности перейдите в свою панель управления back4app , выберите свое приложение и откройте раздел база данных выберите класс (например, “todo”) откройте вкладку разрешения на уровне класса настройте свои параметры по умолчанию, такие как “требуется аутентификация” для чтения или записи, или “нет доступа” для общественности шаг 4 – написание функций облачного кода облачный код позволяет вам запускать пользовательский код на javascript, похожий на kotlin, на сервере parse (загруженный как js файлы), не требуя управления серверной инфраструктурой это идеально подходит для бизнес логики, валидаций, триггеров и вызовов внешних api как это работает вы обычно размещаете функции javascript, триггеры и любые необходимые модули npm в файле main js этот файл развертывается в вашем проекте back4app и выполняется в среде parse server типичные случаи использования бизнес логика проверка данных триггеры (например, beforesave , aftersave ) обеспечение безопасности интеграции с api третьих сторон разверните вашу функцию ниже приведена простая функция cloud code main js parse cloud define('calculatetextlength', async (request) => { const { text } = request params; if (!text) { throw new error('no text provided'); } return { length text length }; }); развертывание через unhandled content type https //www back4app com/docs/local development/parse cli # for linux/mac curl https //raw\ githubusercontent com/back4app/parse cli/back4app/installer sh | sudo /bin/bash \# for windows, download the exe from the releases page затем настройте и разверните b4a configure accountkey b4a deploy вызов вашей функции из вашего android (kotlin) кода через parse sdk import com parse parsecloud import com parse functioncallback import com parse parseexception fun calltextlengthfunction(sometext string) { val params = hashmapof("text" to sometext) parsecloud callfunctioninbackground\<map\<string, any>>("calculatetextlength", params) { result, e > if (e == null) { val length = result\["length"] as int println("text length $length") } else { println("error calling cloud code ${e localizedmessage}") } } } вы также можете вызвать его через rest или graphql аналогичным образом шаг 5 – настройка аутентификации аутентификация пользователя в back4app back4app использует класс parse user для аутентификации parse обрабатывает безопасное хеширование паролей, токены сессий и многое другое из коробки настройка аутентификации пользователя в kotlin вы можете создать нового пользователя import com parse parseuser fun signupuser(username string, password string, email string) { val user = parseuser() user username = username user setpassword(password) user email = email user signupinbackground { e > if (e == null) { println("user signed up successfully!") } else { println("error signing up user ${e localizedmessage}") } } } войдите в существующий аккаунт fun loginuser(username string, password string) { parseuser logininbackground(username, password) { user, e > if (user != null && e == null) { println("user logged in ${user username}") } else { println("error logging in ${e? localizedmessage}") } } } социальные входы, такие как google, facebook и apple, также могут быть интегрированы проверьте документацию по социальному входу https //www back4app com/docs/platform/sign in with apple для получения подробной информации управление сессиями parse автоматически управляет токенами сессии вы можете получить доступ к текущему пользователю val currentuser = parseuser getcurrentuser() if (currentuser != null) { println("currently logged in user ${currentuser username}") } else { println("no user is logged in") } и выйти из системы parseuser logout() шаг 6 – обработка хранения файлов загрузка и получение файлов parse включает класс parsefile для обработки загрузки файлов import com parse parsefile import com parse parseexception fun uploadimage(file java io file) { val bytes = file readbytes() val parsefile = parsefile(file name, bytes) parsefile saveinbackground { e parseexception? > if (e == null) { println("file saved ${parsefile url}") } else { println("error uploading file ${e localizedmessage}") } } } безопасность файлов вы можете контролировать, кто может загружать или скачивать файлы, настраивая acl и clp или используя настройки, специфичные для файлов, в конфигурации parse server шаг 7 – подтверждение электронной почты и сброс пароля включите подтверждение электронной почты в настройках вашей панели управления back4app настройте ваш адрес отправителя, шаблоны электронной почты или пользовательский домен, если это необходимо используйте parseuser requestpasswordresetinbackground(email, callback) для запуска процесса сброса пароля в вашем приложении шаг 8 – планирование задач с помощью облачных заданий облачные задания позволяют автоматизировать рутинные задачи, такие как очистка данных или отправка периодических уведомлений parse cloud job('cleanupoldtodos', async (request) => { const todo = parse object extend('todo') const query = new parse query(todo) // e g , remove todos older than 30 days const cutoff = new date(date now() 30 24 60 60 1000) query lessthan('createdat', cutoff) const oldtodos = await query find({ usemasterkey true }) await parse object destroyall(oldtodos, { usemasterkey true }) return `deleted ${oldtodos length} old todos ` }) запланируйте задание в вашей панели управления back4app в разделе настройки сервера > фоновая работа шаг 9 – интеграция вебхуков вебхуки позволяют вашему приложению back4app отправлять http запросы на внешний сервис, когда происходят определенные события добавьте вебхук в вашей панели управления back4app в разделе дополнительно > вебхуки настройте триггеры (например, после сохранения нового объекта) добавьте url адрес конечной точки (например, вебхук slack или stripe) шаг 10 – изучение панели администратора back4app приложение back4app admin app – это удобный веб интерфейс для нетехнических пользователей для управления данными включите его в разделе панель приложения > дополнительно > приложение администратора создайте своего первого администратора выберите поддомен для доступа к панели администратора войдите для легкого просмотра, редактирования или удаления записей из вашей базы данных заключение следуя этому подробному руководству, вы создали безопасный бэкенд для android приложения на back4app настроили базу данных с классами схем, типами данных и отношениями интегрировали запросы в реальном времени (live queries) для немедленного обновления данных применили меры безопасности с использованием acl и clp для защиты и управления доступом к данным реализовали функции cloud code для выполнения пользовательской бизнес логики на стороне сервера настроили аутентификацию пользователей с поддержкой проверки электронной почты и сброса паролей управляли загрузкой файлов и их извлечением, с дополнительными мерами безопасности для файлов запланировали cloud jobs для автоматизированных фоновых задач использовали webhooks для интеграции с внешними сервисами изучили панель администратора back4app для управления данными с надежным фронтендом на android (kotlin) и мощным бэкендом на back4app, вы теперь хорошо подготовлены для разработки функциональных, масштабируемых и безопасных приложений продолжайте исследовать более продвинутые функции, интегрируйте свою бизнес логику и используйте возможности back4app, чтобы сэкономить вам бесчисленные часы на администрировании серверов и баз данных удачного кодирования! следующие шаги создайте готовое к производству android приложение путем расширения этого бэкенда для обработки более сложных моделей данных, стратегий кэширования и оптимизации производительности интегрируйте расширенные функции такие как специализированные потоки аутентификации, контроль доступа на основе ролей или внешние api (например, платежные шлюзы) посмотрите официальную документацию back4app для более глубокого изучения вопросов безопасности, настройки производительности и анализа логов изучите другие учебники по приложениям для чата в реальном времени, iot панелям или сервисам на основе местоположения вы можете комбинировать техники, изученные здесь, с api третьих сторон для создания сложных, реальных приложений