• 首页
  • 产品中心
    • 数式Oinone四大产品

      低代码开发平台无代码开发平台集成开发平台AI大模型开发
    • 数式Oinone体系能力

      用户与组织权限管理文件管理消息中心国际化业务审计
    • 数式Oinone核心产品特性

      低无一体面向软件公司场景无限制应用级扩容可分可合
  • 服务中心
    • 客户服务

      预约演示方案咨询私有部署找人定制
    • 开发者

      问答下载
    • Oinone学院

      社区学习

    《精讲面向软件公司的低代码平台——以Oinone为例》

  • 合作伙伴
    渠道申请伙伴名录专家库
  • 关于数式
0571-88757863

网关协议 API(Protocol API)


一、请求 URL 规范

http://127.0.0.1:8090/pamirs/DemoCore?scene=redirectListPage
组成部分说明
服务器地址127.0.0.1
,支持 IP 地址或域名
服务端口8090
,默认服务端口号
固定路径pamirs
,协议统一前缀
模块名称DemoCore
,指定目标业务模块
场景信息scene=redirectListPage
,通过 URL 参数传递请求场景
请求来源模块由 HTTP 头部信息携带,用于负载均衡时进行后端服务器路由策略匹配

应用场景:在分布式系统中,可根据模块名称DemoCore将请求定向到特定的服务器集群,实现流量分发与负载均衡。

二、请求协议

Oinone 前后端网络协议采用 GraphQL 和 RSQL 相结合的方式。GraphQL 作为 API 查询语言,负责定义数据的查询和操作规范;RSQL 则用于参数化过滤数据,两者协同工作,为 Oinone 系统提供高效、灵活的数据交互能力。

(一)GraphQL 协议详解

1、GraphQL 基础概念

GraphQL 是一种用于 API 的查询语言,基于类型系统执行查询。它不依赖特定数据库或存储引擎,而是通过定义类型、字段及解析函数,实现客户端与服务器之间的数据交互。GraphQL 服务由类型定义和字段解析函数构成,客户端通过query获取数据,mutation修改数据,subscription接收数据更新。

2、Oinone 对 GraphQL 的扩展

Oinone 在标准 GraphQL 基础上,扩展支持了以下数据类型:

  • 数值类型:BigDecimal、BigInteger、Double
  • 时间类型:Date
  • 特殊类型:Html、Money、Void
  • 集合类型:Map、Obj

3、GraphQL 示例

查询示例

query {
  testModelQuery {
    queryInfo(id: 123) {
      name
      description
    }
  }
}

上述查询通过testModelQuery下的queryInfo函数,传入id参数,获取指定名称和描述。

分页查询示例

query {
  testModelProxyQuery {
    queryPage(
      page: { currentPage: 1, pageSize: 10 }
      queryWrapper: { rsql: "(status==\"ENABLED\")", queryData: {} }
    ) {
      content {
        id
        name
        status
      }
      totalPages
      totalElements
    }
  }
}

该查询使用queryPage函数进行分页查询,并通过queryWrapper中的rsql字段传递 RSQL 过滤条件。

修改数据示例

mutation {
  testModelMutation {
    create(data: { name: "testName" }) {
      id
      name
    }
  }
}

通过testModelMutation下的create函数创建新数据。

(二)RSQL 协议详解

1、RSQL 基础概念

RSQL 是基于 FIQL 的参数化过滤语言,核心特性:

  • 逻辑运算符:
    • ; 或 and:逻辑与
    • , 或 or:逻辑或
  • 比较运算符:plaintext
== 等于
!= 不等于
=lt= 小于
=le= 小于等于
=gt= 大于
=ge= 大于等于
=in= 包含于
=out= 不包含于

2、Oinone 对 RSQL 的扩展

Oinone 在 RSQL 基础上,新增以下操作符:

  • 正常类型:
    • 为空:=isnull=
    • 不为空:=notnull=
    • 模糊匹配:=like=
    • 不模糊匹配:=notlike=
    • 列相等:=cole=
    • 列不相等:=colnot=
    • 前缀匹配:=starts=
    • 无前缀匹配:=notstarts=
    • 后缀匹配:=ends=
    • 无后缀匹配:=notends=
  • 二进制枚举:
    • 交集:=has=
    • 无交集:=hasnt=
    • 包含:=contain=
    • 不包含:=notcontain=

