数据API接口
1,登录
访问路径URL:http://192.168.2.156:8089/api/Login
请求方式:POST
请求头内容:
{
'Accept': 'application/json',
'Content-Type': 'application/json',
}
请求参数:
name 登录用户名
pwd 登录密码
返回值:
{
success:true,
id:"用户UID",
token:"用户access_token"
}
2,获取Room数据
访问路径URL:http://192.168.2.156:8089/api/Room
请求方式:GET
请求头内容:
{
'Accept': 'application/json',
'Content-Type': 'application/json',
'timespan':"数据时间戳",
}
timespan为当前数据时间戳,用于更新数据信息。第一次请求是值为0。非第一次请是,填写上次数据返回的时间戳。
请求参数:无
返回值:
{
success:true,
timespan:'当前数据时间戳',//下次刷新数据是,需要提交这个时间戳
datalist:[
{
roomID:1,
roomName:'101',
roomType:0,
roomTypeName:'宿舍',
buildingID:1,
buildingName:'1号楼',
className:'16移动应用开发',
teacherName:'小李',
state:'',//此字段非业务数据,只是标注当前数据处理状态'add','updata','delete'
},
...
]
}
3,获取检查项
请求路径URL:http://192.168.2.156:8089/api/CkeckItem
请求方式:GET
请求头内容:
{
'Accept': 'application/json',
'Content-Type': 'application/json',
'timespan':"时间戳",
}
请求参数:无
返回值:
{
success:true,
timespan:'当前数据时间戳',//下次刷新数据是,需要提交这个时间戳
datalist:[
{
checkID:1,
checkName:'地面卫生',
roomType:0,
sectionID:0,
sectionName:'常规检查项',
state:'',//此字段非业务数据,只是标注当前数据处理状态'add','updata','delete'
},
...
]
}
4,提交检查结果
请求URL:http://192.168.2.156:8089/api/CheckRecord
请求方式:POST
请求头内容:
{
'Accept': 'application/json',
'Content-Type': 'application/json',
'uid':'你的uid',
'token':'你的token',
}
提交参数,检查结果数组,
[
checkResult1,
]
提交元数据说明
{
room:{
roomID:1,
},
checkItems:[
{
checkID:1,
checkState:true,
checkImage:'base64格式的图片',//可选字段
},
...
],
result:true,
date:'时间字符串,格式为YYYY-MM-DD'
}
返回值:
{
success:true,
}
5,使用方法
post提交的数据需要使用JSON进行编码
//1,首先构造请求头数据对象
const headers = {
'Accept': 'application/json',
'Content-Type': 'application/json',
};
//2,构造post参数对象
const postValues = {
name: username,
pwd: password,
};
//3,对post参数进行JSON编码
const jsonData = JSON.stringify(postValues);
//4,开始post请求
fetch(url, {
method: 'POST',
headers:headers,
body: jsonData,
})
.then((response) => response.json())
.then((responseJson) => {
console.log(responseJson);
})
.catch((error) => {
console.error(error);
});
数据服务层设计稿
数据层服务是整个App的基础,App的所有页面和功能都是基于数据服务进行构建的。
数据服务是开发中的第一步,非常重要,关于数据服务的设计方法,之前已经讲解过,这里只重点强调两种情况:
同步数据操作
异步数据操作
数据操作过程由数据服务对象Manager进行封装,对于操作过程,有同步和异步的区别。除内存操作为,其余所有操作都为异步操作。例如:
- Storage
- Fetch
- SQLite
- 文件I/O
封装同步数据操作时,数据操作结果通过方法返回值进行返回。
封装异步数据操作时,数据操作结果通过事件回调函数携带的参数进行返回。
1,设计元数据
元数据是App中基础业务数据,不可再分割。一个App根据业务需要,可能需要多个元数据支撑。
更具业务分析,此App需要4种元数据:
- UserInfo
- Room
- CheckItem
- CheckResult
UserInfo
{
uid:'xxxxxx',
token:'xxxxxx',
}
字段说明
字段名 作用 备注
uid 用户唯一ID 通过登录请求获取
token 用户权限令牌 通过登录请求获取
Room
{
roomID:1,
roomName:'101',
roomType:0,
roomTypeName:'宿舍',
buildingID:1,
buildingName:'1号楼',
className:'16移动应用开发',
teacherName:'小李',
}
字段说明:
字段名 | 作用 | 备注 |
---|---|---|
roomID | 房间主键ID | 房间唯一标识,自增 |
roomName | 房间名 | |
roomType | 房间类型ID | 0为宿舍,1为教室 |
roomTypeName | 房间类型名称 | |
buildingID | 房间所属建筑物ID | |
buildingName | 房间所属建筑物名称 | |
className | 房间所属班级 | |
teacherName | 房间所属辅导员 |
CheckItem
{
checkID:1,
checkName:'地面卫生',
roomType:0,
sectionID:0,
sectionName:'常规检查项',
checkResult:true,
}
字段说明:
字段名 | 作用 | 备注 |
---|---|---|
checkID | 检查项ID | 唯一 |
checkName | 检查项名称 | |
roomType | 检查项所属房间类型 | |
sectionID | 检查项类别ID | 0为常规检查项,1为安全检查项 |
sectionName | 检查项类别名 | |
checkResult | 检查结果 | true为合格,false为不合格 |
CheckResult
{
id:1,
room:room,
checkItems:[
checkItem,
...
],
result:true,
date:'时间字符串,格式为YYYY-MM-DD',
submit:false,
}
字段说明:
字段名 | 作用 | 备注 |
---|---|---|
id | 数据唯一标识 | 数据库主键自增 |
room | 房间元数据对象 | |
checkItems | 检查结果 | 数据组,数组中每个元素为检查项元数据 |
result | 房间检查结果 | 已经检查规则对检查项进行计算,得出检查结果 |
date | 检查时间 | |
submit | 检查结果是否上传服务器 | true为未上传,false为已上传 |
2,设计数据服务对象
数据服务对象的作用是对元数据的相关操作进行封装。依照元数据的设计,我们设计4个数据服务对象
- UserManager
- RoomManager
- CheckItemManager
- CheckResultManager
在设计数据服务对象时,要从以下两个方面进行考虑
- 需要为上层容器组件提供哪些数据
- 需要为上层容器组件提供哪些功能
- 在上传组件调用数据服务对象是有哪些数据交互
我们首先强调一个原则,各个数据服务对象直接是互不知晓的。如果遇到一个数据服务对象需要使用另一个数据服务对象中的数据的情况,我们需要将数据保存在系统级服务中:stroage或sqlite中。
UserManager
//登录功能
login(user,loginResultCallBack);
参数说明:
user,登录所需的数据,为一个对象
{
username:'用户输入的用户名',
pwd:'用户输入的密码'
}
loginResultCallBack,登录完成事件回调函数。
(result,message)=>void
result:登录结果,true为成功,false为失败。
message:失败原因,当成功时,值为空。
RoomManager
//更新本地Room数据
updateRoom(resultCallBack);
参数说明:
resultCallBack,为更新结果回调函数
(result,message)=>void
result:更新结果,true为成功,false为失败。
message:失败原因,当成功时,值为空。
//获取房间所有类型
getRoomTypes(callBack);
参数说明:
callBack为查询结果回调函数,类型为(roomTypes,message)=>void
roomTypes,查询结果数组,数组中每个元素为roomType对象
{
roomTypeID:0,
roomTypeName:'xxx',
}
当查询失败时,roomTypes值为null
message为失败原因
//通过房间类型,获取该类型下的所有建筑物
getBuildings(roomTypeID,callBack);
参数说明:
roomTypeID:房间类型ID
callBack为查询结果回调函数,类型为(buildings,message)=>void
buildings,查询结果数组,数组中每个元素为roomType对象
{
buildingName:'xxx',
}
当查询失败时,buildings值为null
message为失败原因
//通过房间类型和建筑物ID获取所有房间
getRooms(roomTypeID,buildingName,callBack);
callBack为查询结果回调函数,类型为(rooms,message)=>void
rooms,查询结果数组,数组中每个元素为rooms对象
当查询失败时,rooms值为null
message为失败原因
CheckItemManager
//更新本地CheckItem数据
updateCheckItem(resultCallBack);
参数说明:
resultCallBack,为更新结果回调函数
(result,message)=>void
result:更新结果,true为成功,false为失败。
message:失败原因,当成功时,值为空。
//通过房间对象,获取相应的检查项
getCheckItems(room,callBack);
参数说明
room:room元数据对象
callBack:为查询结果回调函数,类型为(checkItems,message)=>void
checkItems,查询结果数组,数组中每个元素为checkItems对象
当查询失败时,checkItems值为null
message为失败原因
CheckResultManager
//添加检查结果
addCheckResult(checkResult,resultCallBack);
参数说明
checkResult:检查结果元数据
resultCallBack,为操作结果回调函数
(result,message)=>void
result:更新结果,true为成功,false为失败。
message:失败原因,当成功时,值为空。
//保存修改后的检查结果
saveCheckResult(checkResult,resultCallBack);
参数说明
checkResult:检查结果元数据
resultCallBack,为操作结果回调函数
(result,message)=>void
result:更新结果,true为成功,false为失败。
message:失败原因,当成功时,值为空。
//删除检查结果
deleteCheckResult(checkResultIDs,resultCallBack);
参数说明
checkResultIDs:检查结果ID数组
resultCallBack,为操作结果回调函数
(result,message)=>void
result:更新结果,true为成功,false为失败。
message:失败原因,当成功时,值为空。
//根据roomType获取相应检查结果
getCheckResults(roomType,resultCallBack);
参数说明
roomType:房间类型ID
resultCallBack,为操作结果回调函数
(checkResults,message)=>void
checkResults:当前类型下的检查结果数组,数组中每一个元素为checkResult元数据对象
message:失败原因,当成功时,值为空。
//提交检查结果到服务器
postCheckResults(checkResultIDs,resultCallBack);
参数说明
checkResultIDs:检查结果ID数组
resultCallBack,为操作结果回调函数
(result,message)=>void
result:更新结果,true为成功,false为失败。
message:失败原因,当成功时,值为空。
//添加监听者,监听数据变化事件
addListener(callBack);
参数说明
callBack,为操作结果回调函数,当数据发送变化时会调用
(void)=>void