Skip to content

OPWebAPI使用说明

介绍

数据库OPWebAPI,后台使用golang原生http实现,使用jwt Token认证

发布说明

1:解压OPWebAPI软件到部署服务器;
2:配置OPWebAPI\config.yaml中数据库连接,填入数据库对应IP、PORT和用户名密码、以及webapi对外端口、用户和密码等信息;
3:启动OPWebAPI程序(windows下双击启动OPWebAPI.exe, linux下root用户执行./OPWebAPI);
4:发布成功后,基本使用流程和全部接口参数介绍请参考下方资料。

操作流程说明

常见的数据库使用流程为获取数据库连接、插入数据库、插入节点、插入测点、插入数据(实时、历史)、数据订阅(可选)、查询历史数据、查询实时数据,相关接口如下:
1.login(获取Token)
2.insert(插入数据库,tablename:database,如使用默认W3,则可跳过)
3.insert(插入节点表,tablename:node,如已存在可跳过)
4.insert(插入测点,tablename:point,如已存在可跳过)
5.insertDataById/insertDataByGn(插入实时/历史数据,如已存在可跳过)
6.SubById(通过ID订阅)订阅数据(可选)
7.getArchiveByGn(通过GN获取历史),根据全名称查询历史
8.findByGn(通过GN查询),填入realtime表,根据全名称查询实时

返回结果说明

返回结果Message里面有个Data字段,Data属性可能有个EC字段,标记对应的操作返回状态

全部接口详情

- 支持get和post请求,get请求参数需放在params中;post请求可以放在body或者params中,Content-Type支持application/x-www-form-urlencoded和multipart/form-data。
- 除了获取接口说明页面的接口,其它接口都是返回标准的数据格式。所有的参数都是以json方式返回,返回结果有三个参数:flag,message,data。
- 其中flag小于0的时候是接口调用异常,message是对应的错误信息。
- 当flag为0的时候,是接口正常调用,message都为OK,data是对应的返回数据信息。data包含两个字段columns和rows,columns是对应的请求字段信息,rows是对应数据结果,格式是map,key都是存在于columns中的。
- 除login和index请求,其它http请求要在header中添加Authorization参数,值为login获取的token。
- Sub订阅请求要在socket.io请求的params中添加access_token参数,值为login获取的token。
- 每个类别的请求会给出一个示例。

0. login(获取Token)

login(获取Token)
	说明:获取通信认证token
	参数:
		user:	    配置的用户名
		password:   配置的密码
		period:		token有效期,单位分钟
	返回:
		标准结果
	示例
		var url = "http://127.0.0.1"
		function login() {
			var user = $('#user').val();
			var password = $('#password').val();
			var period = $('#period').val();
			$.ajax({
				type: 'post',
				url: url + '/login',
				data: {
					user: user,
					password: password,
					period: period
				},
				dataType: 'json',
				success: function (data) {
					if (data.flag < 0) {
						errorSwal(data.message)
					} else {
						data = data.data;
						$('#token').val(data);
					}
				},
				error: function () {
					errorSwal('获取信息失败');
				}
			});
		}

1. index(说明文档)

说明:访问说明文档
参数:无
返回:页面

2. getServerTime(获取服务器时间)

说明:获取数据库时间
参数:无
返回:
	标准格式
	data是对应的数据库时间

3. find(不带条件查询)

find(不带条件查询)
	说明:不带查询条件获取DataBase、Node、Point、Realtime、Alarm 数据
	参数:
		tableName:	表名
		field:    	查询字段的字符串,以逗号分隔
		offset:		开始记录
		limit:		偏移量
	返回:
		标准结果
	示例:
		var token = $('#token').val();
        if (!token) {
            errorSwal('请先登录');
            return;
        }
        var tableName = $('#tableName').val();
        var field = $('#columns').val();
		var offset = 0;
		var limit = 10;
        $.ajax({
            method: 'post',
            url: url + '/find',
            beforeSend: function (request) {
                request.setRequestHeader("Authorization", token);
            },
            data: {
                tableName: tableName,
                field: field,
                offset: offset,
				limit: limit
            },
            dataType: 'json',
            success: function (data) {
                if (data.flag < 0) {
                    errorSwal(data.message)
                } else {
                    $('#message').val(JSON.stringify(data));
                }
            },
            error: function () {
                errorSwal('获取信息失败');
            }
        })

