00:00:00好的,你已经重建过多少次
00:00:04一模一样的后端了?
00:00:07增删改查、认证、管理面板、文件上传。
00:00:10很多时候,看似在开发,其实只是在重复建设。
00:00:15如果只需将一个工具指向现有的 SQL 数据库,就能获得完整的后端呢?
00:00:21这就是 Directus,一个用于管理 SQL 数据库内容的实时 API 和应用仪表板。
00:00:25许多开发者开始意识到,他们一直以来都在用最笨的方法干活。
00:00:30让我用几分钟时间向你展示这一切是如何运作的。
00:00:33[音乐]
00:00:38对我们大多数人来说,最大的后端问题不是复杂性,而是重复。
00:00:42我们不是在解决新问题,而是一遍又一遍地编写同样的代码,
00:00:44这真的只是在浪费我们的时间。
00:00:46Directus 省去了所有这些环节。
00:00:50它直接连接到你的 Postgres、MySQL 或 Oracle 数据库。
00:00:53无需迁移,也无需在别处重建你的整个模式。
00:00:57我们立即就能获得 REST 和 GraphQL API,
00:01:01字段级权限、实时订阅、
00:01:05工作流与自动化、文件处理,以及一个整洁的管理 UI。
00:01:08最酷的地方在于,你的数据库保持原样。
00:01:10它不是某种重复的层。
00:01:12这一点比听起来重要得多。
00:01:13现在让我给你们演示一下。
00:01:17如果你喜欢开源工具和提升工作流效率的代码技巧,
00:01:18请务必订阅。
00:01:20我们经常会发布新视频。
00:01:24好了,现在从零开始,使用全新的 Directus 安装,
00:01:27没有数据库表,没有任何预载内容。
00:01:32在我注册完账号后,这就是一个完全空白的画布。
00:01:34与其连接到现有的东西,
00:01:39我打算在短短一分钟左右的时间里构建一个完整的订单管理应用。
00:01:45首先,我创建一个集合,命名为 "Orders",就像这样。
00:01:45搞定。
00:01:51现在应用有了一个存储数据的地方,我们现在可以添加更多细节。
00:01:54我会选择并覆盖我们需要的字段,
00:01:58比如客户、日期,以及所有这些有趣的内容。
00:02:00然后我可以手动添加任何其他
00:02:03我们认为这种应用可能需要的字段。
00:02:08比如我可以添加客户名称、电子邮箱,以及作为下拉菜单的产品,
00:02:10我可以为其添加键和值。
00:02:13我也可以对金额和状态执行同样的操作。
00:02:16每个字段都为我们要存储的数据增加了更多细节。
00:02:18注意这里缺了什么。
00:02:19没错,就是 SQL。
00:02:20这里没有 SQL。
00:02:22没有迁移。
00:02:25不需要切换选项卡去编写模式文件。
00:02:28它会立即直接保存在 Directus 中。
00:02:32现在我可以跳转到内容视图,开始添加订单。
00:02:35我可以添加第一个订单,只是个测试账号。
00:02:36我再添加一个。
00:02:39然后我们可以添加第三个,对吧?
00:02:42现在系统里已经有三个不同的订单了。
00:02:45现在我这里有一些真实的数据可以开始操作了。
00:02:49但目前它是完全开放的,这意味着任何人都可以做任何事。
00:02:50所以我们来解决这个问题。
00:02:51怎么解决呢?
00:02:53当然是通过权限设置。
00:02:55我进入 "Public"(公共)角色。
00:02:58找到我们创建的 "Orders" 集合。
00:03:00我们可以开启读取权限。
00:03:03我要确保这里其他的权限都是关闭的。
00:03:05所以创建、更新、删除。
00:03:06这些权限都没了。
00:03:10现在它更受控,也更符合我们的安全需求。
00:03:12好了,这里开始变得非常酷了,
00:03:16因为我们可以围绕这个进行自动化并构建流程。
00:03:19我点击这里,创建一个新流程。
00:03:22我就给它起个简单的名字,叫什么好呢?
00:03:24就叫 "新订单通知" 吧。
00:03:26名字很简单,但说明了意图。
00:03:31我会选择我们创建的 "Orders" 集合中的所有项。
00:03:33现在我可以构建一个触发器。
00:03:37对于触发器,我关联到新项创建时,
00:03:39特别是那个 "Orders" 集合。
00:03:43现在每当有新订单进来时,就会触发某些动作。
00:03:44我要添加一个操作。
00:03:46我们要发送一封电子邮件。
00:03:47填写邮件主题。
00:03:49把我的邮箱加进去。
00:03:52然后在正文里,我会拉入订单数据。
00:03:56这样每当有新订单存入,它就会把数据推送到邮件里。
00:04:00现在我可以保存这个操作,保存流程,大功告成。
00:04:02好了,看这个。
00:04:03我退回去。
00:04:07在我最初的 Docker Compose 文件中,我添加了 Mailpit 来测试这个。
00:04:11这只是测试邮件发送功能的一种非常简单的方法。
00:04:14当我再创建一个订单时,和之前一样,没什么特别的,
00:04:16但这次情况不同了。
00:04:20这现在会自动触发流程,并发出包含详情的邮件。
00:04:22这里没有编写后端逻辑。
00:04:25不需要手动把各个环节连起来。
00:04:30开始时什么都没有,没有表,没有后端,没有真正的结构。
00:04:33但在短短几分钟内,它就变成了一个带有数据权限且具备
00:04:35自动化的可用应用,这正是最酷的部分。
00:04:38这就是 Directus 让人觉得很酷的原因。
00:04:43它就像是可视化数据库逻辑与内置的 n8n 或 Zapier 的结合体,
00:04:45但它真正的竞争对手并不是这些。
00:04:47那么 Directus 到底是什么?
00:04:52它是一个位于 SQL 数据库之上的开源数据平台。
00:04:53它不是在数据库旁边,
00:04:55而是直接坐在它上面。
00:04:58这种 "数据库优先" 的模型才是核心所在,对吧?
00:04:59那么这对我们到底意味着什么?
00:05:01它意味着几件事。
00:05:03意味着没有厂商锁定。
00:05:07完整的 SQL 依然在那儿,而且它可以与遗留系统配合使用。
00:05:13这就是为什么人们将其用于 SaaS 后端、内部工具、无头 CMS 设置,
00:05:15以及带有受控数据的 AI Agent。
00:05:19你试图在不重写一切的情况下实现旧系统的现代化。
00:05:21你的数据库才是真正的引擎。
00:05:24Directus 只是给它加了一个仪表板和控制装置。
00:05:28乍一看,如果你用过 Strapi、Payload 或 Hasura 等工具,
00:05:33Directus 看起来会很相似,但它们实际上解决的是不同的问题。
00:05:36Strapi 和 Payload 是代码优先的。
00:05:40你在代码中定义模式,然后在那里重建你的结构。
00:05:42这样做行得通,但那是额外的工作。
00:05:45Directus 通过一些调整改变了一些东西。
00:05:50由于你的模式已经存在,你只需连接它,而无需重建。
00:05:52这完全是另一种工作流。
00:05:58Hasura 非常适合快速生成 GraphQL,但 Directus 的覆盖面更广。
00:05:59你会得到 API。
00:06:05是的,我们确实能得到,但我们也得到了管理工作区、权限、文件和自动化。
00:06:10而这是大多数开发者试用后最关心的部分:权限。
00:06:12我在这里说的不仅仅是规则。
00:06:15我们说的是无需插件即可实现的真实控制。
00:06:18所以,如果你的问题是 "我需要后端",你有很多选择。
00:06:23但如果你的问题是 "我不想再重造后端轮子",那情况就不一样了。
00:06:26显然,没有工具是完美的,但这个已经相当不错了。
00:06:28我觉得哪些地方特别酷?
00:06:29嗯,权限系统非常顺手。
00:06:30这太棒了。
00:06:32流程自动化省去了我们很多琐碎的工作。
00:06:37UI 非常干净、快速,而且很容易用 Docker 部署。
00:06:39最重要的是,它的扩展性非常好。
00:06:43但在所有这些优点之外,肯定也存在权衡。
00:06:46缺点包括:高级流程可能需要很多时间去配置,对吧?
00:06:49如果你玩过 n8n 或其他类似工具,你就懂我的意思。
00:06:51文档并不总是那么完善。
00:06:54如果你选择自托管,你需要自己管理基础设施。
00:06:57此外,复杂的本地设置可能会变得一团糟。
00:07:00Directus 只是消除了某种非常特定的重复后端工作。
00:07:02那么,Directus 值得吗?
00:07:03对我们很多人来说,可能确实值得。
00:07:07这取决于我们在做什么,尤其是如果你已经有了 SQL 数据,或者你
00:07:11厌倦了遍又一遍地重建这些基础后端,那么是的,
00:07:13它具有实实在在的价值。
00:07:17它节省了时间,减少了维护成本,而且让你保留了对数据的控制。
00:07:19再说一次,它是开源的。
00:07:20我们拥有控制权。
00:07:22什么时候你不该用它?
00:07:26如果你处在一个严格的 TypeScript 环境,比如超大型的 monorepo,那可能不合适,对吧?
00:07:29如果你没有现成的数据库,可能也不合适。
00:07:33如果你想从一开始就在代码中定义一切,那么像 Payload 这种工具
00:07:34在这里会更有意义。
00:07:38但如果你现在在想:等等,这东西能直接坐在我的数据库上面?
00:07:39没错,它可以。
00:07:41所以它可能值得一试。
00:07:45如果你喜欢这类开源工具和代码技巧,请务必订阅
00:07:46Better Stack 频道。