本期推荐的Directus 是用于管理 SQL 数据库内容的实时 API 和应用程序仪表板。
Directus介绍
Directus 是用于管理 SQL 数据库内容的实时 API 和应用程序仪表板。
- 免费和开源。没有人为限制、供应商锁定或隐藏的付费墙。
- REST 和 GraphQL API。立即在任何 SQL 数据库之上构建速度极快的 Node.js API。
- 管理纯 SQL。适用于新的或现有的 SQL 数据库,无需迁移。
- 选择您的数据库。支持 PostgreSQL、MySQL、SQLite、OracleDB、CockroachDB、MariaDB 和 MS-SQL。
- 本地或云。在本地运行、在本地安装或使用我们的 自助云服务(提供免费套餐)。
- 完全可扩展。内置白标,很容易定制我们的模块化平台。
- 现代仪表板。我们的无代码 Vue.js 应用程序对于非技术用户来说是安全且直观的,无需培训。
这个怎么运作
Directus 作为层安装在新的或现有的 SQL 数据库之上。
应用程序和 API 实时动态地“镜像”您的实际架构和内容。这类似于技术数据库客户端(如phpMyAdmin)的工作方式。但是,Database Introspection 有许多独特的优势:
- 绝对控制您的纯 SQL 数据库模式。
- 为您的数据提供完全的透明度、可移植性和安全性。
- 允许导入现有数据库,无需更改且无需迁移。
- 直接数据库访问和原始复杂 SQL 查询的全部功能。
- 通过优化和索引显着提高性能。
它是给谁的?
Directus 让整个团队一起工作并在一个地方访问数据。
开发
人员 开发 人员获得了一个完整的数据连接工具包,其中包含 REST 和 GraphQL API、一个 JavaScript SDK、访问全局变量以自定义配置选项,以及对数字资产的直接命令行访问。
高级用户
数据分析师和数据科学家拥有应用内工具来查询数据、构建应用内分析仪表板以及以文件格式提取或上传数据。此外,这些用户仍然可以自由链接其他服务并直接在数据库上运行原始 SQL 查询。
商业用户
无代码应用程序足够安全和直观,可以让每个人都可以访问数据,即使是最非技术的用户。管理员可以为角色以及单个用户创建完全精细的权限。
安装
通过运行以下 npm 命令创建一个新的 Directus 项目:
npm init directus-project my-project
或者,使用纱线:
yarn create directus-project my-project
只需按照设置提示操作,CLI 就会创建您的新项目目录(例如:)my-project、配置文件和初始数据库。为了充分利用 Directus,并确保您拥有最新的安全补丁,让您的项目保持最新非常重要。
要求
Directus 只需要 Node.js 并支持大多数操作系统和 SQL 数据库供应商。
- Node.js 12.20+
- npm 6.x+
支持的数据库
- PostgreSQL 10+
- MySQL 5.7.8+ / 8+(带有 mysql_native_password)
- MariaDB 10.2.7+
- SQLite 3+
- CockroachDB 21.1.13+ [1]
- 微软 SQL 13+ [1]
- OracleDB 19+ [1]
旧版本可能有效,但未经官方测试/支持。
支持的操作系统
- Ubuntu 18.04
- CentOS / RHEL 8
- macOS Catalina 或更新版本
- 视窗 10/11
- Docker(DockerHub + Dockerfile)
API 参考
动态 API
该平台的 API 使用数据库镜像动态生成 REST 端点和基于连接数据库架构的 GraphQL 模式。由于这些端点根据您的特定架构和配置的权限返回数据,因此 API 的输入/输出对于各个安装有很大不同。
REST 与 GraphQL
REST 和 GraphQL 端点之间的可用功能没有区别。两者中可用的功能都映射到同一组核心服务,这意味着您不会因选择其中一个而失去任何性能或功能。
验证
默认情况下,系统中的所有数据对未经身份验证的用户都是禁止访问的。要获得对受保护数据的访问权限,您必须 在每个请求中包含访问令牌,或者 为公共角色配置权限。
关系数据
Directus 仅检索项目中明确请求的字段。可以使用 REST 中的fields参数或 GraphQL 中的常规嵌套查询来嵌套检索关系数据。例如,这允许您检索文章数据中包含的文章作者,或获取应用程序分析数据的相关日志入口点。
#创建/更新/删除
与获取类似,关系内容也可以进行深度修改。
#多对一
多对一关系的关系管理相当简单。您可以简单地将所需的更改作为对象提交到集合中的关系键下。例如,如果您想在页面上创建新的特色文章,您可以提交:
{
"featured_article": {
"title": "This is my new article!"
}
}
这将在相关集合中创建一条新记录,并将其主键保存在featured_article该项目的字段中。要更新现有项目,只需提供更新的主键,Directus 会将其视为更新而不是创建:
{
"featured_article": {
"id": 15,
"title": "This is an updated title for my article!"
}
}
看到多对一关系将外键存储在字段本身上,可以通过使字段无效来删除项目:
{
"featured_article": null
}
#一对多(/多对多)
一对多,因此多对多和多对任意关系可以通过以下两种方式之一进行更新:
基本的
API 将返回一对多字段作为嵌套键或项的数组(基于fields参数)。您可以使用相同的结构来选择相关项目是什么:
{
"children": [2, 7, 149]
}
您还可以提供一个对象而不是主键来动态创建嵌套的新项目,或者提供一个包含主键的对象来更新现有项目:
{
"children": [
2, // assign existing item 2 to be a child of the current item
{
"name": "A new nested item"
},
{
"id": 149,
"name": "Assign and update existing item 149"
}
]
}
要从此关系中删除项目,只需从数组中省略它们:
{
"children": [2, 149]
}
这种更新一对多的方法对于较小的关系数据集非常有用。
项目设置
一般的
- 项目名称——导航栏顶部和登录/公共页面上使用的名称
- 项目描述符- 显示在导航栏顶部项目名称下方 和登录/公共页面上的描述符
- 项目 URL – 单击模块栏顶部的徽标时的 URL
- 默认语言- 应用程序中使用的默认语言。
模块
- 模块栏– 允许对模块栏中显示的链接进行以下自定义。通过切换复选框显示或隐藏模块,通过拖动排序手柄重新排序链接,或使用以下字段创建新的自定义链接:Name – 模块链接的标题,也显示在悬停时的工具提示中图标– 选择模块按钮的图标URL — 应以Directus 应用程序/中的链接开头
#安全
- Auth Password Policy — 通过 JavaScript 正则表达式为所有用户的密码设置策略要求。支持以下选项:无 — 不推荐弱 – 至少 8 个字符强 – 大写、小写、数字和特殊字符
- Auth Login Attempts — 设置在用户帐户被锁定之前允许的失败登录尝试次数。锁定后,需要管理员用户解锁帐户。
文件和存储
该平台的文件中间件允许即时裁剪和转换图像资产。这意味着您可以简单地请求原始图像,包括任何所需的转换参数,并且您将获得新资产作为响应。
要通过请求大量随机大小来阻止恶意用户消耗您的存储空间,您可以使用以下选项来限制可能的转换。
- Allowed Transformations – 用于启用、禁用或限制图像转换
- 默认文件夹— 设置添加新资产的默认文件夹。这不会影响现有文件。请注意,字段可能会覆盖此值。
- 转换预设– 允许设置特定的图像转换以简化请求或限制使用。Key – 一个唯一标识符,允许更快、更轻松的图像转换请求适合 – 包含(保留纵横比)、覆盖(强制精确大小)、适合内部或适合外部宽度 – 图像的宽度高度 – 图像的高度质量 – 图像的压缩或质量放大 – 启用后,图像不会被放大格式 – 允许将输出格式更改为:JPG、PNG、WebP 或 TIFF
自定义面板
扩展入口点
面板的入口点是扩展包文件夹index内的文件。src/它导出一个配置对象,其中包含配置面板行为的选项。加载面板时,此对象由 Directus 主机导入。
入口点示例:
import PanelComponent from './panel.vue';
export default {
id: 'custom',
name: 'Custom',
icon: 'box',
description: 'This is my custom panel!',
component: PanelComponent,
options: [
{
field: 'text',
name: 'Text',
type: 'string',
meta: {
interface: 'input',
width: 'full',
},
},
],
minWidth: 12,
minHeight: 8,
};
可用选项
- id— 此面板的唯一键。使用作者前缀限定专有面板的范围是一种很好的做法。
- name— 此面板的可读名称。
- icon— 来自材料图标集的图标名称,或 Directus 自定义图标的扩展列表。
- description— 应用程序中显示的此面板的简短说明(<80 个字符)。
- component— 对您的面板组件的引用。
- options— 面板的选项。可以是选项对象或专用的 Vue 组件。
- minWidth- 仪表板上面板的最小网格单位宽度。
- minHeight- 仪表板上面板的网格单位的最小高度。
面板组件
面板组件是扩展程序的一部分,当您的面板应用于 Insights 模块内的仪表板中的数据可视化时,Directus 应用程序将呈现该组件。这个面板组件必须是 Vue 组件。编写 Vue 组件最直接的方法是使用 Vue 单文件组件语法。
使用 Vue SFC 语法的面板组件示例:
<template>
<div class="text" :class="{ 'has-header': showHeader }">
{{ text }}
</div>
</template>
<script>
export default {
props: {
showHeader: {
type: Boolean,
default: false,
},
text: {
type: String,
default: '',
},
},
};
</script>
<style scoped>
.text {
padding: 12px;
}
.text.has-header {
padding: 0 12px;
}
</style>
#可用道具
- showHeader boolean — 是否显示标题。对于基于额外/减少空间的替代样式很有用。
- dashboard uuid – 包含面板的仪表板的 UUID 字符串。
- height number – 面板的当前配置高度。
- width number – 面板的当前配置宽度。
- now Date – 查看包含面板的仪表板时的 Date 对象。
—END—
开源协议:GPL-3.0