微服务开发文档

微服务使用JS脚本实现,支持模块化管理、高并发访问、数据库管理,主要用于扩展后端服务,或者创建其他独立的业务逻辑。 可用于实现移动端和服务端访问请求,以及通用的业务处理和数据查询服务。架构图如下所示:

移动端接口

开发者可以在app脚本中通过callMicroService函数来调用微服务。移动端接口可以指定脚本和函数名(默认函数名为main),params直接透传给微服务脚本相应的函数,函数的返回值即为接口返回值。

移动端脚本demo

// 调用接口call_demo,参数分别为'name'和123,返回值为ret
function main() {
    var ret = callMicroService('call_demo', ['name', 123]);
    console.log('ret:' + ret);
}
                                        

服务端脚本demo

// 接口call_demo对应的脚本, name和value为移动端传入的参数
function main(name = '', value = 1) {
    console.log('name:' + name + '  value:' + value);
    return name + value;
}
                                        

服务端接口

第三方服务端可以调用open api:/api/call_micro_service来调用微服务。服务端接口可以指定脚本和函数名(默认函数名为main),query参数params直接透传给微服务脚本相应的函数,函数返回值为接口返回值。

第三方调用demo

// 调用服务端接口call_demo,参数为['name', 123],clientKey和accessToken请替换成自己的鉴权参数
https://aznfz.com/api/call_micro_service?clientKey=xxxxx&accessToken=yyyyy&name=call_demo&isDev=true& params=%5B'name'%2C%20123%5D
                                        

服务端脚本demo

// 接口call_demo对应的脚本, name和value为移动端传入的参数
function main(name = '', value = 1) {
    console.log('name:' + name + '  value:' + value);
    return name + value;
}
                                        

自定义数据

自定义数据用于存放相对比较简单的数据。
开发者在「微服务」/「自定义数据」中创建自定义数据,数据永久保存在云端,可以在移动端脚本中调用getCustomDatasetCustomData函数来获取和设置云数据(建议使用json格式表达更丰富的数据)。

业务处理服务

若需要让用户点击界面执行某个业务,则可以创建业务处理服务,可以让用于输入参数,然后触发云端的微服务(服务参数直接透传给微服务脚本)。
例:录入数据业务就可以通过创建业务处理服务解决,首先用户输入数据并透传给微服务,微服务规则化数据后存入数据库。
支持的参数类型:整数、浮点数、布尔、字符串、文件、选项和设备。选项类型参数支持两种格式默认数据:1.用,分割多个item,每个item用:分割name和value,例:微信:1,支付宝:2。2.请求后端接口获取数据,用json对象表示,例:{"scriptName":"common", "functionName":"getDevice"},系统会自动执行common脚本的getDevice函数并返回结果作为选项的数据项。

业务处理demo

业务参数源码:
[{"name":"param","id":"p","type":"int","defaultValue":12,"description":"测试"}]

// 业务对应的脚本如下:(注意,函数参数必须与业务参数一致)
function main(p=1) {
    console.log('param:' + p);

    var users = userList();
    console.log('users:' + users);
    for (var u of users) {
        console.log('u:' + u);
        var devices = deviceList(u.openId);
        console.log('用户:' + u.username + ' 设备:' + devices);
    }

    // 获取管理员的设备
    var devices = deviceList('');
    console.log('管理员设备:' + devices);
}
                                            

数据录入服务

数据录入服务已经并入业务处理服务,请参考业务处理服务。

数据查询服务

若用户需查询数据,则可以创建数据查询服务,以表格的形式显示数据。
数据查询处理函数原型:function main(fetchCountOnly, conditions, startIndex, itemCount){},fetchCountOnly表示是否仅仅获取符合查询条件的数据个数,conditions为用户输入的查询条件,startIndex和itemCount分别表示获取数据的起始游标位置和数据条数;返回数据为对象数组,例:[{"key","value"},{"key","value"}],key与列的id相对应,表格显示key对应的value值
查询参数:指查询数据时用户指定的参数,支持text和select,当执行服务时会让用户输入具体查询参数。text类型:返回的数据对应项包含text才返回,select类型:返回数据对应项等于选择值才返回;
列:指显示数据时的表格列,注意列id要与数据查询处理函数返回数据对象的key一致,否则无法显示;
数据操作:指对数据item的操作,比如删除等。每个数据操作可以指定脚本和函数用于具体处理,处理函数原型为 function main(item){},item为当前操作的数据。

