飞布产品手册
官网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 提供支持
在本页
  • 构建OPERATION
  • 路由规则
  • Query Operation
  • Mutation Operation
  • Subscription Operation
  • 状态码

这有帮助吗?

在GitHub上编辑
  1. 基础-可视化开发
  2. API构建

可视化构建

上一页API构建下一页API规范

最后更新于1年前

这有帮助吗?

首先,我们学习如何可视化构建API。

构建OPERATION

飞布的主功能区基于超图的gql 服务构建,其核心目标是,如何快速构建和测试GraphQL operation。

它包含四部分:超图面板、OPERATION编辑区、指令面板、参数输入区(响应区)。

其中,超图面板和OPERATION编辑区功能类似,且互相联动,都用于构建operation。

超图面板以可视化的方式展示当前项目所有的函数(根字段),勾选函数后可在编辑区生成OPERATION,在operation 编辑区手动修改OPERATION后,也会实时反应在超图面板中。

超图面板的所有”函数“,通过发送 GraphQL内省请求拿到,具体如下:

# 超图服务的gql服务端点是:http://localhost:9123/app/main/graphql
curl 'http://localhost:9123/app/main/graphql' \
  -H 'Accept: application/json' \
  --data-raw '{"query":"\n    query IntrospectionQuery {\n      __schema {\n        \n        queryType { name }\n        mutationType { name }\n        subscriptionType { name }\n        types {\n          ...FullType\n        }\n        directives {\n          name\n          description\n          \n          locations\n          args {\n            ...InputValue\n          }\n        }\n      }\n    }\n\n    fragment FullType on __Type {\n      kind\n      name\n      description\n      \n      fields(includeDeprecated: true) {\n        name\n        description\n        args {\n          ...InputValue\n        }\n        type {\n          ...TypeRef\n        }\n        isDeprecated\n        deprecationReason\n      }\n      inputFields {\n        ...InputValue\n      }\n      interfaces {\n        ...TypeRef\n      }\n      enumValues(includeDeprecated: true) {\n        name\n        description\n        isDeprecated\n        deprecationReason\n      }\n      possibleTypes {\n        ...TypeRef\n      }\n    }\n\n    fragment InputValue on __InputValue {\n      name\n      description\n      type { ...TypeRef }\n      defaultValue\n      \n      \n    }\n\n    fragment TypeRef on __Type {\n      kind\n      name\n      ofType {\n        kind\n        name\n        ofType {\n          kind\n          name\n          ofType {\n            kind\n            name\n            ofType {\n              kind\n              name\n              ofType {\n                kind\n                name\n                ofType {\n                  kind\n                  name\n                  ofType {\n                    kind\n                    name\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  "}' \
  --compressed

此外,参数输入区和响应区用于测试OPERATION。

具体操作步骤如下:

1,在"API管理"面板,新建一个API

  1. 勾选 函数底部蓝色字段,生成为 OPERATION选择集

  2. 勾选 函数顶部紫色字段,生成为 OPERATION参数

  3. 点击参数后的$符,参数变成 OPERATION 变量

  4. 若生成有误,也可以在OPERATION编辑区手动修改

3,在指令面板, 点击对应按钮 为OPERATION增加指令,详情见 HTTP请求流程指令

4,OPERATION构建完毕后,在参数输入区录入OPERATION入参,支持两种模式:

  1. 可视化录入:标量正常录入,对象同"源码录入"

  2. 源码录入:以JSON的方式录入变量,输入"双引号"可以触发语法提醒

5,最后,点击指令面板的 "测试"按钮,执行该OPERATION,可在“响应”TAB中查看测试结果。

点击“测试”调用的是GraphQL端点,其执行格式为:

curl 'http://localhost:9123/app/main/graphql'
-H 'Accept: application/json'
--data-raw '{"query":"query MyQuery {\n bg_findFirstPost {\n authorId\n createdAt\n id\n published\n title\n auhor:User {\n email\n id\n name\n role\n }\n }\n}","variables":{},"operationName":"MyQuery"}'
--compressed

测试端点仅用于测试 GraphQL OPEARTION 到数据源的执行情况,未兼容指令。除跨源关联指令外,其他指令均不生效,如角色、响应转换和入参指令等。

这里的”测试“,不同于复制API链接!!!

总的来说,飞布的主功能区就是 gql 服务 控制台的升级版,提供了更加友好的交互。

路由规则

