Quickstarters
Feature Overview
如何为MacOS构建后端?
42 分
介绍 在本教程中,您将学习 如何为 macos 构建后端 ,使用 back4app 和 parse swift sdk。 我们将逐步介绍集成 back4app 的基本功能——如数据库管理、云代码函数、rest 和 graphql api、用户身份验证以及实时查询(实时查询)——以创建一个安全、可扩展且强大的后端,能够与您的 macos 应用程序无缝通信。 您还将看到,back4app 的快速设置和直观环境可以大幅减少与手动配置服务器和数据库相比所需的时间和精力。 在此过程中,您将获得关键功能的实践经验,包括高级安全功能、使用云作业调度任务以及为外部集成设置 webhook。 在本教程结束时,您将为将此基础设置增强为生产就绪的macos应用程序做好充分准备,或根据需要轻松集成自定义逻辑和第三方api。 掌握这种方法将使您能够简化工作流程,并 学习如何快速高效地为macos构建后端 。 先决条件 要完成本教程,您需要 一个back4app账户和一个新的back4app项目 开始使用back4app。 https //www back4app com/docs/get started/new parse app 如果您没有账户,可以免费创建一个。请按照上面的指南准备好您的项目。 一个macos开发环境(xcode) 您可以从 mac app store https //apps apple com/us/app/xcode/id497799835 安装xcode。 swift package manager或cocoapods 用于安装parse swift sdk。 parse swift文档。 https //github com/netreconlab/parse swift 基本的swift和macos应用开发知识 苹果官方文档 https //developer apple com/documentation/swift 熟悉swiftui或appkit会有所帮助。 在开始之前,请确保您具备所有这些先决条件。设置好您的back4app项目并准备好本地macos开发环境将帮助您更轻松地跟随。 步骤 1 – 设置 back4app 项目 创建新项目 在 back4app 上构建 macos 后端的第一步是创建一个新项目。如果您还没有创建,请按照以下步骤操作: 登录到您的 back4app 账户 。 点击您的 back4app 仪表板中的 “新应用” 按钮 。 给您的应用命名 (例如,“macos backend tutorial”)。 项目创建后,您将在 back4app 仪表板中看到它列出。该项目将是本教程中讨论的所有后端配置的基础。 连接 parse swift sdk back4app 依赖 parse 平台来管理您的数据,提供实时功能,处理用户身份验证等。将您的 macos 应用程序连接到 back4app 涉及安装 parse swift sdk 并使用您 back4app 仪表板中的凭据进行初始化。 获取您的 parse 密钥 在您的 back4app 仪表板中,导航到您应用的 “应用设置” 或 “安全性与密钥” 部分以找到您的 应用程序 id 和 客户端密钥 (或 clientkey )。您还会找到 parse 服务器 url (通常格式为 https //parseapi back4app com )。 在您的 macos 项目中安装 parse swift sdk 如果使用 swift package manager dependencies \[ package(url "https //github com/netreconlab/parse swift git", from "5 0 0") ] 如果使用 cocoapods , 将此添加到您的 podfile pod 'parseswiftog' 在您的 macos 应用程序中初始化 parse (例如,在 appdelegate swift 中如果使用 appkit,或者在构建 swiftui 应用时的 @main 结构中) 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 \[] } } 或者,您可以使用 back4app 的 rest 或 graphql api 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 仪表板中的 “数据库” 部分 创建一个新类 (例如,“待办事项”)并添加相关列,例如标题(字符串)和 iscompleted(布尔值)。 back4app 支持多种数据类型: 字符串 , 数字 , 布尔值 , 对象 , 日期 , 文件 , 指针 , 数组 , 关系 , 地理点 , 和 多边形 您可以为每个字段选择适当的类型,或者让 parse 在您第一次从 macos 应用程序保存对象时自动创建这些列。 back4app 提供一个 ai 代理 ,可以帮助您设计数据模型: 从您的应用仪表板或菜单中打开 ai 代理 用简单的语言描述您的数据模型 (例如,“请在 back4app 上创建一个新的待办事项应用程序,带有完整的类模式。”)。 让 ai 代理为您创建模式 。 关系数据 如果您有关系数据——比如,一个 category 对象指向多个 todo 项目——您可以在 parse swift 中使用 pointers 或 relations 。 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 仪表板中启用 live queries ,在您的应用程序的 server settings 下。 在代码中初始化 live queries (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非常重视安全性,提供了 访问控制列表 (acls) 和 类级权限 (clps) 这些功能允许您限制谁可以在每个对象或每个类的基础上读取或写入数据,确保只有授权用户可以修改您的数据。 访问控制列表 (acls) 一个 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,防止除了指定用户之外的任何人读取或修改它。 类级权限 (clps) clps 管理整个类的默认权限,例如该类是否可以公开读取或写入,或者是否只有某些角色可以访问它。 前往您的 back4app 控制面板 , 选择您的应用程序,然后打开 数据库 部分。 选择一个类 (例如,“待办事项”)。 打开类级别权限 标签。 配置您的默认设置,例如“需要身份验证”以进行读取或写入,或“无访问”以供公众使用。 步骤 4 – 编写和部署云函数 云代码是 parse server 环境的一个功能,允许您在服务器端运行自定义 javascript 代码——无需管理自己的服务器或基础设施。通过编写云代码,您可以通过额外的业务逻辑、验证、触发器和集成来扩展您的 back4app 后端,这些都可以在 parse server 上安全高效地运行。 工作原理 当您编写云代码时,通常会将您的 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)") } 社交登录集成 您可以通过配置 authdata 来集成流行的提供商,如 google、apple 或 facebook。详细说明各不相同,请参考 社交登录文档。 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 `; }); 部署您的云代码 与新工作 前往 back4app 控制面板 > 应用设置 > 服务器设置 > 后台作业 安排 工作(例如,每日)。 步骤 9 – 集成 webhooks webhooks 允许您的 back4app 应用在某些事件发生时向外部服务发送 http 请求。这对于与第三方系统(如支付网关、电子邮件营销工具或分析平台)集成非常强大。 导航到 webhooks 配置 在您的 back4app 控制面板 > 更多 > webhooks 设置端点 (例如, https //your external service com/webhook endpoint )。 配置触发器 以指定您的 back4app 类或云代码函数中的哪些事件将触发 webhook。 例如,如果您想在创建新待办事项时通知 slack 创建一个接受传入 webhook 的 slack 应用 复制 slack webhook url 在您的 back4app 控制面板中,将端点设置为该 slack url,用于事件“todo 类中的新记录。” 步骤 10 – 探索 back4app 管理面板 该 back4app 管理应用 是一个基于网络的管理界面,旨在让非技术用户执行 crud 操作并处理常规数据任务,而无需编写任何代码。它提供了一个 以模型为中心 , 用户友好 的界面,简化了数据库管理、自定义数据管理和企业级操作。 启用管理应用 启用 它的方法是前往 应用仪表板 > 更多 > 管理应用 并点击“启用管理应用。” 创建第一个管理员用户 , 这将自动在您应用的架构中生成一个新角色 ( b4aadminuser ) 和相关类。 选择一个子域名 以访问管理界面并完成设置。 登录 使用您创建的管理员凭据以访问新的管理应用仪表板。 一旦启用,back4app 管理应用程序使您可以轻松查看、编辑或删除数据库中的记录——无需直接使用 parse dashboard 或后端代码。 结论 通过遵循本综合教程,您已经: 创建了一个安全的后端 用于 back4app 上的 macos 应用程序。 配置了一个数据库 具有类模式、数据类型和关系。 集成了实时查询 (实时查询)以实现即时数据更新。 应用了安全措施 使用 acl 和 clp 来保护和管理数据访问。 实现了云代码 函数以在服务器端运行自定义业务逻辑。 设置了用户身份验证 支持电子邮件验证和密码重置。 管理文件上传 和检索,具有可选的文件安全控制。 调度云作业 以进行自动化后台任务。 使用 webhooks 与外部服务集成。 探索了 back4app 管理面板 以进行数据管理。 凭借坚实的 macos 前端和强大的 back4app 后端,您现在已具备开发功能丰富、可扩展且安全的桌面应用程序的能力。继续探索更高级的功能,集成您的业务逻辑,并利用 back4app 的强大功能为您节省无数小时的服务器和数据库管理时间。 下一步 构建一个生产就绪的 macos 应用程序 通过扩展这个后端以处理更复杂的数据模型、缓存策略和性能优化。 集成高级功能 例如专业的身份验证流程、基于角色的访问控制或外部 api(如支付网关)。 查看 back4app 的官方文档 以深入了解高级安全性、性能调优和日志分析。 探索其他教程 关于实时通信、物联网仪表板或基于位置的服务。将这里学到的技术与第三方 api 结合起来,创建复杂的现实世界应用程序。