加入庆祝活动!Appwrite 1.3 船舶关系
由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!
我们最新发布的 Appwrite 1.3 包含了呼声最高的数据库关系功能🎉。虽然数据库关系功能本身就值得关注,但我们还带来了更多令人兴奋的新功能。数据库是本次发布的重点,新增了一些炫酷的查询运算符,例如` Query.select()OR`或 `OR` Query.isNull()。数据库现在允许您更自由地进行操作,因为部分索引和页面限制已被取消。哦,还有一点我必须强调,全新的控制台 UI 拥有可配置的布局选项和多级菜单,简直太漂亮了😍。身份验证服务新增了一些令人兴奋的密码策略配置,Teams API 现在允许您设置团队偏好。函数服务改进了Appwrite 控制台中的变量 UI,但这还不是全部!快来享用您最喜欢的零食,并欣赏我们的发布公告吧!🍿
🤔 刚接触 Appwrite?
Appwrite是一款开源的后端即服务 (BaaS),它通过提供一系列 REST、GraphQL 和实时 API 来满足您的核心后端需求,从而抽象化构建现代应用程序的所有复杂性。Appwrite 为开发人员承担了繁重的工作,并处理用户身份验证和授权、数据库、文件存储、云函数、Webhook 等等!
🔗 数据库服务中的关系
Appwrite 数据库允许您存储数据并与所有应用用户共享。关系功能允许您在数据之间建立连接,使数据可预测、一致且易于操作。Appwrite 现已推出关系测试版,您现在可以在 Appwrite 控制台中直接设置四种最常见的关系类型,并开始共同查询数据。
借助一对一和多对一关系,您现在可以将相似的数据存储在不同的集合中,并设置不同的权限规则。这既能帮助您构建安全的应用,又能保持数据读取的极简性。
一对多关系为所有数组属性提供了一种强大的替代方案。借助关联集合,您现在可以存储任意复杂度的数据,并根据需要进行查询。您还可以通过一次请求获取所有数据,而无需在客户端进行任何映射。
多对多关系现在变得简单多了。您不再需要管理自己的连接表,我们会为您代劳。
尽管关系听起来很复杂,但使用 Appwrite,无需编写冗长的查询。建立关系后,只需读取文档即可获得预期结果:
const databases = new Databases(client);
const response = await databases.listDocuments('production', 'calendars');
console.log(response);
{
"total": 1,
"documents": [
{
"title": "Meetings",
"events": [
{ "name": "Lunch Break", "date": "2023-04-03T16:30:00.000+00:00" },
{ "name": "Onboarding", "date": "2023-04-03T18:00:00.000+00:00" }
]
}
]
}
就是这么简单!🤩 如果响应数据量过大,Query.select()可以使用新的操作符仅请求您感兴趣的属性。更多内容将在后续章节中介绍🤫
🤸 数据库变得更加灵活
页面最大大小和索引限制虽然能加快最终产品的速度,但也会在开发过程中造成诸多障碍。这些限制甚至阻碍了某些应用场景的实现。但现在情况不同了!
获取文档的最大页面大小限制为 100 页。在 Appwrite 1.3 中,我们取消了此限制。我们注意到,对于许多项目而言,这确实造成了限制,而且实现无限游标分页并非人人都能轻松上手。虽然我们不建议在单个请求中查询数百万个文档,但我们确保为您提供了相应的工具,最终的决定权在于您,开发人员。
Appwrite 1.3 中不再需要为查询设置严格索引!如果您曾经使用过 Appwrite 数据库,很可能遇到过这样的错误⚠️Index Not Found。这种严格的索引在开发过程中可能会造成阻碍,并且对于一些具有复杂筛选功能的用例来说,也可能是一个障碍。在 Appwrite 1.3 中,您将不再收到设置索引的错误提示。
让我们稍微疯狂一下,看看我们现在能做些什么:
const databases = new Databases(client);
const response = await databases.listDocuments('production', 'events', [
Query.limit(999999),
Query.orderDesc('$id'),
Query.orderAsc('name'),
Query.orderDesc('date'),
Query.greaterThan('duration', 60 * 60),
Query.search('description', 'urgent')
]);
console.log(response);
虽然看起来很复杂,但 Appwrite 会接受这个查询并返回结果。随着应用规模的增长,查询速度可能会变慢,所以一定要添加索引!😅
🔍 新增数据库查询
自从我们在 Appwrite 1.0 中发布了上次数据库重构以来,我们注意到使用 Appwrite 数据库的开发者数量大幅增长。数据库变得更快、更强大、更稳定。根据社区的反馈,我们注意到查询功能需要进一步改进,而我们也确实这样做了 😎
我们很高兴地宣布,除了空值查询Query.isNull()之外,用户请求最多的查询功能也已上线Query.isNotNull()。空值查询允许您检查文档中某个属性的值是否已提供,或者在创建文档时是否为空。
随着数据库关系功能的加入,我们决定引入Query.select()类似 GraphQL 的方式,允许开发者指定他们感兴趣的属性。使用 SELECT 查询指定属性不仅可以减小响应的大小,还能提高底层查询的速度和效率。
我们还添加了更多功能Query.startsWith(),Query.endsWith()为您的字符串属性带来更多搜索可能性。虽然这听起来似乎微不足道,但对于许多应用程序来说,这却是一项非常实用的改进,因为之前实现此功能的变通方法过于复杂。
最后,我们新增了一个功能,Query.between()用于提升您在查找特定范围的数值和日期时间查询的性能。虽然之前已经可以使用 `__init__`Query.greaterThan() 和 ` __datetime__` 来实现此功能Query.lessThan(),但通过使用 `__init__`,Query.between()我们发现性能得到了显著提升。我们正在不断努力添加新的查询功能,并计划在未来的每个版本中持续推出新功能。
让我们把所有查询汇总起来,看看它们实际运行的效果!
const databases = new Databases(client);
const response = await databases.listDocuments('production', 'profiles', [
Query.isNotNull('employerId'),
Query.startsWith('phoneNumber', '+61'),
Query.between('age', 15, 18),
Query.select(['twitterUrl', 'linkedInUrl'])
]);
console.log(response);
我们筛选了个人资料,只显示失业人员,他们的电话号码来自加拿大,年龄也适合做学生兼职。我们只获取他们的社交信息,以便能够轻松地与他们取得联系。
✨ 提升密码安全性
为了保障您应用的用户安全,Appwrite 此前已将密码长度限制为至少 8 个字符。今天,我们新增了两条规则,进一步提升了密码安全性。🔥
Appwrite 1.3 现在允许您启用密码历史记录并配置其长度。启用密码历史记录后,用户在更改密码时将无法使用与之前完全相同的密码。密码历史记录的长度允许您设置 Appwrite 应记住的密码历史记录范围,最多可保存 20 个密码。
现在您还可以启用密码字典规则。Appwrite 知道最常用的密码,启用此规则后,将不允许用户设置任何此类密码。它可以防止用户使用类似 `<password>` password、123456678`<password>` 或 ` <password>` 这样的密码qwertyui。Appwrite 目前掌握了 10,000 个最常用的密码,这得益于与其他行业领先的身份验证提供商相同的列表。您可以在 GitHub 上查看此字典列表。
🧑🤝🧑 团队享有优先权
Teams API 已升级,现在可以存储团队偏好设置。与用户偏好设置类似,此功能旨在帮助您存储应用程序配置并将其应用到合适的范围内。例如,您可以将团队偏好设置用于企业应用程序,由团队所有者(公司中的 IT 部门)完成所有配置和布局设置。然后,所有团队成员(所有员工)都可以通过偏好设置读取这些设置,并以完全相同的方式查看应用程序。
有了这项新增的偏好设置功能,您现在可以在所有必要的层级存储偏好设置。例如,假设我们要存储是否启用了深色主题。通过写入本地设备,您创建的偏好设置是会话级别的。当您在新设备上打开应用时,深色主题将不再显示。而使用用户偏好设置并将其存储在用户级别,您登录帐户后即可立即启用深色主题。最后,通过团队级别的偏好设置,您可以与多个用户(例如学生、员工、朋友或社区成员)共享主题。
🔑 导入函数变量
Appwrite 函数中的变量功能允许您设置可在代码中安全访问的密钥。在 Appwrite 1.3 中,我们添加了一个呼声很高的按钮Import .env file🤯。有了这个新功能,您可以从函数文件夹拖放.env文件,控制台会自动添加其中定义的所有变量。此外,所有现有变量的值也会更新为文件中的值。对于那些有很多变量但又不想逐个创建变量的用户来说,这非常实用。
⏩接下来是什么?
随着 Appwrite 1.3 的正式发布,我们已开始积极开发 Appwrite 1.4 的各项功能。部分用户可能已经注意到 GitHub 上关于函数(Functions)的讨论,这也是我们计划在下一个版本中重点关注的功能。一如既往,我们期待收到您的反馈,并将您最期待的功能列为优先事项。
📚了解更多
您可以利用以下资源了解更多信息并获得帮助:
文章来源:https://dev.to/appwrite/join-celebrations-appwrite-13-ships-relationships-57fc


