Quickstarters
Feature Overview
How to build a backend for SwiftUI?
41 мин
введение в этом учебном пособии вы научитесь создавать полный бэкенд для приложения swiftui для ios с использованием back4app мы покажем вам, как интегрировать parse swift sdk в ваш проект swiftui и воспользоваться ключевыми функциями back4app — такими как управление базами данных, функции cloud code, rest и graphql api, аутентификация пользователей и запросы в реальном времени — для создания безопасного и масштабируемого бэкенда этот подход помогает вам безопасно хранить данные, выполнять операции на стороне сервера без настройки собственной инфраструктуры и легко масштабировать ваше ios приложение или веб приложение по мере необходимости вы также увидите, как быстрая настройка и интуитивно понятная среда back4app могут значительно сократить время и усилия по сравнению с ручной настройкой вашего собственного сервера и базы данных к концу вы поймете, как построить бэкенд для swiftui , который можно расширить для производственной среды или интегрировать с пользовательской логикой и api давайте начнем создавать надежный, масштабируемый бэкенд с минимальными затратами! предварительные требования учетная запись back4app и новый проект back4app начало работы с back4app https //www back4app com/docs/get started/new parse app если у вас нет учетной записи, вы можете создать ее бесплатно следуйте приведенному выше руководству, чтобы подготовить ваш проект базовая среда разработки swiftui вам потребуется xcode установленный на вашем компьютере и базовый проект swiftui или ios swift package manager или cocoapods чтобы добавить parse swift sdk документация parse swift sdk https //github com/netreconlab/parse swift знание swift и swiftui если вы новичок в swiftui, ознакомьтесь с документацией swiftui от apple https //developer apple com/documentation/swiftui перед началом убедитесь, что все это на месте, прежде чем вы начнете настройка вашего проекта back4app и вашей локальной среды swiftui поможет вам легче следовать инструкциям шаг 1 – настройка проекта back4app создание нового проекта первый шаг в создании вашего бэкенда swiftui на back4app – это создание нового проекта если вы еще не создали его, выполните следующие шаги войдите в свою учетную запись back4app нажмите кнопку “новое приложение” на вашей панели управления back4app дайте вашему приложению имя (например, “swiftui backend tutorial”) после создания проекта вы увидите его в списке на вашей панели управления back4app этот проект станет основой для всех конфигураций бэкенда, обсуждаемых в этом учебнике подключите parse swift sdk back4app полагается на платформу parse для управления вашими данными, предоставления функций в реальном времени, обработки аутентификации пользователей и многого другого подключение вашего приложения swiftui к back4app включает установку parse swift sdk и его инициализацию с учетными данными из вашей панели управления back4app получите свои ключи parse в вашей панели управления back4app перейдите в раздел “настройки приложения” или “безопасность и ключи”, чтобы найти ваш идентификатор приложения и ключ клиента (или ключ javascript) вы также найдете url сервера parse (часто в формате https //parseapi back4app com ) установите sdk parse для swift если вы используете swift package manager , откройте ваш проект в xcode и затем файл → добавить пакеты → введите url https //github com/netreconlab/parse swift git выберите “до следующей основной версии” из правил версии и подтвердите если вы используете cocoapods pod 'parseswiftog' инициализируйте parse в вашем приложении например, в вашем app структуре @main struct myapp app { init() { do { try await parseswift initialize( applicationid "your app id", clientkey "your client key", serverurl url(string "https //parseapi back4app com")! ) } catch { print("error initializing parse \\(error)") } } var body some scene { windowgroup { contentview() } } } завершив этот шаг, вы установили безопасное соединение между вашим фронтендом на swiftui и бэкендом back4app все запросы и транзакции данных обрабатываются с помощью parse swift sdk, что снижает сложность ручных вызовов rest или graphql (хотя вы все равно можете использовать их при необходимости) шаг 2 – настройка базы данных сохранение и запрос данных с настроенным проектом back4app и интегрированным parse swift sdk вы теперь можете начать сохранять и извлекать данные ниже приведен простой parseobject пример предположим, у нас есть todo структура import parseswift struct todo parseobject { // parseobject conformance var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? // custom properties var title string? var iscompleted bool? } сохранение нового todo func createtodoitem(title string, iscompleted bool) async { var todo = todo() todo title = title todo iscompleted = iscompleted do { let savedtodo = try await todo save() print("todo saved successfully \\(savedtodo)") } catch { print("error saving todo \\(error)") } } запрос всех todos func fetchtodos() async { do { let todos = try await todo query() find() print("fetched todos \\(todos)") } catch { print("error fetching todos \\(error)") } } в качестве альтернативы вы можете использовать back4app’s rest api конечные точки или graphql 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 graphql mutation { createtodo(input { fields { title "clean the house" iscompleted false } }) { todo { objectid title iscompleted } } } наличие нескольких вариантов (parse swift sdk, rest, graphql) позволяет вам выбрать подход, который лучше всего подходит для вашего рабочего процесса проектирование схемы и типы данных по умолчанию parse позволяет создавать схемы на лету , но вы также можете определить свои классы в панели управления back4app для большего контроля перейдите в раздел “база данных” в вашей панели управления back4app создайте новый класс (например, “todo”) и добавьте соответствующие столбцы, такие как title (string) и iscompleted (boolean) back4app поддерживает различные типы данных string , number , boolean , object , date , file , pointer , array , relation , geopoint , и polygon вы можете выбрать подходящий тип для каждого поля back4app также предоставляет ai agent , который может помочь вам разработать вашу модель данных откройте ai agent из вашей панели управления приложением опишите вашу модель данных простым языком (например, “пожалуйста, создайте новую схему класса todo ”) позвольте ai agent сгенерировать схему для вас реляционные данные если у вас есть реляционные данные — скажем, объект категория который указывает на несколько задач — вы можете использовать указатели или связи в parse например struct category parseobject { var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? var name string? } struct todo parseobject { var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? var title string? var category pointer\<category>? } func createtodowithcategory(categoryid string, title string) async { var todo = todo() todo title = title // construct pointer let categorypointer = pointer\<category>(objectid categoryid) todo category = categorypointer do { try await todo save() } catch { print("error creating todo with category relationship \\(error)") } } при запросе вы также можете включить данные указателя let query = todo query() include("category") do { let todoswithcategory = try await query find() print("todos with category \\(todoswithcategory)") } catch { print("error fetching todos \\(error)") } живые запросы для обновлений в реальном времени back4app предоставляет живые запросы в вашем приложении swiftui вы можете подписаться на изменения в конкретном классе включите живые запросы в вашей панели управления back4app в разделе настройки сервера подпишитесь в коде // example snippet using the parse swift subscription system task { let subscription = try todo query() subscribecallback() // react to events for await event in subscription { switch event { case entered(let todo) print("new todo entered \\(todo)") case updated(let todo) print("todo updated \\(todo)") case left(let todo) print("todo deleted or left subscription \\(todo)") default break } } } когда todo создается, обновляется или удаляется на сервере, ваше приложение получает уведомление в реальном времени эта функция очень полезна для совместных или динамических приложений, которые требуют немедленной синхронизации данных шаг 3 – применение безопасности с помощью acl и clp механизм безопасности back4app back4app предоставляет списки управления доступом (acl) и разрешения на уровне класса (clp) для надежной безопасности данных это позволяет вам ограничить, кто может читать или записывать данные на уровне объекта или класса, обеспечивая, чтобы только авторизованные пользователи могли изменять ваши данные списки управления доступом (acl) acl применяется к отдельным объектам например, чтобы гарантировать, что только определенный пользователь может читать/записывать todo func createprivatetodo(title string, user user) async { var todo = todo() todo title = title var acl = parseacl() // grant read/write to the owner only acl setreadaccess(true, for user) acl setwriteaccess(true, for user) todo acl = acl do { let saved = try await todo save() print("private todo saved \\(saved)") } catch { print("error saving private todo \\(error)") } } разрешения на уровне класса (clp) clp управляют настройками по умолчанию для всего класса, такими как возможность публичного чтения или записи, или если только определенные роли могут получить к нему доступ перейдите на панель управления back4app и выберите ваше приложение откройте раздел база данных , выберите класс (например, todo ) откройте вкладку разрешения на уровне класса настройте параметры по умолчанию, такие как «требуется аутентификация» или «нет доступа» эти разрешения устанавливают широкую базу, в то время как acl позволяют вам точно настроить безопасность на уровне объекта сочетание обоих обеспечивает надежную модель безопасности для получения более подробной информации смотрите руководство по безопасности приложений https //www back4app com/docs/security/parse security шаг 4 – написание и развертывание облачных функций облачный код позволяет вам запускать пользовательский серверный код на swift (или javascript) без управления серверами это идеально подходит для добавления бизнес логики, валидации данных, триггеров или интеграций с бэкендом, которые не должны выполняться с клиента как это работает напишите ваш облачный код в файле, например, main js (javascript) или используйте среду облачного кода на основе swift разверните в вашем проекте back4app код выполняется в среде parse server, поэтому вам не нужно поддерживать свой собственный сервер вызовите ваш облачный код с клиента через swift sdk, rest или graphql типичные случаи использования бизнес логика сложные валидации данных, вычисления полей или внешние интеграции триггеры данных выполнение логики при сохранении, обновлении или удалении объекта безопасность защита чувствительных операций от клиента, выполняя их на стороне сервера пример функции ниже приведен пример javascript cloud code (так как cloud code в основном использует js на back4app), который вычисляет длину текста main js parse cloud define('calculatetextlength', async (request) => { const { text } = request params; if (!text) { throw new error('no text provided'); } return { length text length }; }); развертывание через cli установите back4app cli https //www back4app com/docs/local development/parse cli настройте ваш ключ учетной записи b4a configure accountkey разверните cloud code b4a deploy вызов вашей функции из swift struct cloudfunction { static func calculatetextlength(text string) async throws > int { do { if let result = try await parsecloud callfunction("calculatetextlength", with \["text" text]) as? \[string any], let length = result\["length"] as? int { return length } } catch { throw error } return 0 } } task { do { let len = try await cloudfunction calculatetextlength(text "hello back4app") print("text length \\(len)") } catch { print("error calling cloud function \\(error)") } } через rest curl x post \\ h "x parse application id your app id" \\ h "x parse rest api key your rest api key" \\ h "content type application/json" \\ d '{"text" "hello back4app"}' \\ https //parseapi back4app com/functions/calculatetextlength шаг 5 – настройка аутентификации пользователей аутентификация пользователей в back4app back4app использует класс parseuser для обработки безопасной аутентификации хеширование паролей, токены сессий и данные обрабатываются автоматически, позволяя вам сосредоточиться на логике приложения настройка аутентификации пользователей зарегистрировать нового пользователя struct user parseuser { var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? // required fields var username string? var email string? var emailverified bool? var password string? var authdata \[string \[string string]?]? } func signupuser(username string, password string, email string) async { var newuser = user() newuser username = username newuser password = password newuser email = email do { try await newuser signup() print("user signed up successfully!") } catch { print("error signing up user \\(error)") } } войти как существующий пользователь func loginuser(username string, password string) async { do { let user = try await user login(username username, password password) print("user logged in \\(user)") } catch { print("error logging in user \\(error)") } } токены сессии обрабатываются автоматически parse вы можете выйти func logout() async { do { try await user logout() print("user logged out ") } catch { print("error logging out \\(error)") } } интеграция социальных входов интеграции с google , apple , facebook , и т д , возможны с дополнительной настройкой проверьте документацию по социальным входам https //www back4app com/docs/platform/sign in with apple для получения дополнительной информации подтверждение электронной почты и сброс пароля включите подтверждение электронной почты в вашей панели управления back4app и настройте электронные письма для сброса пароля, чтобы пользователи могли безопасно восстанавливать свои аккаунты для сброса пароля try await user passwordreset(email "user\@example com") шаг 6 – обработка хранения файлов загрузка и получение файлов parse включает parsefile для обработки загрузки файлов func uploadimage(filedata data) async { let parsefile = parsefile(name "photo jpg", data filedata) do { let savedfile = try await parsefile save() print("file saved at \\(savedfile url ?? "no url")") } catch { print("error uploading file \\(error)") } } присоедините его к parseobject struct photo parseobject { var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? var imagefile parsefile? } func createphotoobject(filedata data) async { var photo = photo() photo imagefile = parsefile(name "image jpg", data filedata) do { = try await photo save() } catch { print("error saving photo object \\(error)") } } безопасность файлов по умолчанию файлы доступны по публичному url вы можете настроить безопасность файлов, используя настройки parse server https //www back4app com/docs/platform/file storage для более строгого контроля файлов убедитесь, что только аутентифицированные пользователи или указанные роли могут загружать или получать файлы шаг 7 – планирование задач с помощью облачных заданий облачные задания позволяют вам планировать и выполнять повторяющиеся задачи, такие как очистка данных или отправка электронных писем // main js (javascript cloud code) parse cloud job('cleanupoldtodos', async (request) => { const todo = parse object extend('todo'); const query = new parse query(todo); const now = new date(); const thirty days = 30 24 60 60 1000; const cutoff = new date(now thirty days); query lessthan('createdat', cutoff); try { const oldtodos = await query find({ usemasterkey true }); await parse object destroyall(oldtodos, { usemasterkey true }); return `deleted ${oldtodos length} old todos `; } catch (err) { throw new error('error during cleanup ' + err message); } }); после развертывания, запланируйте это через панель управления back4app в разделе настройки сервера > фоновая работа шаг 8 – интеграция вебхуков вебхуки позволяют вашему приложению back4app отправлять http запросы на внешние сервисы (например, stripe) всякий раз, когда происходят определенные события это полезно для интеграции с инструментами третьих сторон или другими серверными интеграциями перейдите в раздел вебхуки в вашей панели управления back4app > дополнительно > вебхуки добавьте конечную точку (например, https //your service com/webhook ) настройте какие события (например, новая запись в классе todo) будут вызывать вебхук например, вы можете отправлять сообщение в slack каждый раз, когда пользователь создает новую задачу это помогает вам поддерживать синхронизацию внешних сервисов с вашими данными back4app шаг 9 – изучение панели администратора back4app приложение back4app admin app является веб интерфейсом управления для нетехнических пользователей, позволяющим выполнять операции crud с вашими данными оно предоставляет удобный интерфейс, который отделен от панели управления parse, что упрощает управление данными в производственной среде включение приложения администратора перейдите в панель управления приложением > дополнительно > приложение администратора и нажмите «включить приложение администратора» создайте администратора , который автоматически генерирует роль администратора и связанные классы выберите поддомен для интерфейса администратора, затем войдите в систему, чтобы управлять вашими данными через простой интерфейс с возможностью щелчка заключение следуя этому всестороннему руководству, вы узнали как создать бэкенд для swiftui с использованием back4app и parse swift sdk как безопасно хранить данные с помощью пользовательских схем классов и отношений как интегрировать запросы в реальном времени (live queries) для немедленных обновлений данных как применять меры безопасности с использованием acl и clp для защиты и управления доступом к данным как выполнять бизнес логику через cloud code как управлять хранением файлов , аутентификацией и планированием фоновых задач с помощью cloud jobs как интегрировать ваше приложение с внешними сервисами с помощью вебхуков с этими навыками вы можете создать ios приложение или веб приложение которое легко управлять, безопасно и готово к масштабированию изучите более продвинутые функции — такие как разрешения на основе ролей, push уведомления или продвинутое кэширование вы также можете интегрировать другие api или адаптировать ваш cloud code под специализированные случаи использования счастливого кодирования , и наслаждайтесь созданием потрясающих приложений на back4app! следующие шаги готовое к производству приложение на swiftui расширьте этот бэкенд, чтобы обрабатывать более сложные модели данных, кэширование и улучшение производительности расширенные функции углубитесь в специализированную аутентификацию, доступ на основе ролей или интеграцию с api третьих сторон (например, stripe) изучите официальную документацию back4app для более глубокого изучения безопасности серверной стороны , анализа журналов и тонкой настройки базы данных проверьте дополнительные учебники чат в реальном времени, услуги на основе местоположения или многопользовательские приложения — объедините методы, изученные здесь, с внешними api для создания сложных, реальных решений