9.1 APP 设计
9.1.1 基础结构
APP 的基础结构采用 JSON 格式定义,包含以下核心字段:
{
"code": "vip.woody.app.test1",
"name": "测试应用",
"logo": "",
"script": "",
"schema": "",
"pages": "",
"config": ""
}
- 字段说明
字段 | 类型 | 必填 | 说明 |
---|---|---|---|
code |
String | ✅ | 应用唯一标识符,相同 code 安装时会覆盖现有应用 |
name |
String | ✅ | 应用显示名称 |
logo |
String | ❌ | 应用图标,支持 base64 编码或图片 URL |
script |
String | ❌ | Lua 后端脚本,控制应用逻辑,详见 APP后端 |
schema |
String | ❌ | 应用定义,经过编码的 JSON 格式 |
pages |
String | ❌ | 前端页面定义,经过编码的 JSON 格式 |
config |
String | ❌ | 应用安装后的配置信息 |
9.1.2 应用定义 Schema
9.1.2.1 结构概览
基础结构如下
{
"data": [
{
"name": "products",
"readable": true,
"writable": false,
"type": "table",
"struct": [
{
"name": "device",
"type": "string"
},
{
"name": "value",
"type": "int"
},
{
"name": "delta",
"type": "int"
},
{
"name": "time",
"type": "int"
}
]
}
],
"input": [
{
"class": "cnc1",
"define": [
{
"code": "products",
"name": "产量",
"type": "int"
}
],
"title": "一类加工机床"
}
]
}
9.1.2.2 data 字段定义
data
字段定义应用的数据存储结构,采用数组格式,每个元素包含以下属性:
属性 | 类型 | 说明 |
---|---|---|
name |
String | 数据表名称 |
readable |
Boolean | 是否可读 |
writable |
Boolean | 是否可写 |
type |
String | 数据类型,目前仅支持 table |
struct |
Array | 表结构定义 |
- 只有自动生成的表格访问API的访问权限受 readable 和 writable 字段控制,后端 Lua 脚本的数据访问不受影响。
9.1.2.3 表结构定义
struct
数组中每个字段包含:
name
: 字段名称type
: 字段类型,支持以下类型:string
字符串类型int
整数类型float
浮点数类型
9.1.2.3.1 自动生成的 API 接口
基于 data
定义,系统会自动暴露以下 RESTful API 接口:
路径参数
code
: 应用标识符table
: 数据表名称id
: 记录唯一标识符数据列表查询
GET /api/app/{code}/data/{table}
查询参数
参数 | 类型 | 默认值 | 说明 |
---|---|---|---|
_start |
Number | 0 | 起始记录位置 |
_limit |
Number | 10 | 返回记录数量 |
{field} |
Any | - | 等值筛选,如 ?value=1 |
>{field} |
Any | - | 大于等于筛选,如 ?>value=1 |
<{field} |
Any | - | 小于等于筛选,如 ?<value=1 |
order |
String | - | 正序排序,如 ?order=value |
-order |
String | - | 倒序排序,如 ?-order=value |
- 新增记录
POST /api/app/{code}/data/{table}
- 单条记录查询
GET /api/app/{code}/data/{table}/{id}
- 修改记录
PUT /api/app/{code}/data/{table}/{id}
- 删除记录
DELETE /api/app/{code}/data/{table}/{id}
9.1.2.4 input 字段定义
input
字段定义APP内的设备和设备映射后的字段,设计思路是因为一个App可能会针对多种不同型号的设备,比如各种PLC和各种CNC,有些功能是需要将不同的设备抽象成一类设备的,需要在此定义一个设备类型,用于之后配置时映射:
{
"class": "cnc1",
"define": [
{
"code": "products",
"name": "产量",
"type": "int"
}
],
"title": "一类加工机床"
}
属性 | 类型 | 说明 |
---|---|---|
class |
String | 设备的类型 |
title |
String | 设备的类型名称 |
define |
Array | 变量的定义 |
变量的定义
属性 | 类型 | 说明 |
---|---|---|
code |
String | 变量code |
name |
String | 变量名 |
type |
String | 变量的类型 |
9.1.3 配置字段 config
config字段用来存储app安装后的配置内容
9.1.3.1 结构概览
基础结构如下
{
"device": [
{
"code": "M06",
"class": "cnc1",
"variable": [
{
"dst": "products",
"src": "cnc_products",
}
]
}
]
}
9.1.3.2 device 字段定义
device
定义IoTBoX采集的设备到APP内设备的映射,采用数组格式
属性 | 类型 | 说明 |
---|---|---|
code |
String | 机床Code |
class |
Boolean | App内设备的类型 |
variable |
Array | 映射变量的定义 |
映射变量的定义
属性 | 类型 | 说明 |
---|---|---|
dst |
String | 原始变量code |
src |
Boolean | App内变量code |
以上配置的含义是,将IoTBoX内配置的采集设备M06作为一个cnc1类型映射进入App,并且将M06采集到的cnc_products作为cnc1的product变量映射进去.