查询脚本demo

/*
[{
	"id": 1,
	"name": "a",
	"value": "postman"
}, {
	"id": 2,
	"name": "ab",
	"value": "freeman"
}, {
	"id": 3,
	"name": "b",
	"value": "policeman"
}, {
	"id": 4,
	"name": "c",
	"value": "bad guy"
}]
*/
// 用于获取需要显示的表格数据,查询脚本的参数必须是如下格式:fetchCountOnly表示是否仅获取数据总数,conditions表示json数组格式的查询条件,startIndex表示游标值,itemCount表示一页的最大个数
function main(fetchCountOnly, conditions, startIndex, itemCount) {
	var jsonConditions = JSON.parse(conditions);
	var data = JSON.parse(getCustomData('query_data'));
	var ret = data;
	if (jsonConditions && jsonConditions.length > 0) {
		ret = [];
		for (var item of jsonConditions) {
			if (item.name == 'name') {
				for (var d of data) {
					if (d.name.includes(item.value)) {
						ret.push(d);
					}
				}
			}
		}
	}

	if (fetchCountOnly) {
		// 返回符合条件的数据个数
		return ret.length;
	} else {
		// 返回符合条件的格式化数据
		return ret;
	}
}

// 删除数据操作脚本, 脚本的参数必须如下所示,item表示选中后将要操作的数据项
function deleteItem(item) {
	var data = JSON.parse(getCustomData('query_data'));
	var index = 0;
	for (var d of data) {
		if (d.id == item.id) {
			break;
		}
		++index;
	}
	data.splice(index, 1);
	return setCustomData('query_data', data + '');
}                                            

服务端脚本API

getUser

根据user的openId,返回用户信息。
属性:
属性名 类型 必填 说明
openId string 选填 用户的id
返回用户json object:
名称 类型 说明
openId string 用户id
username string 用户名
phoneNumber string 电话号码
email string 电子邮箱
wx string 微信号
createTime integer 创建时间

userList

返回当前管理员下的用户,类型为json array,每个user为一个json object,详见getUser部分。
属性:
属性名 类型 必填 说明
startIndex integer 选填 起始位置,默认为0
itemCount integer 选填 一页最大数据项,默认为-1,表示返回startIndex起始位置后的所有数据项

deviceList

返回指定用户下的设备,类型json array,每个device为一个json object。
属性:
属性名 类型 必填 说明
openId string 选填 用户的openId,默认为'',表示获取当前管理员的设备
startIndex integer 选填 起始位置,默认为0
itemCount integer 选填 一页最大数据项,默认为-1,表示返回startIndex起始位置后的所有数据项
返回设备json object:
名称 类型 说明
uuid string 设备uuid
name string 设备名
phoneNumber string 设备手机号
extraData json object string 用于存放开发者自定义数据
enable boolean 设备是否可用,false表示设备目前不可用
days integer 可用天数
onlineState integer 工作状态,0表示离线,1表示在线,2表示在线但服务不可用
workState integer 工作状态,0表示空闲,1表示繁忙
devState integer 开发模式,0表示开发模式,1表示发布模式

deviceStart

启动设备,若scriptName不为空则执行,否则查看设备默认脚本,有则执行该脚本;否则查看用户默认脚本,有则执行该脚本。 返回boolean。
属性:
属性名 类型 必填 说明
uuid string 必填 设备uuid
scriptName string 选填 脚本名,默认为空,脚本名为空时执行设备的默认脚本

deviceReset

复位设备,返回boolean。
属性:
属性名 类型 必填 说明
uuid string 必填 设备uuid

scriptList

返回移动端脚本,类型json array,每个script为一个json object。
属性:
属性名 类型 必填 说明
openId string 选填 用户的openId,默认为'',表示获取当前管理员的脚本
startIndex integer 选填 起始位置,默认为0
itemCount integer 选填 一页最大数据项,默认为-1,表示返回startIndex起始位置后的所有数据项
返回设备json object:
名称 类型 说明
name string 脚本名
data string 脚本调试数据
version integer 脚本调试版本
releaseData string 脚本发布数据
releaseVersion integer 脚本发布版本
state int 状态,1表示public,0表示private
modifyTime timestamp 修改时间
createTime timestamp 创建时间

