Quickstarters
Feature Overview
How to Build a Backend for MacOS?
45 мин
введение в этом учебном пособии вы узнаете как создать бэкенд для macos с использованием back4app и parse swift sdk мы пройдем через интеграцию основных функций back4app — таких как управление базами данных, функции cloud code, rest и graphql api, аутентификация пользователей и запросы в реальном времени (live queries) — чтобы создать безопасный, масштабируемый и надежный бэкенд, который бесшовно взаимодействует с вашим приложением для macos вы также увидите, как быстрая настройка и интуитивно понятная среда back4app могут значительно сократить время и усилия по сравнению с ручной настройкой серверов и баз данных в процессе вы получите практический опыт с ключевыми функциональными возможностями, включая расширенные функции безопасности, планирование задач с помощью cloud jobs и настройку вебхуков для внешних интеграций к концу этого учебника вы будете хорошо подготовлены, чтобы улучшить эту базовую настройку в готовое к производству приложение для macos или легко интегрировать пользовательскую логику и сторонние api по мере необходимости освоение этого подхода позволит вам оптимизировать ваши рабочие процессы и узнать, как быстро и эффективно создать бэкенд для macos предварительные требования чтобы завершить этот учебник, вам потребуется аккаунт back4app и новый проект back4app начало работы с back4app https //www back4app com/docs/get started/new parse app если у вас нет аккаунта, вы можете создать его бесплатно следуйте приведенному выше руководству, чтобы подготовить ваш проект среда разработки macos (xcode) вы можете установить xcode из mac app store https //apps apple com/us/app/xcode/id497799835 swift package manager или cocoapods для установки parse swift sdk документация по parse swift https //github com/netreconlab/parse swift базовые знания swift и разработки приложений для macos официальная документация apple https //developer apple com/documentation/swift знание swiftui или appkit будет полезным убедитесь, что у вас есть все эти предварительные требования перед началом наличие вашего проекта back4app и готовой локальной среды разработки macos поможет вам легче следовать за процессом шаг 1 – настройка проекта back4app создание нового проекта первый шаг в создании вашего бэкенда для macos на back4app – это создание нового проекта если вы еще не создали его, выполните следующие шаги войдите в свою учетную запись back4app нажмите кнопку “новое приложение” в вашей панели управления back4app дайте вашему приложению имя (например, “macos backend tutorial”) после создания проекта вы увидите его в списке на вашей панели управления back4app этот проект станет основой для всех конфигураций бэкенда, обсуждаемых в этом руководстве подключите parse swift sdk back4app использует платформу parse для управления вашими данными, предоставления функций в реальном времени, обработки аутентификации пользователей и многого другого подключение вашего приложения для macos к back4app включает установку parse swift sdk и его инициализацию с учетными данными из вашей панели управления back4app получите ваши ключи parse на вашей панели управления back4app перейдите в раздел “настройки приложения” или “безопасность и ключи”, чтобы найти ваш идентификатор приложения и ключ клиента (или clientkey ) вы также найдете url сервера parse (часто в формате https //parseapi back4app com ) установите sdk parse swift в вашем проекте macos если вы используете swift package manager dependencies \[ package(url "https //github com/netreconlab/parse swift git", from "5 0 0") ] если вы используете cocoapods , добавьте это в ваш podfile pod 'parseswiftog' инициализируйте parse в вашем приложении macos (например, в appdelegate swift если используете appkit, или в структуре swiftui @main если создаете приложение swiftui) import parseswift import swiftui @main struct mymacosapp app { init() { task { do { try await parseswift initialize( applicationid "your application id", clientkey "your client key", serverurl url(string "https //parseapi back4app com")! ) } catch { print("error initializing parse \\(error)") } } } var body some scene { windowgroup { contentview() } } } завершив этот шаг, вы установили безопасное соединение между вашим фронтендом macos (ui) и бэкендом back4app все запросы и транзакции данных безопасно маршрутизируются через этот sdk, что снижает сложность ручных вызовов rest или graphql (хотя вы все равно можете использовать их при необходимости) шаг 2 – настройка базы данных сохранение и запрос данных с вашим проектом back4app, настроенным и интегрированным с parse swift sdk в ваше приложение для macos, вы теперь можете начать сохранять и извлекать данные самый простой способ создать объект — это определить структуру, соответствующую parseobject и затем вызвать save() struct todo parseobject { // parseobject required properties var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? // custom properties var title string? var iscompleted bool? } func createtodoitem(title string, iscompleted bool) async { var todo = todo() todo title = title todo iscompleted = iscompleted do { try await todo save() print("todo saved successfully ") } catch { print("error saving todo \\(error)") } } func fetchtodos() async > \[todo] { let query = todo query() do { return try await query find() } catch { print("error fetching todos \\(error)") return \[] } } в качестве альтернативы вы можете использовать rest или graphql 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 swift sdk, rest или graphql проектирование схемы и типы данных по умолчанию parse позволяет создание схемы на лету , но вы также можете определить свои классы и типы данных в панели управления back4app для большего контроля перейдите в раздел “база данных” в вашей панели управления back4app создайте новый класс (например, “задача”) и добавьте соответствующие столбцы, такие как заголовок (string) и iscompleted (boolean) back4app поддерживает различные типы данных string , number , boolean , object , date , file , pointer , array , relation , geopoint , и polygon вы можете выбрать подходящий тип для каждого поля или позволить parse автоматически создать эти столбцы, когда вы впервые сохраняете объект из вашего приложения для macos back4app предлагает ai agent который может помочь вам спроектировать вашу модель данных откройте ai agent из вашей панели управления приложением или в меню опишите вашу модель данных простым языком (например, “пожалуйста, создайте новое приложение todo на back4app с полной схемой класса ”) позвольте ai agent создать схему для вас реляционные данные если у вас есть реляционные данные — скажем, объект category , который указывает на несколько todo элементов — вы можете использовать pointers или relations в parse swift struct category parseobject { var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? // custom fields 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 createtaskforcategory(categoryobjectid string, title string) async { let pointer = pointer\<category>(objectid categoryobjectid) var todo = todo() todo title = title todo category = pointer do { try await todo save() print("todo linked to category") } catch { print("error creating task with category relationship \\(error)") } } func fetchtodoswithcategory() async { let query = todo query() include("category") do { let todos = try await query find() print("fetched todo items with category \\(todos)") } catch { print("error fetching todos \\(error)") } } живые запросы для обновлений в реальном времени back4app предоставляет live queries включив живые запросы в вашей панели управления back4app, вы можете подписаться на изменения в конкретном классе из вашего приложения для macos включите живые запросы в вашей панели управления back4app в разделе настройки сервера инициализируйте живые запросы в коде (клиент живых запросов swift все еще в разработке, но вы можете использовать подходы, основанные на сообществе, или следить за официальными обновлениями parse swift) src/parseconfig swift // example (subject to support in parse swift) // live query’s subdomain // parseswift configuration livequeryserverurl = url(string "wss\ //your subdomain here b4a io")! после подписки вы будете получать уведомления всякий раз, когда создается, обновляется или удаляется новый todo это особенно ценно для совместных или высокоинтерактивных настольных приложений, где нескольким пользователям или процессам необходимо мгновенно видеть последние данные шаг 3 – применение безопасности с помощью acl и clp механизм безопасности back4app back4app серьезно относится к безопасности, предоставляя списки управления доступом (acl) и разрешения на уровне класса (clp) эти функции позволяют ограничить, кто может читать или записывать данные на уровне объекта или класса, обеспечивая, чтобы только авторизованные пользователи могли изменять ваши данные списки управления доступом (acl) acl применяется к отдельным объектам, чтобы определить, какие пользователи, роли или общественность могут выполнять операции чтения/записи например, если ваше приложение для macos имеет концепцию «личных задач» для текущего вошедшего пользователя import parseswift func createprivatetodo(title string) async { guard let currentuser = user current else { return } var todo = todo() todo title = title // create an acl granting read/write access only to the owner var acl = parseacl() acl setreadaccess(currentuser, value true) acl setwriteaccess(currentuser, value true) todo acl = acl do { try await todo save() print("private todo saved") } catch { print("error saving private todo \\(error)") } } когда вы сохраняете объект, у него есть acl, который предотвращает чтение или изменение его кем либо, кроме указанного пользователя разрешения на уровне класса (clp) clp управляют стандартными разрешениями для всего класса, такими как возможность публичного чтения или записи, или если только определенные роли могут получить к нему доступ перейдите в свою панель управления back4app , выберите свое приложение и откройте раздел база данных выберите класс , например, “todo” откройте вкладку уровень разрешений класса настройте свои параметры по умолчанию, такие как “требуется аутентификация” для чтения или записи, или “нет доступа” для публичного шаг 4 – написание и развертывание облачных функций облачный код — это функция среды parse server, которая позволяет вам запускать пользовательский javascript код на стороне сервера, не требуя управления собственными серверами или инфраструктурой написав облачный код, вы можете расширить свой бэкенд back4app дополнительной бизнес логикой, валидациями, триггерами и интеграциями, которые работают безопасно и эффективно на сервере parse как это работает когда вы пишете облачный код, вы обычно помещаете свои функции javascript, триггеры и любые необходимые модули npm в файл main js затем вы развертываете этот файл в своем проекте back4app, и он выполняется в среде parse server это позволяет вам сохранять чувствительную логику на стороне сервера типичные случаи использования бизнес логика вычисления или преобразования перед сохранением данных валидации данных убедитесь, что определенные поля соответствуют критериям триггеры выполняйте действия при изменении данных интеграции подключение к внешним api (например, платежи, уведомления) пример функции // main js parse cloud define('calculatetextlength', async (request) => { const { text } = request params; if (!text) { throw new error('no text provided'); } return { length text length }; }); развертывание через back4app cli установите cli curl https //raw\ githubusercontent com/back4app/parse cli/back4app/installer sh | sudo /bin/bash настройте ключ вашей учетной записи b4a configure accountkey разверните ваш облачный код b4a deploy вызов вашей функции с macos с использованием swift import parseswift func gettextlength(text string) async { do { let result = try await parsecloud callfunction("calculatetextlength", with \["text" text]) if let resultdict = result as? \[string any], let length = resultdict\["length"] as? int { print("text length \\(length)") } } catch { print("error calling cloud function \\(error)") } } вы также можете вызвать его через rest или graphql, так же, как и в других фреймворках шаг 5 – настройка аутентификации пользователей аутентификация пользователей в back4app back4app использует класс parseuser в качестве основы для аутентификации по умолчанию parse обрабатывает хеширование паролей, токены сессий и безопасное хранение, так что вам не нужно вручную настраивать сложные потоки безопасности настройка аутентификации пользователей в приложении для macos вы можете создать нового пользователя с struct user parseuser { var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? // default properties 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 { newuser = 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)") } } через rest вход может выглядеть так curl x get \\ h "x parse application id your app id" \\ h "x parse rest api key your rest api key" \\ g \\ \ data urlencode 'username=alice' \\ \ data urlencode 'password=secret123' \\ https //parseapi back4app com/login управление сессиями после успешного входа в систему parse создает токен сессии вы можете получить доступ к текущему вошедшему пользователю if let currentuser = user current { print("currently logged in user \\(currentuser username ?? "no username")") } else { print("no user is logged in") } выход из системы do { try await user logout() } catch { print("error logging out \\(error)") } интеграция социальных входов вы можете интегрировать популярных провайдеров, таких как google, apple или facebook, настроив authdata подробные инструкции могут различаться, поэтому обратитесь к документации по социальному входу https //www back4app com/docs/platform/sign in with apple подтверждение электронной почты и сброс пароля чтобы включить проверку электронной почты и сброс пароля перейдите в настройки электронной почты в вашей панели управления back4app включите проверку электронной почты настройте адрес отправителя , шаблоны электронной почты и ваш собственный домен, если это необходимо это улучшает безопасность учетной записи, проверяя электронные адреса пользователей и предоставляя метод восстановления пароля шаг 6 – обработка хранения файлов загрузка и получение файлов parse включает класс parsefile для обработки загрузки файлов, которые back4app хранит безопасно func uploadfile(data data) async > parsefile? { let file = parsefile(name "doc txt", data data) do { let savedfile = try await file save() print("file saved ", savedfile url ?? "no url") return savedfile } catch { print("error uploading file ", error) return nil } } присоедините его к объекту struct photo parseobject { var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? var imagefile parsefile? } func createphotoobject(file parsefile) async { var photo = photo() photo imagefile = file do { try await photo save() print("photo object saved!") } catch { print("error saving photo ", error) } } безопасность файлов вы можете настроить безопасность загрузки файлов в настройках вашего parse server например, контролируя, какие пользователи могут загружать или удалять файлы имейте в виду, что если вы поделитесь url адресом файла, любой, у кого есть этот url, сможет получить к нему доступ, если вы не установили более строгие правила на стороне сервера шаг 7 – подтверждение электронной почты и сброс пароля обзор подтверждение электронной почты и сброс пароля имеют решающее значение для безопасного управления пользователями мы уже упоминали об этом в шаге 5 , но на всякий случай включите эти функции в панели управления back4app (настройки электронной почты) настройте шаблоны электронной почты «включить подтверждение электронной почты» и «сброс пароля» проверьте процесс из вашего приложения для macos шаг 8 – планирование задач с помощью облачных заданий облачные задания облачные задания позволяют вам планировать и выполнять рутинные задачи на вашем сервере, такие как отправка периодических электронных писем или очистка данных например // main js 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); const oldtodos = await query find({ usemasterkey true }); await parse object destroyall(oldtodos, { usemasterkey true }); return `deleted ${oldtodos length} old todos `; }); разверните ваш cloud code с новой задачей перейдите на панель управления back4app > настройки приложения > настройки сервера > фоновая работа запланируйте задачу (например, ежедневно) шаг 9 – интеграция вебхуков вебхуки позволяют вашему приложению back4app отправлять http запросы на внешние сервисы, когда происходят определенные события это мощный инструмент для интеграции с третьими системами, такими как платежные шлюзы, инструменты email маркетинга или аналитические платформы перейдите к настройкам вебхуков в вашей панели управления back4app > дополнительно > вебхуки настройте конечную точку (например, https //your external service com/webhook endpoint ) настройте триггеры для указания, какие события в ваших классах back4app или функциях cloud code будут вызывать вебхук например, если вы хотите уведомлять slack каждый раз, когда создается новая задача создайте приложение slack, которое принимает входящие вебхуки скопируйте url вебхука slack в вашей панели управления back4app установите конечную точку на этот url slack для события “новая запись в классе todo ” шаг 10 – изучение панели администратора back4app административное приложение back4app admin app — это веб интерфейс управления, предназначенный для нетехнических пользователей, чтобы выполнять операции crud и обрабатывать рутинные задачи с данными без написания кода он предоставляет ориентированный на модели , дружественный к пользователю интерфейс, который упрощает администрирование баз данных, управление пользовательскими данными и операции на уровне предприятия включение административного приложения включите его, перейдя в app dashboard > more > admin app и нажав “включить административное приложение ” создайте первого администратора , который автоматически генерирует новую роль ( b4aadminuser ) и соответствующие классы в схеме вашего приложения выберите поддомен для доступа к административному интерфейсу и завершите настройку войдите с использованием учетных данных администратора, которые вы создали, чтобы получить доступ к новой панели управления административным приложением после активации приложение back4app admin упрощает просмотр, редактирование или удаление записей из вашей базы данных — без необходимости прямого использования панели управления parse или серверного кода заключение следуя этому подробному руководству, вы создали безопасный бэкенд для приложения macos на back4app настроили базу данных с классами схем, типами данных и отношениями интегрировали запросы в реальном времени (live queries) для немедленных обновлений данных применили меры безопасности с использованием acl и clp для защиты и управления доступом к данным реализовали функции cloud code для выполнения пользовательской бизнес логики на стороне сервера настроили аутентификацию пользователей с поддержкой проверки электронной почты и сброса паролей управляли загрузкой файлов и их получением, с дополнительными мерами безопасности для файлов запланировали cloud jobs для автоматизированных фоновых задач использовали webhooks для интеграции с внешними сервисами изучили панель администратора back4app для управления данными с надежным фронтендом на macos и мощным бэкендом back4app вы теперь хорошо подготовлены для разработки функциональных, масштабируемых и безопасных настольных приложений продолжайте исследовать более продвинутые функции, интегрируйте свою бизнес логику и используйте возможности back4app, чтобы сэкономить вам бесчисленные часы на администрировании серверов и баз данных следующие шаги создайте готовое к производству приложение для macos путем расширения этого бэкенда для обработки более сложных моделей данных, стратегий кэширования и оптимизации производительности интегрируйте продвинутые функции такие как специализированные потоки аутентификации, контроль доступа на основе ролей или внешние api (например, платежные шлюзы) посмотрите официальную документацию back4app для более глубокого изучения вопросов безопасности, настройки производительности и анализа логов изучите другие учебные пособия по вопросам связи в реальном времени, iot панелей управления или услуг на основе местоположения объедините изученные здесь техники с api третьих сторон для создания сложных, реальных приложений