Appearance
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>