4. findById(通过ID查询)

说明:通过GN集合条件获取DataBase、Node、Point、Realtime、Alarm 数据
参数:
	tableName:	表名
	field:    	查询字段的字符串,以逗号分隔
	ids:		ID 字符串,以逗号分隔
	offset:		开始记录
	limit:		偏移量
返回:
	标准结果

5. findByGn(通过GN查询)

说明:通过GN集合条件获取DataBase、Node、Point、Realtime、Alarm 数据
参数:
	tableName:	表名
	field:    	查询字段的字符串,以逗号分隔
	gns: 		GN 字符串,以逗号分隔
	offset:		开始记录
	limit:		偏移量
返回:
	标准结果

6. query(执行SQL)

说明:执行sql
参数:
	sql:    	SQL语句
返回:
	标准结果

7. getArchiveById(通过ID获取历史)

说明:通过ID获取获取历史数据
参数:
	field:    	查询字段的字符串,以逗号分隔
	beginDate:	开始时间  格式 yyyy-MM-dd hh:mm:ss或者秒数据
	endDate:    结束日期  格式 yyyy-MM-dd hh:mm:ss或者秒数据
	ids:		ID字符串,以逗号分隔
	mode:		数据模式(可选)
	interval:	间隔时间(可选,配合mode使用)
	offset:		开始记录
	limit:		偏移量
返回:
	标准结果

8. getArchiveByGn(通过GN获取历史)

说明:通过GN获取获取历史数据
参数:
	field:    	查询字段的字符串,以逗号分隔
	beginDate:	开始时间  格式 yyyy-MM-dd hh:mm:ss或者秒数据
	endDate:    结束日期  格式 yyyy-MM-dd hh:mm:ss或者秒数据
	gns:		GN字符串,以逗号分隔
	mode:		数据模式(可选)
	interval:	间隔时间(可选,配合mode使用)
	offset:		开始记录
	limit:		偏移量
返回:
	标准结果

9. getStatById(通过ID获取统计信息)

说明:通过ID获取获取统计数据
参数:
	field:    	查询字段的字符串,以逗号分隔
	beginDate:	开始时间  格式 yyyy-MM-dd hh:mm:ss或者秒数据  
	endDate:    结束日期  格式 yyyy-MM-dd hh:mm:ss或者秒数据  
	ids:		ID字符串,以逗号分隔
	interval:	间隔时间
	offset:		开始记录
	limit:		偏移量
返回:
	标准结果

10. getStatByGn(通过GN获取统计信息)

说明:通过GN获取获取统计数据
参数:
	field:    	查询字段的字符串,以逗号分隔
	beginDate:	开始时间  格式 yyyy-MM-dd hh:mm:ss或者秒数据     
	endDate:    结束日期  格式 yyyy-MM-dd hh:mm:ss或者秒数据    
	gns:		GN字符串,以逗号分隔
	interval:	间隔时间
	offset:		开始记录
	limit:		偏移量
返回:
	标准结果

11. getAAlarm(获取报警历史)

说明:不带查询条件获取报警历史数据
参数:
	field:    	查询字段的字符串,以逗号分隔
	beginDate:	开始时间  格式 yyyy-MM-dd hh:mm:ss或者秒数据  
	endDate:    结束日期  格式 yyyy-MM-dd hh:mm:ss或者秒数据  
	offset:		开始记录
	limit:		偏移量
返回:
	标准结果

12. getAAlarmById(通过ID获取报警历史)

说明:通过ID获取报警历史数据
参数:
	field:    	查询字段的字符串,以逗号分隔
	beginDate:	开始时间  格式 yyyy-MM-dd hh:mm:ss或者秒数据  
	endDate:    结束日期  格式 yyyy-MM-dd hh:mm:ss或者秒数据  
	ids:		ID字符串,以逗号分隔
	offset:		开始记录
	limit:		偏移量
返回:
	标准结果

13. getAAlarmByGn(通过GN获取报警历史)