3、RSQL 与 GraphQL 结合示例

在 GraphQL 的queryPage查询中,通过queryWrapper的rsql字段传递 RSQL 过滤条件:

query {
  testModelProxyQuery {
    queryPage(
      page: { currentPage: 1, pageSize: 10 }
      queryWrapper: {
        rsql: "name==\"testName\" and status=in=(ENABLED,PENDING)",
        queryData: {}
      }
    ) {
      content {
        id
        name
        status
      }
      totalPages
      totalElements
    }
  }
}

查询说明:通过 RSQL 条件筛选出名称为testName且状态为ENABLED或PENDING的模型数据。

(三) GraphQL 与 RESTful 的优势对比

特性RESTfulGraphQL
数据获取方式多个 URL 端点,固定数据结构返回单一端点,按需获取数据
灵活性结构固定,扩展性较差灵活定义查询,适应复杂需求
数据传输效率可能存在超额或不足获取数据精确返回所需数据,减少传输量
版本控制URL 中包含版本,非强制强制向后兼容,更安全
错误处理需在代码中内置错误处理强类型检查,自动生成错误消息
适用场景简单数据来源,资源明确复杂、关联数据,客户端需求多变

(四)Variables

1、Variables 变量

前端可通过 GraphQL 的Variables属性传递额外信息,如:

{
  "scene": "菜单入口"
}

后端通过PamirsSession.getRequestVariables()获取变量值。

PamirsRequestVariables variables = PamirsSession.getRequestVariables();
String scene = variables.getVariables().get("scene");

2、请求策略requestStrategy

配置项取值范围说明
checkStrategyRETURN_WHEN_COMPLETED
/ RETURN_WHEN_ERROR
校验策略,控制结果返回时机
msgLevelDEBUG
/INFO
/WARN
/SUCCESS
/ERROR
消息级别过滤,仅返回指定级别以上的消息
onlyValidatetrue
/ false
是否仅执行校验,不提交数据
{
 	"requestStrategy": {
  	"checkStrategy": "RETURN_WHEN_COMPLETED",
    "msgLevel":"INFO"
	}
}

requestStrategy策略可有效控制Validation校验约束的执行。Validation已在 ORM API 和 Function API 中说明,能够作用于模型、字段、函数等不同层级,实现灵活且精准的业务校验。

(五)占位符 PlaceHolder

在 Oinone 开发中,当遇到需要前端传递一些只有后端才知道值的参数时,可使用后端占位符。

1、后端定义占位符:

新建一个类继承 AbstractPlaceHolderParser,定义占位符。例如定义 currentUserId 占位符:

@Component
public class UserPlaceHolder extends AbstractPlaceHolderParser {
    @Override
    protected String value() {
        return PamirsSession.getUserId().toString();
    }

    @Override
    public Integer priority() {
        return 10;
    }

    @Override
    public Boolean active() {
        return Boolean.TRUE;
    }

    @Override
    public String namespace() {
        return "currentUserId";
    }
}

2、前端使用后端占位符:

在前端设置过滤条件等场景中使用占位符,如在表格视图的 search 部分设置 domain 过滤条件:

<template slot="search"  cols="4">
  <field data="relatedItems"  label="关联项目"  domain="creatorId == $#{currentUserId}"/>
</template>

前端提交时会将 # 过滤掉,后端自动将占位符替换为实际值。

Oinone 通过 GraphQL 和 RSQL 的结合,实现了高效、灵活的数据交互。GraphQL 负责定义数据查询和操作规范,RSQL 用于数据过滤,两者优势互补。同时,GraphQL 相比 RESTful 在数据获取效率、灵活性和错误处理等方面具有显著优势,更适合复杂数据场景。

编辑此页
最近更新:2026/1/15 04:02
上一页
安全机制(Security in Oinone)
下一页
请求上下文 API(Request Context API)
默认页脚
Copyright © 2026 Mr.Hope