飞布产品手册
官网B站Github
V1.0
V1.0
  • 序言
  • 更新日志
  • 产品简介
    • 什么是飞布?
    • 飞布的价值
    • 飞布的优势
    • 应用场景
    • 数据安全
    • 产品案例
  • 快速入门
    • 初识飞布
    • 快速上手
      • 图文版
    • 词汇概览
    • 工作原理
  • 基础-可视化开发
    • 概览
      • CLI
      • 控制台
        • 主功能区
    • 数据源
      • 数据库
        • 数据库连接
          • 高级设置
        • 数据建模
        • 数据预览
      • REST 数据源
      • GraphQL 数据源
      • 消息队列
    • API构建
      • 可视化构建
        • API规范
      • 批量新建
      • HTTP请求流程指令
      • 使用API
      • 实时查询
      • 实时推送
      • 关联查询
      • 数据缓存
      • 常见用例
    • 身份验证
      • 授权码模式
        • 身份验证(废弃)
      • 隐式模式
      • 数据权限控制
    • 身份授权
      • RBAC
        • 授权与访问控制(废弃)
      • 接口权限控制
      • 开放API
    • 文件存储
      • S3配置及使用
      • 文件管理面板
      • 高级配置:profile
  • 进阶-钩子机制
    • 钩子概览
    • 启动钩子
      • Node钩子
      • Golang钩子
      • Python钩子
      • Java钩子
    • OPERATION钩子
    • 身份验证钩子
    • graphql钩子
    • 函数钩子
      • functions(废弃)
      • proxys(废弃)
    • 文件上传钩子
    • 内部调用
  • 使用-部署上线
    • 部署运维
      • 手动部署
        • 流水线部署(废弃)
      • Docker部署
      • 飞布云
    • 接口安全
      • CSRF token 保护
      • 跨域访问
    • 客户端SDK
      • 微信小程序SDK
      • Flutter SDK
      • uniapp SDK
  • 环境准备
    • 文件存储 S3
    • 身份认证 OIDC
    • NodeJs环境
  • 实战案例
    • Fireboom Admin
      • 管理后台-refine(废弃)
    • 实时TODO LIST
    • 语音版ChatGPT
    • AI魔法师实战
    • 阿里低代码引擎
  • 路线图
  • 常见问题
  • 核心概念
    • GraphQL
    • 超图
    • 请求时序图
    • 服务端Operation
  • 二次开发
    • 钩子规范
      • 钩子规范bak
    • 模板规范
    • 自定义模板
    • 其它参考
由 GitBook 提供支持
在本页

这有帮助吗?

在GitHub上编辑
  1. 基础-可视化开发
  2. 数据源
  3. 数据库
  4. 数据库连接

高级设置

在数据库中存储JSON列是很常见的用例。如果你使用数据库,例如PostgreSQL,你可以使用 json 或jsonb 类型存储JSON列。在GraphQL schema中,该列将被表示为JSON 标量类型。在内部,把值存储到数据库之前,飞布将json值编码为字符串,并在从数据库读取时解码它。这样,JSON标量类型非常容易使用。

然而,该方法有个缺点。如果你打算存储复杂JSON对象,你无法利用GraphQL的类型系统优势。不容易从JSON对象中选择特定的字段。你必须要手动解析它,并且选择你想要的字段。

高级设置就是解决该问题的机制。飞布允许您扩展GraphQL Schema并用自定义类型替换特定的JSON字段。通过这种方式,你可以利用GraphQL的类型系统,同时能够将数据作为JSON对象存储在数据库中。

接下来让我们用具体示例说明下:

增加自定义类型前的OPERATION
mutation (
  $message: String!
  $payload: JSON! # 这是JSON字段
)  {
  createOnemessages: db_createOnemessages(
    data: {
      message: $message
      payload: $payload
    }
  ) {
    id
    message
    payload # 这里是JSON字段,是标量类型,客户端需要知道如何去解析它
  }
}

该操作声明了创建消息的接口。$message是字符串类型。$payload是JSON类型,没有方法可以校验入参。

现在我们用高级设置功能扩展GraphQL Schema。

首先,在自定义类型中,填写如下GraphQL Schema。

# 响应类型结构体
type MessagePayload {
    extra: String!
}
# 入参类型结构体
input MessagePayloadInput {
    extra: String!
}

它将为"GraphQL Schema"增加两个结构体,type开头为响应类型结构体,input开头为入参类型结构体。

接下来,定义想要替换的JSON字段。

在字段类型映射中,选择表messages,字段payload,响应类型MessagePayload,输入类型MessagePayloadInput。

系统底层构建如下结构体:

[
    {
      entityName: 'messages',
      fieldName: 'payload',
      responseTypeReplacement: 'MessagePayload',
      inputTypeReplacement: 'MessagePayloadInput',
    },
  ]

最终,我们定义了输入字段替换和响应字段替换的类型。

现在,我们可以构建如下OPERATION,解决上述问题。

  • payload入参:替换成了db_MessagePayloadInput对象,基于该对象可以实现入参校验

  • payload响应:替换成了db_MessagePayload对象,可以“炸开”该对象,选择所需字段

增加自定义类型后的OPERATION
mutation (
  $message: String!
  $payload: db_MessagePayloadInput! # 这里的JSON变成了对象
)  {
  createOnemessages: db_createOnemessages(
    data: {
      message: $message
      payload: $payload
    }
  ) {
    id
    message
    payload { # 可以看到这里可以"炸开"了
      extra
    }
  }
}
上一页数据库连接下一页数据建模

最后更新于1年前

这有帮助吗?

数据库高级设置