说明:通过GN获取报警历史数据
参数:
	field:    	查询字段的字符串,以逗号分隔
	beginDate:	开始时间  格式 yyyy-MM-dd hh:mm:ss或者秒数据 
	endDate:    结束日期  格式 yyyy-MM-dd hh:mm:ss或者秒数据  
	gns:		GN字符串,以逗号分隔
	offset:		开始记录
	limit:		偏移量
返回:
	标准结果

14. insert(写数据)

insert(写数据)
	说明:通过api插入数据
	参数:
		tableName:  Point、Node、DataBase,只能是这三个
		field:      要插入的字段
        rows:       数据数组,数组里面的数据以','分隔
	返回:
		标准结果
	示例:
		var token = $('#token').val();
        if (!token) {
            errorSwal('请先登录');
            return;
        }
        var tableName = $('#tableName').val();
        var field = $('#columns').val();
        var rows = new Array();
        rows.push('W3.TEST.W1,0');
        rows.push('W3.TEST.W2,1');
        $.ajax({
            method: 'post',
            url: url + '/insert',
            beforeSend: function (request) {
                request.setRequestHeader("Authorization", token);
            },
            data: {
                tableName: tableName,
                field: field,
                rows: rows
            },
            dataType: 'json',
            success: function (data) {
                if (data.flag < 0) {
                    errorSwal(data.message)
                } else {
                    $('#message').val(JSON.stringify(data));
                }
            },
            error: function () {
                errorSwal('获取信息失败');
            }
        })

15. insertDataById(通过ID写数据)

说明:通过ID写数据
参数:
	tableName:  表名  Realtime和Archive二选一
	field:      要更新的字段,以','分隔, ID和AV必须有,如果是Archive TM也必须有,DS字段可选,ID、AV、TM、DS 只能是这几个字段,TM是int或float类型的秒数据
    rows:       数据数组,数组里面的数据以','分隔
返回:
	标准结果

16. insertDataByGn(通过点名写数据)

说明:通过点名写数据
参数:
    tableName:  表名  Realtime和Archive二选一
	field:      要更新的字段,以','分隔, GN和AV必须有,如果是Archive TM也必须有,DS字段可选,GN、AV、TM、DS 只能是这几个字段,TM是int或float类型的秒数据
    rows:       数据数组,数组里面的数据以','分隔
返回:
	标准结果

17. update(更新数据)

说明:更新数据
参数:
    tableName:  Point、Node、DataBase,只能是这三个
	field:      要更新的字段,以','分隔,ID或GN必须有一个,二者选其一
    rows:       数据数组,数组里面的数据以','分隔
返回:
	标准结果

18. delete(执行删除)

说明:执行sql
参数:
    tableName:  Point、Node、DataBase,只能是这三个 
	field:      ID或GN,二者选其一
	rows:		对应的数据,以','分隔
返回:
	标准结果

19. SubById(通过ID订阅)

SubById(通过ID订阅)
	说明:通过ID订阅数据,详细参考ws.html
	参数:
		tableName:  订阅表明(Realtime,Alarm)
		ids:        ID字符串,以逗号分隔
	返回:
    	标准结果
	示例:(参考ws.html,客户端socket.io仅仅支持1.x和2.x版本)
		<script src="https://cdn.socket.io/socket.io-2.3.0.js"></script>
		<script>
			var so = null;
			var route_url = null;
			con_btn.onclick = function () {
				so = new io(ipt.value, {
					query: {
						access_token:'***token str,get from login***'
					}
				});
				con_btn.setAttribute("disabled", "disabled");
				route.setAttribute("disabled", "disabled");
				ipt.setAttribute("disabled", "disabled");
				route_url = route.options[route.selectedIndex].text;
				service(so);
			};
			send_btn.onclick = function () {
				var msg = send.value;
				send.value = "";
				if (so != null && msg.length > 0) {
					so.emit(route_url, msg)
				}
			}
			function service(so) {
				so.on(route_url, function (msg) {
					receive.value = receive.value + msg + "\n";
					receive.scrollTop=receive.scrollHeight;
				});
				so.on('connect', function () {
					console.log('connect success');
				});
				so.on('disconnect', function () {
					console.log('disconnect success');
				});
			}
			clear.onclick = function () {
				send.value = "";
				receive.value = "";
			}
			reset.onclick = function () {
				if (so != null) {
					so.disconnect();
					so = null;
					location.reload();
				}
			}
		</script>