1、福建省学历继续教育数字化管理、监控平台数据采集传输协议、规约目录上报方式 .3文件上传 .3接口上报 .3文件上报 .3CSV 格式 .3XLS 格式 .4数据格式 .4接口上报 .4Google json style 介绍 .4上报规约 .4文件上传 .4RESTful 接口 .5身份验证 .5数据模板多版本 .5元数据业务 API.7数据项列表 .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 实现 Uni
4、code 编码。XLS 格式略数据格式无论是 CVS 或 XLS 格式的文件,数据文件第一行统一为数据维度(列)要求,具体的维度信息是系统模板生成。不可以任意修改或添加,上传时系统会根据模板信息进行导入前的校验或容错。数据维度如果不符合预期的模板定义,将会影响正常导入。数据维度的确认由客户、产品、需求人员共同商议决定。接口上报采用“RESTful 接口” ,协议数据描述统一采用 goolge json style 格式描述数据。Google json style 介绍:中文站:https:/ RESTful 接口上传,除采用统一的反馈信息码外,上传的方式和格式均有不同。反馈信息码参见附件 2.
5、文件上传 上传文件需要先根据上传业务类型,选择对应的上传模版。 上传时需要指定唯一维度发现相同数据时的处理方式默认规则如下“覆盖” 、 “忽略” 、“报错” 。并制定发生首次发现错误时的错误机制,全部中断或忽略继续处理。 文件上传完毕时会先开始错误报告检测,校验数据无误后,才会真正导入数据。 第一次校验通过的数据,第二次导入时还会再次校验一边,防止并发造成数据冲突。 文件上传完毕后会给出上传反馈报告,报告信息拟定如下“成功数” 、 “失败数” 、 “失败信息描述” (附件 1)等。 上传原始信息,系统会保留 n 个月,可用作数据校对所用。超过期限自动删除。 文件上传采取异步方式上传,并且定时(
6、间隔时间小于 10 秒)刷新展现最新进度。一期同一用户同一时间,只能上传一份文件。一个用户不可以同时上传多份文件。需等上一文件上传完毕并完全处理完成后,才可上传下一文件。RESTful 接口 接口上传数据不成功时会异步给出信息反馈,上报系统需要提供回调服务器地址和处理反馈信息,信息码表见附件 1。 数据完整性校验需要统一采用 MD5 方式,传输数据需要提供 MD5 码,防止数据中途被劫持修改。 上报数据维度需要制定模板信息,并对应填写相应数据。 上报数据需含有 EduPass 制定的 TGT 或 ST。 RESTful 接口上传时需要先明确数据模版,确认需要上传的格式。报送时不可连续发送,单条
7、发总间隔需要至少间隔 200ms 以上。以免对主系统压力冲击。此问题需要明确注意。 系统上报时间最好定在凌晨后执行,避免系统使用高峰,造成网络拥堵。身份验证因文件上传需要登录系统方可执行,所以只有基于 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 pro
10、perty“,“ingredients“: “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“:“2c90b3833d1af4
11、53013d1af4555b0001“,“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“:“字段四“,“
12、name“:“duration“,“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“,“w
13、idth“:136“,“type“:“,“myStore“:0,“rolePath“:“teacher/“,“typeSql“:“,“lastUpload“:,“category“:“id“:“2c90b3833d1af453013d1af4555b0001“,“vName“:“描述 1“,“roleNum“:“1“,“categorys“:“id“:“2c90b3833d1af453013d1af4555b0001“,“vName“:“描述 2“,“select“:“selected“,“id“:“2c90b3833d1ab052013d1ab054870002“,“vName“:“描述 3
14、“,“id“:“297eceff3ed44439013ed4a650ba0004“,“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“,“
15、title“:“属性3“,“multi“:“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“,“mul
16、ti“:“1“,“must“:“1“,“inputStyle“:“readonly“,“userId“:“e155f4f9a692441d9696e112449b3eef“,“statisticBean“:“totalResource“:0,“myUpload“:0,“myStored“:0,“lastView“:,“lastNews“:,“athor“:“wdc“,“roleType“:“1“,“myUpload“:0,“organiztionId“:“8b10147cbf00c106d7778c264ea13567/“参数说明:参数 描述apiVersion json 字符串版本forma
17、tStr 文件格式字符串formatCheckFlag 检查格式。gridColumns 资源属性相关信息,align:样式居左,display:属性名称,name:属性英文名,type:类型,width:样式宽度myStore 废弃,现页面已无此功能,原功能是我的收藏。rolePath 不同角色对应的 css 样式路径lastUpload 废弃,现页面已无此功能,原功能是最新上传。itemInputs 简单搜索框相关信息,columnAttr:字段名称,inputType:搜索框类型,title:属性名称,multi:是否多选,must:是否必填,inputStyle:是否只读ntItemI
18、nputs 高级搜索框相关信息,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“:“8b101
19、47cbf00c106d7778c264ea13567,2c90b3833d1ab052013d1ab054870002“,“treeIds“:“,“id“:“8b10147cbf00c106d7778c264ea13567,2c90b3833d1af453013d1af4555b0001“,“treeIds“:“,“categoryId“:null,“rolePath“:“css/“,“id“:“f71e0480cea44278971b9ed3863b7d4d“,“orgId“:“8b10147cbf00c106d7778c264ea13567“,“windowName“:null,“rol
20、eView“:“6“,“share“:“1“,“roleNum“:“,“category“:null,“categorys“:“id“:“2c90b3833d1af453013d1af4555b0001“,“vName“:“书签 1“,“id“:“2c90b3833d1ab052013d1ab054870002“,“vName“:“书签 2“,“id“:“297eceff3ed44439013ed4a650ba0004“,“vName“:“书签 3“,“itemInputs“:“columnAttr“:“v_description“,“inputType“:“input“,“title“:“属
21、性 1“,“valueStr“:“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“:
22、“input“,“title“:“属性 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“:“2c90b3833d1ab0520
23、13d1ab054870002“,“2c90b3833d1af453013d1af4555b0001“,“userId“:“e155f4f9a692441d9696e112449b3eef“,“fileName“:“扩展属性示列“,“userName“:“mteacher1“,“down“:“0“,“oIds“:“8b10147cbf00c106d7778c264ea13567“,“organiztionId“:“8b10147cbf00c106d7778c264ea13567/“参数说明:参数 描述method 固定值 updateid 资源 iduserId 用户 id返回说明:参数 描述
24、apiVersion Json 字符串版本orgs 组织相关信息,id:组织 id, name:组织名称,spid:视频 idtreeIds 废弃categoryId 废弃rolePath 不同角色对应的 css 样式路径id 资源 idorgId 组织 idroleView 角色类型, ”1”代表教师, ”代表其它share 是否共享,1:共享,0:不共享roleNum 角色标志, ”1”代表教师, ”代表其它categorys 当前组织下的所有类型书签,id:资源 id,vName:名称itemInputs 资源属性相关信息,columnAttr:属性在数据库表中对应的字段名,inputT
25、ype:输入框类型, title:属性中文名,must:是否必填,multi:是否多选,inputStyle:是否只读cIds 所属的资源类型 iduserId 用户 idfileName 资源文件名userName 用户名查看页面元数据返回 json 字符串样例:“apiVersion“:“1.0“,“categoryId“:“2c90b3833d1af453013d1af4555b0001“,“isTransform“:“1“,“type“:null,“rolePath“:“css/“,“id“:“32553c25e7e64381a644f5797ef77787“,“windowName“:null,“roleView“:“6“,“share“:“1“,“roleNum“:“,“categorys“:“id“:“2c90b3833d1af453013d1af4555b0001“,“vName“:“书签 1“,“id“:“2c90b3833d1ab052013d1ab054870002“,“vName“:“书签 2“,“id“:“297eceff3ed44439013ed4a650ba0004“,“vName“:“书签 3“,