Quickstarters
Feature Overview
如何为 SwiftUI 构建后端?
40 分
介绍 在本教程中,您将学习如何使用 back4app 为 swiftui ios 应用构建完整的后端。 我们将向您展示如何将 parse swift sdk 集成到您的 swiftui 项目中,并利用 back4app 的关键功能——如数据库管理、云代码功能、rest 和 graphql api、用户身份验证以及实时查询——来创建一个安全、可扩展的后端。 这种方法帮助您安全地存储数据,进行 服务器端 操作,而无需设置自己的基础设施,并根据需要轻松扩展您的 ios 应用 或 web 应用 。 您还将看到 back4app 的快速设置和直观环境如何大幅减少与手动配置自己的服务器和数据库相比所需的时间和精力。 到最后,您将理解 如何为 swiftui 构建后端 ,该后端可以扩展到生产环境或与自定义逻辑和 api 集成。 让我们开始创建一个强大、 可扩展的后端 ,并且开销最小! 先决条件 一个 back4app 账户和一个新的 back4app 项目 开始使用 back4app https //www back4app com/docs/get started/new parse app 如果您没有账户,可以免费创建一个。请按照上面的指南准备好您的项目。 基本的 swiftui 开发环境 您需要在您的机器上安装 xcode 并设置一个基本的 swiftui 或 ios 应用项目。 swift 包管理器或 cocoapods 用于添加 parse swift sdk。 parse swift sdk 文档。 https //github com/netreconlab/parse swift 熟悉 swift 和 swiftui 如果您是 swiftui 新手,请在开始之前查看 苹果的 swiftui 文档。 https //developer apple com/documentation/swiftui 。 在开始之前,请确保这些都已就绪。设置好您的 back4app 项目和本地 swiftui 环境将帮助您更轻松地跟随。 步骤 1 – 设置 back4app 项目 创建新项目 在 back4app 上构建您的 swiftui 后端的第一步是创建一个新项目。如果您还没有创建,请按照以下步骤操作: 登录到您的 back4app 账户 。 点击您的 back4app 仪表板中的 “新应用” 按钮 。 给您的应用命名 (例如,“swiftui backend tutorial”)。 项目创建后,您将在 back4app 仪表板中看到它列出。该项目将是本教程中讨论的所有后端配置的基础。 连接 parse swift sdk back4app 依赖 parse 平台来管理您的数据,提供实时功能,处理用户身份验证等。将您的 swiftui 应用程序连接到 back4app 涉及安装 parse swift sdk 并使用您 back4app 仪表板中的凭据进行初始化。 获取您的 parse 密钥 在您的 back4app 仪表板中,导航到您应用的“应用设置”或“安全性与密钥”部分以找到您的 应用程序 id 和 客户端密钥 (或 javascript 密钥)。您还会找到 parse 服务器 url (通常格式为 https //parseapi back4app com )。 安装 parse swift sdk 如果使用 swift 包管理器 , 请在 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的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 (字符串)和 iscompleted (布尔值)。 back4app 支持多种数据类型: 字符串 , 数字 , 布尔值 , 对象 , 日期 , 文件 , 指针 , 数组 , 关系 , 地理点 , 和 多边形 您可以为每个字段选择合适的类型。 back4app 还提供一个 ai 代理 ,可以帮助您设计数据模型: 从您的应用仪表板打开 ai 代理 用简单的语言描述您的数据模型 (例如:“请创建一个新的待办事项类架构。”)。 让 ai 代理为您生成架构 。 关系数据 如果你有关系数据——比如,一个 类别 对象指向多个 待办事项 项目——你可以在 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)") } } 在查询时,您还可以 include 指针数据: 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 } } } 每当在服务器上创建、更新或删除一个 待办事项 时,您的应用会实时收到通知。此功能对于需要立即数据同步的协作或动态应用非常方便。 步骤 3 – 使用 acl 和 clp 应用安全性 back4app 安全机制 back4app 提供 访问控制列表 (acls) 和 类级权限 (clps) 以确保数据安全。这些功能允许您限制谁可以按对象或类读取或写入数据,确保只有授权用户可以修改您的数据。 访问控制列表 (acls) 一个 acl 应用于单个对象。例如,为了确保只有特定用户可以读取/写入待办事项: 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)") } } 类级权限 (clps) clps 管理整个类的默认设置,例如该类是否可以公开读取或写入,或者是否只有某些角色可以访问它。 前往 back4app 控制面板 并选择您的应用程序。 打开 数据库 部分,选择一个类(例如, 待办事项 )。 打开类级权限 标签。 配置默认设置,例如“需要身份验证”或“无访问权限。” 这些权限设置了一个广泛的基线,而acl允许您在对象级别微调安全性。结合两者可以确保强大的安全模型。有关更多详细信息,请参见 应用安全指南 https //www back4app com/docs/security/parse security 步骤 4 – 编写和部署云函数 云代码 允许您在不管理服务器的情况下运行自定义服务器端swift(或javascript)代码。它非常适合添加业务逻辑、数据验证、触发器或不应从客户端运行的后端集成。 工作原理 编写 您的云代码在一个像 main js (javascript)这样的文件中,或利用基于swift的云代码环境。 部署 到您的back4app项目。代码在parse server的环境中运行,因此您无需维护自己的服务器。 调用 您的云代码从客户端通过swift sdk、rest或graphql。 典型用例 业务逻辑 复杂的数据验证、字段计算或外部集成。 数据触发器 当对象被保存、更新或删除时执行逻辑。 安全性 通过在服务器端运行来保护客户端的敏感操作。 示例函数 以下是一个示例 javascript 云代码(因为云代码主要在 back4app 上使用 js)来计算文本长度: 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 部署 云代码: 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 – 集成 webhooks webhooks 允许您的 back4app 应用在发生某些事件时向外部服务(如 stripe)发送 http 请求。这对于连接第三方工具或其他 服务器端 集成非常有帮助。 转到 webhooks 在您的 back4app 控制面板 > 更多 > webhooks 。 添加一个端点 (例如, https //your service com/webhook )。 配置 哪些事件(例如, todo 类中的新记录)将触发 webhook。 例如,每当用户创建新的待办事项时,您可以发送 slack 消息。这有助于您保持外部服务与您的 back4app 数据同步。 步骤 9 – 探索 back4app 管理面板 “ back4app 管理应用 ”是一个基于网络的管理界面,供非技术用户对您的数据进行 crud 操作。它提供了一个用户友好的 ui,与 parse dashboard 分开,使得在生产中管理数据更容易。 启用管理应用 前往您的 应用仪表板 > 更多 > 管理应用 ,然后点击“启用管理应用。” 创建一个管理员用户 , 这会自动生成一个管理员角色和相关类。选择一个子域名用于管理界面,然后登录以通过简单的点击界面管理您的数据。 结论 通过遵循本综合指南,您已经学会了 如何为swiftui构建后端 使用back4app和parse swift sdk。 如何安全地存储数据 使用自定义类模式和关系。 如何集成实时查询 (实时查询)以实现即时数据更新。 如何应用安全措施 使用acl和clp来保护和管理数据访问。 如何通过云代码运行业务逻辑 。 如何处理文件存储 , 身份验证,以及使用云作业调度后台任务。 如何集成 您的应用程序与外部服务,使用webhooks。 凭借这些技能,您可以构建一个 ios应用 或 web应用 ,易于管理、安全且准备好扩展。探索更多高级功能——如基于角色的权限、推送通知或高级缓存。您还可以集成其他api或根据特定用例定制您的云代码。 快乐编码 , 并享受在 back4app 上构建精彩应用的乐趣! 下一步 生产就绪的 swiftui 应用 扩展此后端以处理更复杂的数据模型、缓存和性能增强。 高级功能 深入了解专业认证、基于角色的访问或第三方 api 集成(如 stripe)。 探索 back4app 的官方文档 深入了解 服务器端 安全性、日志分析和高级数据库调优。 查看其他教程 实时聊天、基于位置的服务或多租户应用——将这里学到的方法与外部 api 结合,创建复杂的现实世界解决方案。