1、福建省学历继续教育数字化管理、监控平台数据采集传输协议、规约目录上报方式 3文件上传 3接口上报 3文件上报 3CSV 格式 .3XLS 格式 4数据格式 4接口上报 4Google json style 介绍 4上报规约 4文件上传 4RESTful 接口 .5身份验证 5数据模板多版本 5元数据业务 API7数据项列表 7编辑页面 API 示列 .8查看页面元数据 10数据查询列表示例 12附件 1 文件模板 .14附件 2 信息码 .14附件 3 Google json style.15上报方式分为两种“文件上传”和“RESTful 接口” 。文件上传系统管理员或教师按指定的模版格式线下
2、进行整理,通过系统上传完成原始数据的导入工作。接口上报通过系统自动二次功能开发,完成系统间数据自动上报的原始数据。系统采用 RESTful方式。文件上报在采用“文件上传”的方式,才使用文件上报的方式。决定采用 CSV 格式或 xls 格式。具体的实例参考附件 1。CSV 格式逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号) ,其文件以纯文本形式存储表格数据(数字和文本) 。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV 文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间
3、的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。文件规则:1 开头是不留空,以行为单位。2 可含或不含列名,含列名则居文件第一行。3 一行数据不跨行,无空行。4 以 半角逗号(即,)作分隔符,列为空也要表达其存在。5 列内容如存在半角逗号(即,)则用半角双引号(即“)将该字段值包含起来。6 列内容如存在半角引号(即“)则应替换成半角双引号(“)转义,并用半角引号(即“)将该字段值包含起来。7 文件读写时引号,逗号操作规则互逆。8 内码格式不限,可为 ASCII、Unicode 或者其它,统一采用 UTF-8 实现 Unicode 编码。XLS 格式略数
4、据格式无论是 CVS 或 XLS 格式的文件,数据文件第一行统一为数据维度(列)要求,具体的维度信息是系统模板生成。不可以任意修改或添加,上传时系统会根据模板信息进行导入前的校验或容错。数据维度如果不符合预期的模板定义,将会影响正常导入。数据维度的确认由客户、产品、需求人员共同商议决定。接口上报采用“RESTful 接口” ,协议数据描述统一采用 goolge json style 格式描述数据。Google json style 介绍:中文站:https:/ RESTful 接口上传,除采用统一的反馈信息码外,上传的方式和格式均有不同。反馈信息码参见附件 2.文件上传 上传文件需要先根据上传
5、业务类型,选择对应的上传模版。 上传时需要指定唯一维度发现相同数据时的处理方式默认规则如下“覆盖” 、 “忽略” 、“报错” 。并制定发生首次发现错误时的错误机制,全部中断或忽略继续处理。 文件上传完毕时会先开始错误报告检测,校验数据无误后,才会真正导入数据。 第一次校验通过的数据,第二次导入时还会再次校验一边,防止并发造成数据冲突。 文件上传完毕后会给出上传反馈报告,报告信息拟定如下“成功数” 、 “失败数” 、 “失败信息描述” (附件 1)等。 上传原始信息,系统会保留 n 个月,可用作数据校对所用。超过期限自动删除。 文件上传采取异步方式上传,并且定时(间隔时间小于 10 秒)刷新展现
6、最新进度。一期同一用户同一时间,只能上传一份文件。一个用户不可以同时上传多份文件。需等上一文件上传完毕并完全处理完成后,才可上传下一文件。RESTful 接口 接口上传数据不成功时会异步给出信息反馈,上报系统需要提供回调服务器地址和处理反馈信息,信息码表见附件 1。 数据完整性校验需要统一采用 MD5 方式,传输数据需要提供 MD5 码,防止数据中途被劫持修改。 上报数据维度需要制定模板信息,并对应填写相应数据。 上报数据需含有 EduPass 制定的 TGT 或 ST。 RESTful 接口上传时需要先明确数据模版,确认需要上传的格式。报送时不可连续发送,单条发总间隔需要至少间隔 200ms
7、 以上。以免对主系统压力冲击。此问题需要明确注意。 系统上报时间最好定在凌晨后执行,避免系统使用高峰,造成网络拥堵。身份验证因文件上传需要登录系统方可执行,所以只有基于 RESTful 接口时才考虑身份验证。身份验证我们采取 SSO 方式,依赖弘成 EDUPass 系统。EduPass 相关使用信息略。数据模板多版本数据模版支持多版本,支持最近的上一版本和最新版本并行。系统发布一个固定 REST API 接口对外发布最新 API 的变化和版本说明。通过选择新的属性名(维度)或将 API 版本化来避免命名冲突新的属性可在将来被添加进保留列表中。如果存在命名冲突,可通过选择新的属性名或者版本化来解
8、决这个问题。例如,假设我们由下面的 JSON 对象开始:“apiVersion“: “1.0“,“data“: “recipeName“: “pizza“,“ingredients“: “tomatoes“, “cheese“, “sausage“顶级的对象包含下面这些属性apiVersion 属性值类型: 字符串 (string)呈现请求中服务 API 期望的版本,以及在响应中保存的服务 API 版本。应随时提供apiVersion。这与数据的版本无关。将数据版本化应该通过其他的机制来处理,如 etag。示例: “apiVersion“: “2.1“ 新的属性可在将来被添加进保留列表中。数据
9、中不存在命名空间。如果存在命名冲突,可通过选择新的属性名或者版本化来解决这个问题。例如,假设我们由下面的数据对象开始:“apiVersion“: “1.0“,“data“: “recipeName“: “pizza“,“ingredients“: “tomatoes“, “cheese“, “sausage“如果希望将来把 ingredients 列为保留字,可以通过下面来达成。 1.选一个不同的名字“apiVersion“: “1.0“,“data“: “recipeName“: “pizza“,“ingredientsData“: “Some new property“,“ingredie
10、nts“: “tomatoes“, “cheese“, “sausage“2.在主版本上重新命名属性“apiVersion“: “2.0“,“data“: “recipeName“: “pizza“,“ingredients“: “Some new property“,“recipeIngredients“: “tomatos“, “cheese“, “sausage“元数据业务 API 数据项列表“apiVersion“:“1.0“,“isMyCategoryId“:true,“formatStr“:“,“categoryId“:“2c90b3833d1af453013d1af4555b00
11、01“,“formatCheckFlag“:null,“gridColumns“:“align“:“left“,“display“:“字段一“,“name“:“description“,“type“:“,“width“:120,“align“:“left“,“display“:“字段二“,“name“:“fileFormat“,“type“:“,“width“:50,“align“:“left“,“display“:“字段三“,“name“:“number“,“type“:“,“width“:80,“align“:“left“,“display“:“字段四“,“name“:“duration“
12、,“type“:“,“width“:60,“align“:“left“,“display“:“字段五“,“name“:“name“,“type“:“,“width“:150,“align“:“left“,“display“:“字段六“,“name“:“size“,“type“:“,“width“:60,“align“:“left“,“display“:“字段七“,“name“:“transform“,“type“:“,“width“:136,“align“:“left“,“display“:“字段八“,“name“:“id“,“type“:“button“,“width“:136“,“type
13、“:“,“myStore“:0,“rolePath“:“teacher/“,“typeSql“:“,“lastUpload“:,“category“:“id“:“2c90b3833d1af453013d1af4555b0001“,“vName“:“描述 1“,“roleNum“:“1“,“categorys“:“id“:“2c90b3833d1af453013d1af4555b0001“,“vName“:“描述 2“,“select“:“selected“,“id“:“2c90b3833d1ab052013d1ab054870002“,“vName“:“描述 3“,“id“:“297eceff
14、3ed44439013ed4a650ba0004“,“vName“:“描述 4“,“itemInputs“:“columnAttr“:“v_number“,“inputType“:“input“,“title“:“属性 1“,“multi“:“1“,“must“:“1“,“ntItemInputs“:“columnAttr“:“v_description“,“inputType“:“input“,“title“:“属性2“,“multi“:“1“,“must“:“1“,“columnAttr“:“v_duration“,“inputType“:“input“,“title“:“属性3“,“mu
15、lti“:“1“,“must“:“1“,“inputStyle“:“,“columnAttr“:“v_size“,“inputType“:“input“,“title“:“属性4“,“multi“:“1“,“must“:“1“,“inputStyle“:“readonly“,“columnAttr“:“v_name“,“inputType“:“input“,“title“:“属性 5“,“multi“:“1“,“must“:“1“,“columnAttr“:“v_fileformat“,“inputType“:“input“,“title“:“属性6“,“multi“:“1“,“must“:“
16、1“,“inputStyle“:“readonly“,“userId“:“e155f4f9a692441d9696e112449b3eef“,“statisticBean“:“totalResource“:0,“myUpload“:0,“myStored“:0,“lastView“:,“lastNews“:,“athor“:“wdc“,“roleType“:“1“,“myUpload“:0,“organiztionId“:“8b10147cbf00c106d7778c264ea13567/“参数说明:参数 描述apiVersion json 字符串版本formatStr 文件格式字符串form
17、atCheckFlag 检查格式。gridColumns 资源属性相关信息,align:样式居左,display:属性名称,name:属性英文名,type:类型,width:样式宽度myStore 废弃,现页面已无此功能,原功能是我的收藏。rolePath 不同角色对应的 css 样式路径lastUpload 废弃,现页面已无此功能,原功能是最新上传。itemInputs 简单搜索框相关信息,columnAttr:字段名称,inputType:搜索框类型,title:属性名称,multi:是否多选,must:是否必填,inputStyle:是否只读ntItemInputs 高级搜索框相关信息,
18、columnAttr:字段名称,inputType:搜索框类型,title:属性名称,multi:是否多选,must:是否必填,inputStyle:是否只读athor 用户对资源的权限,w:修改 d:删除 c:添加roleType 角色标志, ”1”代表教师, ”代表其它organiztionId 组织 id编辑页面 API 示列“apiVersion“:“1.0“,“orgs“:“id“:“8b10147cbf00c106d7778c264ea13567“,“name“:“北京测试 A“,“spid“:“hcxy“,“treeIds“:“id“:“8b10147cbf00c106d7778
19、c264ea13567,2c90b3833d1ab052013d1ab054870002“,“treeIds“:“,“id“:“8b10147cbf00c106d7778c264ea13567,2c90b3833d1af453013d1af4555b0001“,“treeIds“:“,“categoryId“:null,“rolePath“:“css/“,“id“:“f71e0480cea44278971b9ed3863b7d4d“,“orgId“:“8b10147cbf00c106d7778c264ea13567“,“windowName“:null,“roleView“:“6“,“shar
20、e“:“1“,“roleNum“:“,“category“:null,“categorys“:“id“:“2c90b3833d1af453013d1af4555b0001“,“vName“:“书签 1“,“id“:“2c90b3833d1ab052013d1ab054870002“,“vName“:“书签 2“,“id“:“297eceff3ed44439013ed4a650ba0004“,“vName“:“书签 3“,“itemInputs“:“columnAttr“:“v_description“,“inputType“:“input“,“title“:“属性 1“,“valueStr“:
21、“ee“,“must“:“true“,“columnAttr“:“v_size“,“inputType“:“input“,“title“:“属性2“,“valueStr“:“124416“,“must“:“true“,“inputStyle“:“readonly“,“columnAttr“:“v_duration“,“inputType“:“input“,“title“:“属性3“,“valueStr“:“10“,“multi“:“1“,“must“:“true“,“inputStyle“:“,“columnAttr“:“v_name“,“inputType“:“input“,“title“:
22、“属性 4“,“valueStr“:“默认值“,“must“:“true“,“columnAttr“:“v_fileformat“,“inputType“:“input“,“title“:“属性5“,“valueStr“:“doc“,“multi“:“NULL“,“must“:“true“,“inputStyle“:“readonly“,“columnAttr“:“v_number“,“inputType“:“input“,“title“:“属性 6“,“valueStr“:“11“,“must“:“true“,“cIds“:“2c90b3833d1ab052013d1ab054870002“
23、,“2c90b3833d1af453013d1af4555b0001“,“userId“:“e155f4f9a692441d9696e112449b3eef“,“fileName“:“扩展属性示列“,“userName“:“mteacher1“,“down“:“0“,“oIds“:“8b10147cbf00c106d7778c264ea13567“,“organiztionId“:“8b10147cbf00c106d7778c264ea13567/“参数说明:参数 描述method 固定值 updateid 资源 iduserId 用户 id返回说明:参数 描述apiVersion Json
24、字符串版本orgs 组织相关信息,id:组织 id, name:组织名称,spid:视频 idtreeIds 废弃categoryId 废弃rolePath 不同角色对应的 css 样式路径id 资源 idorgId 组织 idroleView 角色类型, ”1”代表教师, ”代表其它share 是否共享,1:共享,0:不共享roleNum 角色标志, ”1”代表教师, ”代表其它categorys 当前组织下的所有类型书签,id:资源 id,vName:名称itemInputs 资源属性相关信息,columnAttr:属性在数据库表中对应的字段名,inputType:输入框类型, title
25、:属性中文名,must:是否必填,multi:是否多选,inputStyle:是否只读cIds 所属的资源类型 iduserId 用户 idfileName 资源文件名userName 用户名查看页面元数据返回 json 字符串样例:“apiVersion“:“1.0“,“categoryId“:“2c90b3833d1af453013d1af4555b0001“,“isTransform“:“1“,“type“:null,“rolePath“:“css/“,“id“:“32553c25e7e64381a644f5797ef77787“,“windowName“:null,“roleView“
26、:“6“,“share“:“1“,“roleNum“:“,“categorys“:“id“:“2c90b3833d1af453013d1af4555b0001“,“vName“:“书签 1“,“id“:“2c90b3833d1ab052013d1ab054870002“,“vName“:“书签 2“,“id“:“297eceff3ed44439013ed4a650ba0004“,“vName“:“书签 3“,“itemInputs“:“columnAttr“:“v_description“,“inputType“:“input“,“title“:“属性1“,“valueStr“:“22“,“m
27、ust“:“,“columnAttr“:“v_duration“,“inputType“:“input“,“title“:“属性2“,“valueStr“:“7“,“multi“:“1“,“must“:“,“inputStyle“:“,“columnAttr“:“v_size“,“inputType“:“input“,“title“:“属性3“,“valueStr“:“472576“,“must“:“,“inputStyle“:“readonly“,“columnAttr“:“v_name“,“inputType“:“input“,“title“:“属性 4“,“valueStr“:“值描述“
28、,“must“:“,“columnAttr“:“v_number“,“inputType“:“input“,“title“:“属性5“,“valueStr“:“22“,“must“:“,“columnAttr“:“v_fileformat“,“inputType“:“input“,“title“:“属性6“,“valueStr“:“doc“,“multi“:“NULL“,“must“:“,“inputStyle“:“readonly“,“userId“:“e155f4f9a692441d9696e112449b3eef“,“viewfile“:“true“,“userName“:“mteach
29、er1“,“down“:“0“,“organiztionId“:“8b10147cbf00c106d7778c264ea13567/“参数说明:参数 描述method 固定值 viewid 资源 iduserId 用户 id返回说明:参数 描述apiVersion Json 字符串版本treeId 资源分布树categoryId 资源类型 idisTransform 转换状态,0:正在转换,1: 转换成功,2:转换失败type 废弃rolePath 不同角色对应的 css 样式路径id 资源 iditemInputs 资源属性相关信息,columnAttr:属性在数据库表中对应的字段名,inp
30、utType:输入框类型,title:属性名称,valueStr:属性值,must:是否必填,1:必填,0 :不必填multi:是否多选,1 :多选inputStyle:是否只读,readonly:只读, ”:不只读userId 用户 iduserName 用户名organiztionId 组织 id数据查询列表示例“apiVersion“:“1.0“,“str”:”“Rows“:id:“46397576bf7945de806215be12824a17“,description:“3“,number:“3“,fileFormat:“docx“,duration:“4“,size:“94.18K
31、B“,name:“cs“,transform:“转换完成“,swfFilePath:“res/fileUpload/2015-10-27-11/2015-10-27-11_1445915875824.swf“,fileName:“cs.docx“,v_isdown:“0“,v_spid:“hcxy“,createTimeStamp:“2015-10-27 11:19:17“,createEmployee:“mteacher1“,isEdit:“true“,id:“362d5922019e480aabfb3db88dd30df0“,description:“2“,number:“2“,fileF
32、ormat:“mp4“,duration:“12“,size:“226.52KB“,name:“bjce“,transform:“转换完成“,swfFilePath:“UH0UFAV3K1ZDLBZOUNOI2CZ6GKCY9RL8.mp4“,fileName:“bjce.mp4“,v_isdown:“0“,v_spid:“hcxy“,createTimeStamp:“2015-10-27 11:17:09“,createEmployee:“mteacher1“,isEdit:“true“,id:“ef9cd4376c914a6fa7490aaf764b99b4“,description:“2
33、“,number:“2“,fileFormat:“zip“,duration:“2“,size:“1.11KB“,name:“10213“,transform:“无需转换“,swfFilePath:“res/fileUpload/2015-10-23-15/2015-10-23-15_1445587199249/“,fileName:“10213.zip“,v_isdown:“0“,v_spid:“hcxy“,createTimeStamp:“2015-10-23 16:00:39“,createEmployee:“mteacher1“,isEdit:“true“,id:“0b1205ce12
34、ca4dad871addae76532e52“,description:“啊S“,number:“1“,fileFormat:“html“,duration:“1“,size:“75.0B“,name:“1023 哈哈哈“,transform:“无需转换“,swfFilePath:“res/fileUpload/2015-10-23-15/2015-10-23-15_1445586695866.html“,fileName:“1023 哈哈哈.html“,v_isdown:“0“,v_spid:“hcxy“,createTimeStamp:“2015-10-23 15:52:19“,creat
35、eEmployee:“mteacher1“,isEdit:“true“,id:“a7d42d22c9d844d9b0c117cf1ba9fbc8“,description:“bb“,number:“bb“,fileFormat:“doc“,duration:“10“,size:“121.5KB“,name:“七年级下册 64 直面挫折教案 2“,transform:“转换完成“,swfFilePath:“res/fileUpload/2015-10-22-18/2015-10-22-18_1445508545197.swf“,fileName:“七年级下册 6.4 直面挫折教案2.doc“,v
36、_isdown:“0“,v_spid:“hcxy“,createTimeStamp:“2015-10-22 18:09:52“,createEmployee:“mteacher1“,isEdit:“true“,id:“60e021114224443fb92119de5cd625e7“,description:“aa“,number:“aa“,fileFormat:“doc“,duration:“7“,size:“461.5KB“,name:“八年级下册 71 力同步练习 4“,transform:“转换完成“,swfFilePath:“res/fileUpload/2015-10-22-18/
37、2015-10-22-18_1445508518985.swf“,fileName:“八年级下册 7.1 力同步练习4.doc“,v_isdown:“0“,v_spid:“hcxy“,createTimeStamp:“2015-10-22 18:09:26“,createEmployee:“mteacher1“,isEdit:“true“,id:“53eabcd142c54a12be64d3070d629ffd“,description:“aa“,number:“aa“,fileFormat:“doc“,duration:“10“,size:“121.5KB“,name:“七年级下册 64 直
38、面挫折教案 2“,transform:“转换完成“,swfFilePath:“res/fileUpload/2015-08-27-15/2015-08-27-15_1440659480763.swf“,fileName:“七年级下册 6.4 直面挫折教案2.doc“,v_isdown:“0“,v_spid:“hcxy“,createTimeStamp:“2015-08-27 15:12:02“,createEmployee:“mteacher1“,isEdit:“true“,id:“d2a3f6d9834144568bd7949140a6948c“,description:“sadfgsadf
39、“,number:“ffdsaf“,fileFormat:“zip“,duration:“1212“,size:“1.11KB“,name:“test“,transform:“无需转换“,swfFilePath:“res/fileUpload/2015-08-25-09/2015-08-25-09_1440466893974/“,fileName:“test.zip“,v_isdown:“0“,v_spid:“hcxy“,createTimeStamp:“2015-08-25 09:42:14“,createEmployee:“mteacher1“,isEdit:“true“,id:“c089
40、c63bfe9a43e484239c80ac40d15c“,description:“aa“,number:“20150824“,fileFormat:“doc“,duration:“10“,size:“121.5KB“,name:“七年级下册 64 直面挫折教案 2“,transform:“转换完成“,swfFilePath:“res/fileUpload/2015-08-24-10/2015-08-24-10_1440383395223.swf“,fileName:“七年级下册 6.4 直面挫折教案 2.doc“,v_isdown:“0“,v_spid:“hcxy“,createTimeS
41、tamp:“2015-08-24 10:30:36“,createEmployee:“mteacher1“,isEdit:“true“,id:“de45cda200fa434681670de2efc8b1ca“,description:“aa“,number:“20150824“,fileFormat:“doc“,duration:“10“,size:“121.5KB“,name:“七年级下册 64 直面挫折教案 2“,transform:“转换完成“,swfFilePath:“res/fileUpload/2015-08-24-10/2015-08-24-10_1440382950681.s
42、wf“,fileName:“七年级下册 6.4 直面挫折教案 2.doc“,v_isdown:“0“,v_spid:“hcxy“,createTimeStamp:“2015-08-24 10:23:26“,createEmployee:“mteacher1“,isEdit:“true“,“Total“:72”参数说明:参数 描述method 固定值 jsoncategory 资源类型 iduserId 用户 idtypeSql 默认的查询条件控制情况page 当前页数pagesize 每页资源数time 随机数,防止浏览器缓存返回说明:参数 描述apiVersion json 字符串版本id
43、资源 iddescription 资源描述number 资源编号fileFormat 资源格式duration 页数时长size 大小name 资源名称transform 转换情况swfFilePath Swf 文件路径fileName 文件名v_isdown 是否可以下载,1:可以下载 0:不可以下载v_spid 视频 idcreateTimeStamp 创建时间createEmployee 创建者isEdit 是否可以编辑,ture:有编辑和删除按钮, false:没有编辑和删除按钮Total 资源总数附件 1 文件模板附件 2 信息码代码 描述100 禁止访问,未通过安全策略验证。101
44、 post请求参数格式不正确,应为json格式。102 新增主键或唯一编码有重复。103 枚举类型的维度选择了不存在的值。例:第N行,枚举类型维度M,并不包含值W,请重新填写。104 维度数据为空。例:第N行,维度M,不能为空,请重新填写。105 维度数据格式不正确。例:第N行,维度M,模板定义类型为数值型,值W转换数值时发生错误。106 模板信息缺少必要的数据维度。例:模板XXX,必要维度缺少 “院校”、“专业”请重新上传。107 模板信息里有不能识别的维度。例:系统不能识别“某任意填写维度”,请确认模板。108 系统内部错误。附件 3 Google json style“apiVersion“:“1.0“,“method“:“postData“,“template“:“学生基本信息“,“data“: “pageIndex“:1,“itemsPerPage“:1,“totalItems“:3,“fields“:“院校“,“专业“,“姓名“,“年龄“,“items“:“福建 XX 大学“,“英语“,“王秋月“,“21“, “福建 XX 大学“,“英语“,“韩丽丽“,“26“, “福建 XX 大学“,“英语“,“吴燕英“,“23“