trombone-techniques
使用 Metronomes 和 Tuning 设备来增强 Trombone 练习
Table of Contents
为什么Directus是现代开发者无头的 CMS
内容驱动的应用程序需要一个将灵活性、性能和数据架构完全控制相结合的后端。 Directus 已经成为一个站立式的无头CMS,因为它将一个强大的实时SQL数据库包裹到一个干净的,可扩展的API层中,而不会强制硬化的内容模型。与迫使您进入一个预先定义的SQL数据库的平台不同,Directus 与任何SQL数据库合作,并赋予您对数据完全的所有权。这种灵活性与直观的admin仪表板和强大的SDK相结合,使得Directus 理想地进行从简单的博客到多渠道的数字体验等一系列项目。该平台是开放的,完全可以自我接受,并为不愿处理基础设施的团队提供管理下的云选项。
Directus的数据 – 第一哲学
大多数传统的 CMS 平台将基础数据库隐藏在抽象层后面, 将内容当作一个事后思考。 Directus 翻转了这个模型: 它将您的关系数据库作为唯一的真理源。 您使用标准的 SQL 表格、 列和关系设计您的计划, Directus 自动从该计划中生成一个 RESTful 或 GraphQL API 。 这个数据%% 第一位方法意味着您从不需要像您应用程序所要求的那样与 CMS 战斗来代表您的内容。 它还意味着您的数据仍然可以移植—— 您可以导出它, 迁移它, 或者连接任何其他使用 SQL 的工具 。
直接与 SQL 合作
Directus 运行在 MySQL 、 PostgreSQL 、 SQLite 或其他 SQL 数据库的顶端。 您可以充分利用本地 SQL 索引的全部功能, 加入、 查看、 触发和存储程序, 没有任何中间翻译层可以降低性能或引入意外行为。 当您在 Directus 运行原始查询时, 您直接到您的数据库交谈。 这对那些已经拥有定义良好的数据模型或正在从遗留系统迁移的团队来说特别宝贵, 其计划必须保持不变。 因为 Directus 并没有强制使用ORM , 您避免查询间接操作, 并输入其他无头 CMS 平台常见的 QLMmapping 问题 。
无企业关系
Directus 中的关系是通过数据库中的实际外国密钥处理的。 创建一个 oneto- many 或 many- many 链接与定义适当的列一样简单; Directus 自动发现关系。 系统还支持通过 API 进行嵌入式关系查询, 使您能够在单个请求中获取深层关联的内容。 这种关系能力意味着您可以不使用 Clunky 字段类型工作轮廓来模拟复杂的结构。 Directus 也通过一个交叉表支持许多 o- ny 关系, 使您可以灵活地将任何两个实体连接起来, 而无需预先定义的限制 。
API 生成: 自动、快速和基于标准的 +++
一旦您的数据库设置了计划, Directus 将生成一个 RESTful API( 包含完整的 CRUD 操作) 和一个互补的 GraphQL API 。 两者都遵守行业标准, 使它们很容易从任何客户端- 网络、 移动或服务器- 侧边上消费 。 自动生成的 API 尊重您数据库的制约和权限, 提供字段验证、 数据类型执行和关系完整性, 并且退出框中。 不需要额外的配置文件 — 一旦您连接数据库, API 将立即启用 。
倒数结束点,你可以信任
数据库中的每个表格都成为 REST 端点。 您可以使用查询参数过滤、 排序、 粘贴和汇总结果。 Directus 也支持深层关系过滤, 也就是说您可以在一个 GET 调用中请求作者名称为“ Jane ” 且分类 sattle ” 的文章。 对于更喜欢可预见、缓存的接口的开发者, REST API 提供了成熟的解决方案。 API 也支持批量操作、 嵌入创建和通过查询参数的字段化名, 从而减少了自定义中件的需要 。
复杂查询的图QL
如果您需要获取多资源, 只需请求最少, GraphQL 端点就可以精确定义响应的形状。 Directus 自动生成一个 GraphQL 计划, 以映射您数据库的结构, 包括所有的关系。 前端团队可以精确查询所需的字段, 消除过度的牵引和不足的 。 GraphQL 游戏场嵌入 Directus admin 面板会快速和安全地进行实验。 要了解 GraphQL 的更多信息, 请访问 [ [FLT: 0] 官方 GraphQL 文档[[[FLT: 1] 。 Directus 也支持持续询问, 这样您就可以预先为 QraphQL 复杂操作做准备, 以便更快的执行和更好的缓存控制 。
管理员Dashboard:为编辑和开发者设计
Directus 提供了干净的,白的标签管理界面,完全可以自定义。编辑器看到一个支持丰富文本的视觉数据输入系统,图像上传,文件管理和自定义布局。开发者可以隐藏高级数据库字段,为显示目的重命名列,并添加验证规则——所有规则都不用触碰前端应用程序代码。仪表板是作为一个单一的页面应用程序(SPA)构建的,可以与API分开托管,使您完全控制编辑体验。界面还支持暗模式,键盘快捷键,以及一个在平板电脑和手机上工作的响应性设计。
角色-基于访问控制
安全是通过一个颗粒授权系统处理的。 您可以在表格、 字段甚至项目级别定义角色并指定权限。 例如, 编辑器可能创建并更新文章, 但不会删除, 并且贡献者可能只看到自己的草稿。 所有权限都在API 层执行, 确保任何客户端都无法绕过预期的访问规则。 这使得 Directus 适合在内容敏感度引起关注的应用程序, 如内部文档门户或客户端 facing 发布系统。 您也可以设置文件下载和公开访问特定端点的权限, 使您能够精细地控制谁看到什么 。
自定义布局和接口扩展
在默认的表格和窗体视图之外, Directus 支持诸如 Kanban 板、 日历和地图等自定义的布局。 这些布局是作为扩展构建的, 可以从市场安装, 或者在 QQHO 中开发。 例如, 项目管理应用程序可以使用 Kanban 布局来显示任务, 而事件网站可以使用日历视图来可视化调度。 自定义接口可以使用专门的组件, 如色调选择器或 Google 地图位置选择器来替换默认的输入字段( 如下拉或文本区) 。
广泛性和直接的生态系统
没有一个 CMS 能预测每个使用大小写, 这也是为什么Directus 的构建都考虑到扩展性。 您可以添加自定义端点、 向数据库事件开火的自定义钩子以及自定义的仪表板。 系统还支持文件存储适配器, 允许您将上传的资产存储在本地磁盘 Amazon S3, Google Cloud 存储器, 或支持标准文件系统接口的任何其他提供者 。 有关支持的存储适配器列表, 请参见 [ [FLT: 0]] Directus 文件存储文档 [[FLT: 1] 。 此外, 您还可以将 Directus 与外部服务整合, 既使用网络hooks( 通知第三方系统) , 也使用接收外部来源的数据 。
自动化的钩
Directus hooks允许您在任何 CRUD 动作之前或之后运行自定义逻辑。 例如, 您可能会从标题中生成一个 slot, 当发布新文章时会向 Slack 通道发送通知, 或者将内容同步到外部搜索索引, 如 [[ FLT: 0]] 。 Hooks 使用 JavaScript 写成, 并且可以像需要的那样简单或复杂, 赋予您在不离开 Directus 环境的情况下自动工作流程的权力 。 它们也可以用于验证数据、 转换输入或触发副作用, 如发送电子邮件 。 因为 hooks 运行服务器%%% 1, 它们可以安全访问环境变量和外部 API 。
自定义端点和中件
如果您的应用程序需要超过标准 CRUD 操作的 API 端点, 您可以使用 Directus 的扩展 API 创建自定义端点。 这些端点用 JavaScript 写成, 并访问数据库、 请求上下文和权限系统。 这样您就可以直接通过 Directus API 来曝光自定义的商业逻辑, 比如生成报告、 处理付款或执行复杂的汇总, 而无需建立单独的微服务。 Midware 扩展允许您修改全球范围的请求/ 回应行为, 允许您使用诸如 IP 白名单、 限制费率或自定义认证方案等功能 。
性能和可扩展性
因为Directus基本上是一个细薄的环绕关系数据库的包装器,它的表现配置镜像您基础的 SQL 设置。 Caching可以在 API 级别上使用像 Varnish 或 Nginx 这样的反向代理执行, GraphQL 端点支持持续的查询以优化缓存。对于高的交通应用程序,您可以通过在负载平衡器后面运行多个实例来水平地缩放 Directus API, 而数据库层则独立缩放。 结果是一个内容后端, 可以在没有专门基础设施的情况下处理数百万个条目和数千个同时请求。 Directus 还包括为 admin 仪表板和 API 响应而构建的 caching, 通过环境变量可以配置 。
数据库 + 级别优化
由于 Directus 暴露了本地的 SQL, 您可以独立优化数据库 - 添加索引, 分割大表格, 或使用已实现的视图来进行复杂的聚合 。 API 层不会引入显著的间接费用; 每个请求会被翻译为一个或多个 SQL 查询, 没有额外的抽象 。 对于 read- havy 工作量, 您可以执行读取复制件并配置 Directus , 使用单独的连接来读取和写入 。 对于 写- hivy 方案, 您可以调用连接集合, 并使用同步的钩子来不阻断响应 。
何时选择 Directus 超越其他无头 CMS 选项
Directus在需要完整数据拥有和灵活性的情景中表现突出。 如果您的项目需要复杂的关系模型, 严格遵守遗留的系统或防火墙后面的“ 精确” 部署, Directus 是一个很强的候选人。 对于想要避免供应商锁定的团队来说, Directus 也是非常不错的选择 — 由于您的数据生活在标准的 SQL 数据库中, 您可以随时从 Directus 中切换而不用痛苦的迁移。 相比之下, Commessful 这样的平台提供了与预先定义的内容模型的设置便利, 但是它们限制了您使用本地数据库特性的能力, 并且经常为 API 调用充电。 Directus , 作为开源, 给您自己提供了无限的可扩展性。 另一个流行选项是 Strapi ; 虽然 Strapi 也提供自我托管, 它的数据存储在 SQL 数据库中, 但结构更有影响。 Directus 纯 SQL 方法给了您最大的灵活性。 请参看关于 [[FLT: 0] Directus 比较页面的详细比较 。 [FLT 。 [FLT] 。
实践实例: 建立带有Directus的音乐教育博客
要看到Directus在操作中, 请考虑一个像 trombone 技术博客这样的网站, 需要管理文章、 作者简介、 视频嵌入和可下载的页表音乐。 有了Directus, 您将首先定义 SQL 表格 : [[ [FLT: 1]], [[FLT: 2]], [[FLT: 2]] 。 在创建表格后, Directus 立即生成一个API 和一个管理员界面。 编辑器可以使用丰富的文本编辑器撰写文章, 附加 PDF 文件, 并将每篇文章与一个或多个作者连接。 前端( 用 React, Vue 或 Svelte 创建) 通过 REST 或 GraphQL 获取数据并生成博客。 随着博客的扩展, 您可以添加自定义的钩来生成 SEO 标签, 自动调整图像大小, 并排队列社交媒体帖。 不需要额外的 CMS 插件或中间软件。 同样的设置可以被修改为一个播客目录、 食谱集或 elearchange学习平台。
以自定义的终点扩展音乐博客
假设您想要提供基于标签的“ 建议文章” 特性。 您可以使用自定义的端点查询与当前文章共享标签的文章的数据库, 返回一个被整理的列表。 这个逻辑将封装在一个端点, 使前端简单。 同样, 您可能创建一个端点, 接受搜索词, 并返回多个表格的全文搜索结果, 这对于一个纯API 用户来说是十分麻烦的 。
以 Directus 开始
您可以从两个角度开始 Directus 。 自我托管或通过 Directus Cloud 。 Self\hosting 是直截了当的: 复制寄存器, 建立数据库, 运行 Docker 图像。 官方文档提供了详细的路径。 对于喜欢管理解决方案的团队, Directus Cloud 处理基础设施, 缩放和备份。 在这两种情况下, 核心功能是相同的, 您保留了对数据的全部访问。 请访问 Directus 文档 [ [FLT: 1] 开始 。
一旦安装,第一步是连接您的数据库并探索自动生成的 API。 您不需要先在一个 UI 中写入任何配置文件或定义内容类型 。 只需在 SQL 数据库中直接点到 Directus , 并且它立即通过 API 变得可读和可写。 这种零配置方法将 Directus 与其他无头的 CMS 产品区分开来, 并使其成为一个重视效率和控制力的开发者中最喜欢的。 您可以从简单的表格开始, 逐步添加关系, 并随着项目的发展而随钩和自定义的端点扩展 。
结论
Directus 提供了一种罕见的灵活性、性能和开发者友好的组合。通过将您的 SQL 数据库作为基础,它消除了减缓其他 CMS 解决方案的抽象。它的自动生成的API、颗粒权限和可扩展的钩子系统为您提供了从小营销网站到企业的高级内容平台构建任何东西的工具。对于任何重视完整数据所有权、关系模型的建模能力以及自定义堆栈每一层的能力的人来说,Directus 是一个令人信服的选择,它出现在拥挤的无头CMS 的景观中。
如果您愿意超越CMS的僵硬限制,想要一个适应您的数据模型的系统,而不是相反的Directus,那么值得认真的审视。从的正式文件[ 开始,并用一个测试数据库来体验您从计划到现场的第一手经验。开源社区正在活跃,插件生态系统正在增长,平台的路线图包括不断改进性能和开发者的经验。