scriptExe

执行脚本,返回boolean。
属性:
属性名 类型 必填 说明
scriptName string 必填 脚本名
device uuid string/json array 必填 设备,当类型为string时表示设备uuid,当类型为json array时表示设备uuid数组
params json array 选填 脚本参数
forceRun boolean 选填 当目标设备繁忙时是否强制执行当前脚本,默认:false
exeDefaultTaskWhenFinished boolean 选填 当前脚本结束时是否执行默认脚本,默认:false

dbInsert

向数据库插入数据项。成功返回插入数据项的id,失败返回-1。
属性:
属性名 类型 必填 说明
tableName string 必填 表名
data json object 必填 插入数据项,例:{price:1, type: 2, deviceId:'xxxx'}

dbQuery

查询数据库。返回json数组,数组元素为json对象。
属性:
属性名 类型 必填 说明
tableNames string 必填 表名,用','分割多个表名
columns string 必填 返回数据的列名,,用','分割多个列名
conditions json array 必填 查询条件,字符串数组,每个字符串一个条件,例:["type=1", "len>3"]
order string 选填 默认为空,例:order by name desc
offset integer 选填 默认为0
limit integer 选填 默认-1,表示offset之后的所有数据

dbUpdate

更新数据。返回Boolean。
属性:
属性名 类型 必填 说明
tableName string 必填 表名
sets json array 必填 更新值,字符串数组,每个字符串一个赋值列,例:["name='tom'", "value=1"]
conditions json array 必填 更新条件,字符串数组,每个字符串一个条件,例:["type=1", "len>3"]

dbDelete

删除数据。返回Boolean。
属性:
属性名 类型 必填 说明
tableName string 必填 表名
conditions json array 必填 删除条件,字符串数组,每个字符串一个条件,例:["type=1", "len>3"]

httpPost

post。返回json对象, {status: ..., data: ...}。
属性:
属性名 类型 必填 说明
url string 必填 url
bodyParams json object 选填 默认为空
contentType string 选填 application/json;charset=UTF-8
queryParams json object 选填 默认为空

httpGet

get。返回json对象, {status: ..., data: ...}。
属性:
属性名 类型 必填 说明
url string 必填 url
queryParams json object 选填 默认为空

cachePut

往cache存放数据,返回Boolean。
属性:
属性名 类型 必填 说明
key string 必填 key
value object 必填 value
timeout integer 选填 过期时间,毫秒,默认值:120000

cacheGet

从cache取数据,返回Object。
属性:
属性名 类型 必填 说明
key string 必填 key

cacheRemove

从缓存中移除数据,返回boolean。
属性:
属性名 类型 必填 说明
key string 必填 key

lock

加锁,若锁不存在则先创建锁再加锁,用于多线程同步,返回boolean。
属性:
属性名 类型 必填 说明
name string 必填 锁名字

unlock

解锁,用于多线程同步,返回boolean。
属性:
属性名 类型 必填 说明
name string 必填 锁名字

releaseLock

若锁存在则销毁,用于多线程同步,返回boolean。
属性:
属性名 类型 必填 说明
name string 必填 锁名字

base64Encode

base64编码,返回string。
属性:
属性名 类型 必填 说明
data byte[] 必填 待编码的字节数组

base64Decode

base64解码,返回byte[]。
属性:
属性名 类型 必填 说明
data string 必填 待解码的字符串

encodeURI

encode uri,返回string。
属性:
属性名 类型 必填 说明
data string 必填 待编码的字符串

decodeURI

decode uri,返回string。
属性:
属性名 类型 必填 说明
data string 必填 待解码的字符串

newFile

创建file,返回File文件对象。
属性:
属性名 类型 必填 说明
path string 必填 相对路径,不能包含..

closeFile

关闭文件。
属性:
属性名 类型 必填 说明
file object 必填 文件对象

getCustomData

获取用户在「微服务」/「自定义数据」中创建的数据项,返回结果结果为string。
属性:
属性名 类型 必填 说明
name string 必填 数据名

setCustomData

设置用户在「微服务」/「自定义数据」中创建的数据项,返回结果结果为boolean(注意api不会自动创建不存在的自定义数据)。
属性:
属性名 类型 必填 说明
name string 必填 数据名
data string 必填 数据
Copyright © 2021-2022 冰狐智能辅助. All rights reserved.