Appwrite 0.14 版本发布啦!新增 11 个云函数运行时!🥳
Appwrite 又来啦!0.14 版本现已正式上线,带来诸多改进!新版本我们重点关注了 Appwrite 社区呼声最高的功能。凭借众多令人兴奋的新功能和重要的错误修复,Appwrite 0.14 能够提供更高的灵活性、更佳的性能和更强大的集成能力,助您打造下一个精彩项目!让我们深入了解一下这个版本有哪些亮点吧!🏊♀️
⏰ 太长不看
此次更新重点在于事件和证书两大领域。借助全新的事件模型,您可以更精准地触发操作。证书方面的改进使得生成和管理 Let's Encrypt 生成的证书更加便捷、可扩展且可靠。现在,您可以安心地坐在椅子上,欣赏域名前那醒目的绿色小锁图标了🍹
除了这些功能之外,我们还引入了新的OAuth 提供程序、存储适配器和函数运行时,以支持更多平台上的更多精彩应用。一些值得关注的小功能包括通配符主机名、Swift 中的 Async/Await 支持,以及使用Appwrite CLI忽略文件的功能。最后,我们还修复了Appwrite 控制台 UI和API 签名方面的错误,并改进了用户体验。
Appwrite新手?
Appwrite是一款开源的后端即服务 (BaaS),它通过提供一套 REST 和实时 API 来满足您的核心后端需求,从而抽象化构建现代应用程序的所有复杂性。Appwrite 为开发人员承担了繁重的工作,并处理用户身份验证和授权、数据库、文件存储、云函数、Webhook 等等!
🧠 事件模型,一种明智的方式
我们很高兴地宣布,现在支持更多事件,您可以根据需要进行具体或通用的配置。例如,以前,当创建一个新的数据库文档时,会触发以下事件:
database.collections.create
这很棒,但如果你有很多集合呢?每个集合都会触发很多事件。如果你只对其中一个集合中的事件感兴趣呢?
借助新的事件模型,我们可以指定我们感兴趣的特定资源。如果只对[MY_COLLECTION]集合中的文档感兴趣,则上述示例可以写成如下形式:
collections.[MY_COLLECTION].documents.*.create
[MY_COLLECTION]如您所见,我们已明确指定,在新语法中,我们只对集合中的事件感兴趣。您还可以注意到,该*符号表示我们对集合中的所有文档都感兴趣。这种新语法将允许开发人员更精确地控制事件,并将不必要的 Webhook 和函数执行次数降至零。
🔐值得信赖的证书
证书生成流程已全面重构,重点在于提升简洁性和可靠性。我们引入了主域名的概念,以确保不会为您不拥有的域名生成证书。
接下来,我们更新了域名和证书的删除方式,确保每个域名只有一个证书,并且仅在所有域名都不再需要该证书时才将其删除。这样可以确保同一个域名在多个 Appwrite 项目中得到正确使用。
我们随后引入了一种机制,用于自动重试证书生成。证书生成失败的原因有很多,例如 5XX 错误、NS 服务器宕机、DNS 配置错误、缓存问题等等。有些错误可以恢复,有些则无法恢复。现在,maintenance工作certificates进程将尝试最多 5 次证书续订和生成,以尽可能解决可恢复的错误。
无需担心请求失败,因为每次证书生成失败时,您都会收到电子邮件通知.env,以便您可以进行调查👀 只需确保您的电子邮件地址已在文件中设置即可。
最后,我们引入了一个新的 CLI 命令,如果您想强制为特定域生成证书,该命令非常有用:
docker-compose exec appwrite ssl domain="api.myapp.com"
👪 C++、.NET、Java 和 Kotlin 也加入了!
欢迎四款全新运行时加入 Appwrite 运行时大家庭🎉 成熟的Java及其合作伙伴Kotlin已正式加入 Appwrite 运行时大家庭。此外,C++和.NET也已加入,旨在确保 Appwrite 开发者能够使用他们最喜爱的语言获得最佳的代码编写体验。现在,创建新的 Appwrite 函数时即可使用所有这些运行时,它们将提供与之前 Appwrite 版本中同样令人惊叹的性能。
我们并未止步于此!在收到大量反馈后,我们实现了函数忽略功能,允许使用Appwrite CLI 的开发者指定哪些文件将包含在部署中。当您不想将某些文件(例如您的主.env文件)与函数一起部署时,此功能非常实用。另一个绝佳的用例是忽略部署不需要但 IDE 需要才能获得正确类型支持的本地依赖项。通过在 Appwrite 函数中使用更智能的忽略功能,部署可以更安全、更快速。所有这些都可以通过.gitignore在函数目录中创建一个文件或在配置appwrite.json文件中进行手动配置来实现。
💪 灵活的通配符主机名
如果您之前搭建过网站或使用过 Appwrite API,那么您很可能遇到过 CORS 问题。归根结底,Appwrite 需要保护您的后端免受不受信任来源的访问。值得庆幸的是,在 Appwrite 0.14 版本中,您现在可以使用通配符*来支持受信任域的所有子域。例如,您可以允许所有子域访问您的服务器。如果您想尝试更高级的操作,甚至可以使用 `<command> ` 或 `<command>` 。但请注意,您允许的*.mydomain.com访问源越多,您对谁可以使用您的后端的控制就越弱!myapp.**
⛔️ 拒绝回拨地狱
Appwrite 0.14 版本重写了 Swift SDK,利用Swift 5.5 中引入的async/await支持,提高了代码的可读性。等待异步代码不仅可以让你用简单的自上而下的代码块编写代码,还可以防止回调地狱和重复抛出错误。
我们先来看看一段不支持 async/await 的代码会是什么样子:
func prepareConnection() {
getJWT() { jwt in
print(jwt) // Do stuff with JWT
}
}
func getJWT(completion: @escaping ((String) -> Void)) {
account.createJWT() { result in
switch result {
case .failure(let error):
fatalError(error.message)
case .success(let response):
completion(response.jwt)
}
}
}
如您所见,我们不得不使用completion回调函数,代码整体看起来非常复杂。让我们用 async/await 支持来增强这段代码:
func prepareConnection() async throws {
let jwt = try await getJWT()
print(jwt) // Do stuff with JWT
}
func getJWT() async throws -> String {
let response = try await account.createJWT()
return response.jwt
}
哇,变化真大!通过将方法标记为async并使用awaitAppwrite 获取数据,我们可以在保持代码简洁明了的同时,实现与以前完全相同的逻辑。
🛰️ 全新提供商遍地开花 - OAuth + 存储!
我们引入了三个新的 OAuth 提供商:Zoom、Okta 和 Auth0,以及三个新的存储适配器:Linode、Backblaze 和 Wasabi。Appwrite一直以来都与其他技术兼容良好,因此技术栈的选择权完全在于您,而非我们。
🤩 还有更多精彩内容!
除了这些令人惊喜的功能之外,我们还决定澄清一些关于用户删除的误解。我们将客户端 SDK 的方法名从 `getUserDelete()` 更改为 ` account.delete()getUserDelete account.updateStatus()()`。新的命名规则旨在表明账户不会被删除,而是状态会更新。要彻底删除账户,您可以使用 Appwrite 控制面板或users.delete()服务器 SDK 中的 `getUserDelete()` 方法。请注意,删除后我们不再保留用户 ID,因此请务必在删除用户之前删除所有用户生成的内容并使其权限失效,以防止数据泄露。
Appwrite 控制台(仪表盘)在此次更新中得到了诸多改进!我们为新的事件模型添加了一个全新的组件,实现了用户身份验证开关,并在团队页面添加了活动选项卡。此外,我们还改进了函数部署日志,修复了数据库屏幕和项目徽标中缺失的属性图标,并更新了枚举属性下拉菜单以显示正确的值。
📚了解更多
这只是 Appwrite 0.14 众多强大功能中的冰山一角!请查看官方版本说明,并持续关注我们的博客文章!在接下来的几周里,我们将逐一介绍所有功能,让它们得到应有的关注。我们迫不及待地想看看您用Appwrite能创造出什么!😎
文章来源:https://dev.to/appwrite/announcing-appwrite-014-with-11-cloud-function-runtimes-36f5