接下来,我们学习Fireboom的路由规则,掌握不同OPERATION 对应的路由。

如上图所示,在根目录下有一个叫做CreateTodo的OPERATION。

Todo/CreateTodo.graphql
mutation MyQuery($title: String = "") {
  todo_createOneTodo(data: {title: $title}) {
    id
    completed
    title
  }
}

当我们保存并上线该OPERATION后,复制其链接可以拿到如下URL。

curl 'http://localhost:9991/operations/Todo/CreateTodo' \
  -X POST  \
  -H 'Content-Type: application/json' \
  --data-raw '{"title":"learn fireboom"}' \
  --compressed

该URL分为3部分:

  • 请求类型:POST,规则:MUTATION对应POST;QUERYR对应GET;SUBSCRIPTION对应GET,且左上角会有一个闪电标识。

  • 请求域名:http://localhost:9991,可在 设置->系统->外网地址 中修改

  • 请求路径:operations/Todo/CreateTodo,规则为:operations/+目录+OPEARTION名称

下面,我们举一些示例:

Query Operation

Page.graphql
query GetTodoList(
  $take: Int = 10, $skip: Int = 0,
  $orderBy: [todo_TodoOrderByWithRelationInput], 
  $query: todo_TodoWhereInput) {
  data: todo_findManyTodo(skip: $skip take: $take orderBy: $orderBy where: {AND: $query}) {
    id
    title
    completed
    createdAt
  }
  total: todo_aggregateTodo(where: {AND: $query}) @transform(get: "_count.id") {
    _count {
      id
    }
  }
}

对应为GET请求,复制为普通URL,如下:

http://localhost:9991/operations/Page?
# GET QUERY 标量入参
take=10&skip=0&
# GET QUERY 对象入参
orderBy=[{"createdAt":"asc"}]&
query={"title":{"contains":"fireboom"}}
# 加上了?wg_live=true后缀
http://localhost:9991/operations/Page?take=10&skip=0&orderBy=[{"createdAt":"asc"}]&query={"title":{"contains":"fireboom"}}&
wg_live=true

Mutation Operation

Update.graphql
mutation MyQuery($id: Int!,$update: mysql_TodoUpdateInput!, $create: mysql_TodoCreateInput!) {
  mysql_upsertOneTodo(create: $create, update: $update, where: {id: $id}) {
    id
  }
} 

对应为POST请求,复制为curl,如下:

curl 'http://localhost:9991/operations/Lesson0202/Basic/Update' \
  -X POST  \
  -H 'Content-Type: application/json' \
  # POST 对象入参
  --data-raw '{"id":1,"update":{"completed":{"set":true}},"create":{"title":"测试","completed":false}}' \
  --compressed

Mutation 特殊标量入参

RawExecute.graphql
mutation MyQuery($parameters: todo_Json = ["beijing", 1]) {
  todo_executeRaw(
    query: "UPDATE \"main\".\"Todo\" SET \"title\" = $1 WHERE id=$2"
    parameters: $parameters
  )
}
curl 'http://localhost:9991/operations/Lesson0202/Basic/RawExecute2' \
  -X POST  \
  -H 'Content-Type: application/json' \
  # POST 特殊标量JSON 入参
  --data-raw '{"parameters":["beijing",1]}' \
  --compressed

Subscription Operation

Sub.graphql
subscription MyQuery {
  gql_messageCreated {
    content
    id
  }
}

对应为GET请求,复制为如下URL:

# 加上了?wg_sse=true
http://localhost:9991/operations/Sub?wg_sse=true

复制连接中对应的域名:http://localhost:9991,需要前往设置->系统 ->外网地址 中修改。

更多路由规则,详情查看 API规范

状态码

最后,我们学习下状态码。

OPERATION上线后,将被编译为REST API。当用户访问接口时,其对应HTTP流程如上图右侧所示。

常见状态码有如下几种:

  • 200:Operation执行成功

  • 500:Operation执行失败,例如:数据源无法访问时

  • 404:Operation未找到,访问未上线或不存在的OPERATION

然后,经由渲染为如图所示的函数列表。

2,在"超图面板"找到对应"",勾选对应字段,在OPERATION编辑区生成对应的OPERAITON

了解更多,请查看

若Query Operation开启了,则复制为如下URL:

401:身份验证或身份鉴权失败,例如OPEARTION开启了授权登录或使用了

GraphiQL Explorer
实时查询
API管理面板
fromclaim指令
函数