您现在的位置: 论文网 >> 教育论文 >> 学科教育论文 >> 教育教学数据Open API设计与实现论文

教育教学数据Open API设计与实现

出处:论文网
时间:2016-01-09

教育教学数据Open API设计与实现

  中图分类号:TP319

  文献标识码:A 文章编号:1672-7800(2015)005-0115-04

  作者简介:黄小冬(1986-),男,江西石城人,硕士,重庆工商职业学院教务处助教,研究方向为教育信息化;陈薇(1986-),女,重庆人,硕士,重庆工商职业学院建筑工程学院助教,研究方向为教育学原理。

  0 引言

  教育教学数据管理系统是教学信息化中的核心部分, 众多教育教学管理系统的涌现,给教育教学带来便利的同时也带来了不少挑战。各教育教学系统数据相互隔离,无法进行共享;在进行各种教育教学数据填报过程中,大量数据重复采集、统计。此外,新的教育教学系统投入使用,重复导入教师、学生数据等初始化操作,数据存在大量冗余度和不完整性。本文针对教育教学数据管理的共性问题提出了一种数据服务架构,通过建立一个完整、统一的教育教学数据Open API,实现教育教学数据的完整、开放、共享。

  1 教育教学数据Open API需求分析

  1.1 教育教学数据特性

  教育教学数据应用在从计算机管理教学(Computer-Managed Instruction,CMI)发展到基于数据的决策(Data-Driven Decision Making,DDDM)过程中,自身也在发生着变化[1],其具有以下突出特性:①动态性:教育教学数据是动态变化的,在教育教学过程中存在着大量的更新变化,数据也会不断累积;②分布性:教育教学数据存储于不同的数据管理系统中,存储的数据库类型不尽相同,既有关系式数据库(SQL),也有文档式(NOSQL)数据库;③冗余与冲突:由于业务需要而导致各教育教学信息系统中大量重复的数据存在,这部分数据又因为难以做到更新一致而容易产生数据冲突;④结构复杂:教育教学数据庞杂,数据之间存在关联,结构非常复杂。

  针对教育教学数据的特性,教育教学数据Open API设计与实现要满足以下需求:①教育教学数据的获取:Open API服务的数据源是分布且结构复杂的,需要根据数据的关联获取相应数据;②教育教学数据的封装:将获取的数据进行处理后封装,提供统一格式的数据,并按照提供数据的类型进行描述;③教育教学数据的安全访问机制:采用授权访问机制,保证安全获取教育教学数据。

  1.2 REST风格

  REST是Roy Fielding在其博士论文中提出的一种软件架构风格[2]。RESTful Web服务亦称RESTful Web API,即一种使用HTTP并遵循REST原则的Web服务。REST 要求开发人员显式地使用 HTTP 方法,并且使用方式与协议定义一致。通过 HTTP 协议中定义的方法(PUT、GET、POST和DELETE)对资源进行 CRUD 操作[3]。所谓资源,就是封装后供调用的数据处理方法:①若要创建资源,使用POST 方法;②若要检索某个资源,使用GET 方法;③若要更改资源状态或对其进行更新,使用PUT 方法;④若要删除某个资源,使用DELETE 方法。

  RESTful Web服务紧密结合Oauth认证协议,共同构成了Open API服务。Oauth(open authorization,开放认证)是一个开放认证标准。Oauth1.0在2010年4月获得IETF的编号:5 894[4],标志着Oauth1.0正式成为互联网标准协议。Oauth2.0消除了Oauth1中Access token几乎无限期所带来的安全隐患,目前互联网开放平台几乎全部采用Oauth2.0认证授权的RESTful Web API访问。

  2 Open API服务功能模块

  根据教育教学的特性与REST架构风格,Open API服务构建为3个功能模块:

  ①数据源管理模块;②API接口定义模块;③访问授权模块。

  (1)数据源管理模块。教育教学数据的数据源分布于不同的教育教学业务系统中,Open API服务的数据源管理模块旨在提供一个松耦合的数据连接方式,既保证分布性的数据能够聚合,也使业务系统的升级不影响Open API服务的运行。

  Open API服务中教育教学数据分为本地(Local)数据与分布(Distribution)数据。本地数据主要包含教师、学生、学校部门和授权访问客户端等基本数据,以及经过认证审核后的统计数据;分布数据为各类教育教学业务系统中的教师、学生、学校部门等业务数据。连接方式上,数据源管理模块直连本地数据,分布数据则通过RPC的方式连接业务数据源。

  (2)API接口模块。本研究中API接口是指响应数据请求,按一定逻辑进行处理后,统一返回状态与数据格式的传输方法。API接口模块是Open API服务的核心模块,其以REST方式处理数据请求,采取统一路由映射,在URI中设置Prefix区分API版本,便于Open API的版本升级,将API访问映射到Controller中相应的Action,对数据进行处理并作出状态响应。

  (3)访问授权模块。访问授权是指为保证数据安全,只对已接入的客户端授权,并对每次数据API访问请求进行安全验证。对请求数据的客户端权限域scope、请求的AccessToken与ResfreshToken、状态state、用户标识等进行验证。   3 教育教学数据Open API设计

  教育教学数据Open API服务采用三层架构:即数据访问层、API接口层和访问授权层,如图1所示。Open API服务还包括了数据库。

  (1)数据访问层:负责连接本地数据库与分布数据库,为API接口层提供各类数据的添加、删除、查询、修改方法,封装对数据库的访问。对分布数据的访问采用RPC方式,一定程度上减少与具体教学业务系统数据结构的耦合度。

  (2)API接口层:负责响应数据请求,根据数据请求的不同方式、访问的资源进行相应的数据处理并返回数据。流程上, API接口层通过路由规则将请求由GET、POST、PUT、DELETE转发到Controller,进行数据的查询、新增、更新或删除,将处理状态值与需要返回的数据封装为JSON返回。另外,API接口层根据API接口的名称、类别、需要的数据域等自动生成API文档,便于Open API的第三方使用。

  (3)访问授权层:负责维护API的数据安全,包括客户端管理与访问验证服务。客户端申请接入后,需要请求数据时,客户端将请求跳转到Open API的授权页面,验证用户身份后,将用户的ID标识与AccessToken返回客户端,完成授权。在数据请求时,访问授权层则主要检查AccessToken是否有效,无效则拒绝服务,有效则响应数据。

  4 Open API服务原型实现

  基于教学教学数据Open API的设计,本研究采用了Phalcon-Micro框架及多种技术手段实现Open API服务的原型。Phalcon是C语言实现的高性能PHP框架,具有丰富的功能及完善的文档社区支持,Phalcon-Micro是特别适合RESTful API开发的工作模式。

  4.1 数据访问层实现技术

  Open API服务的本地数据采用了Mysql与MongoDB数据库。Mysql主要存储的是结构化的基本数据,MongoDB则存储统计评审后的数据。数据访问层使用Phalcon的ORM(对象关系映射)方式连接本地Mysql数据库,使用ODM(对象文档映射)方式连接本地MongoDB数据库,将数据库访问操作封装为对数据模型的方法调用。采用Phalcon Devtools的phalcon model TABLE_NAME命令可以快速自动生成Model类,简单调用其静态方法即可实现数据的增删改查操作。以使用邮箱与密码查询授权用户信息为例,代码片段如下:

  $conditions = " email = :user_id:AND teacher_pwd = :pwd:";

  $parameters = array(

  "user_id" =>$user_id,

  "pwd" => md5($pwd)

  );

  $user = OdpTeacher::findFirst(array($conditions,"bind"=>$parameters));

  对MongoDB的操作,则需要自定义Model类,但其数据操作与phalcon的ORM基本一致。

  对分布数据的操作,本研究采用Yar(http://pecl.php.net/package/yar)这一开源并行RPC框架。实现上,Yar Server使用相应数据库驱动封装对各种业务系统数据库的访问,根据Open API的数据需求提供数据操作接口。在业务系统升级涉及到数据库调整的时候,只需要修改Yar Server中的相关部分,就可以保证教育教学数据Open API不受影响。其中Open API的Yar Client实现代码如下:

  function callback($retval,$callinfo) {

  var_dump($retval);//返回数据

  }

  Yar_Concurrent_Client::call("http://host/api/","api",array("parameters"),"callback");

  4.2 API接口层实现技术

  API接口层要实现API访问的路由规则,使用的是Phalcon-Micro的MicroCollection类,通过实例化后设置对应的Controller名称,以及添加版本标识为资源前缀,设置不同的请求方法响应Action等,代码片段如下:

  $api = new MicroCollection();

  $api->setHandler('ApiController',true);

  $api->setPrefix('/api/v1');

  $api->get('/teacher/info/{teacher_id}',"getTeacherByIdAction");

  $api->get('/teacher/feature/{teacher_id}',"getTeacherFeatureAction");

  $api->post('/teacher/info/{teacher_id}',"addTeacherAction");

  ……

  $app->mount($api);

  API接口层的数据加工处理由MicroCollection实例绑定的Controller中的Action完成。处理流程:首先获取请求传递的数据,资源名称中正则的直接作为Action函数的参数使用,其它GET、POST、PUT、DELETE则从Phalcon的DI容器中REQUEST对象获取;然后调用数据访问层封装的数据操作进行加工处理,将处理状态码、状态描述和返回数据封装为JSON包,代码如下:   private function send_result( $code,$description,$data )

  {

  $obj = array();

  $obj['code'] = $code;

  $obj['msg'] = $description;

  $obj['data'] = $data;

  header('Content-type:application/json');

  die( json_encode( $obj ) );

  }

  API接口层的文档服务采用ApiDoc(http://apidocjs.com/)自动生成。ApiDoc支持多用编程语言的自动化API文档生成。在API接口层的Action函数前,用注释块的方式,描述该API的名称、分组、版本、权限要求等,如“@apiName GetTeacher”即表示该API的名称为GetTeacher。部分描述关键词如表1所示。

  执行ApiDoc的编译命令后就会自动生成Open API文档,如:apidoc -i myapp/ -o apidoc/ -t mytemplate/。文档服务将教育教学数据Open API的细节展示出来,方便第三方使用。

  4.3 访问授权层实现技术

  本层采用了目前流行的Oauth2授权认证方式,对API访问进行授权验证。在接入客户端时,记录客户端的client_name与redirect_url,生成其client_id、client_secret,分配grant_type类型与scope种类。访问授权层的认证服务主要分为生成与验证AccessToken(ATK)。为了安全考虑,ATK生命周期较短,使用过期的ATK访问API无法通过验证。需要请求API时,客户端检查存储在本地cookie中的ATK是否过期,若过期,可使用RefreshToken(RTK)获取新的ATK,RTK也过期则需要重新授权。

  为了实现访问授权层的Oauth2 Server,本层引用了一个开源的OAuth2 Server库(https://github.com/bshaffer/oauth2-server-php-docs)。为了降低服务的开销,将Oauth2的认证授权类封装为单例模式。其授权时的代码片段如下:

  $oauthServer=new OauthServer();

  $server = $oauthServer->getServerInstance();

  $request = OAuth2\\Request::createFromGlobals();

  $response = new OAuth2\\Response();

  // 验证authorize中参数是否合法

  if (!$server->validateAuthorizeRequest($request,$response)) {

  $response->send();

  die();

  }

  ……

  //验证用户身份后授权

  if($server->handleAuthorizeRequest($request,$response,$is_authorized,$teacher->teacher_id)){

  $response->send();

  }

  在请求教育教学数据Open API时,对请求所发送的ATK进行验证,代码片段如下:

  $oauthServer=new OauthServer();

  $server = $oauthServer->getServerInstance();

  if (!$server->verifyResourceRequest(OAuth2\\Request::createFromGlobals(),null,$scope)) {

  $server->getResponse()->send();

  die;

  }

  其中verifyResourceRequest就是Oauth2 Server封装好的请求验证方法,其会自动获取并解析请求所发送的ATK参数,验证其是否真实、是否在有效期内。其中的$scope指所请求API的权限要求,验证时会根据ATK查询到对应客户端的Scope权限域组中是否含有此Scope,含有则验证通过,响应API处理。

  5 结语

  针对教育教学数据动态性、分布性、冗余与冲突、结构复杂等特性,本文设计完成了基于REST风格的教育教学数据Open API,完成了数据源管理、API接口与访问授权的模块设计,在此基础上进行了整体的三层架构设计;采用PHP的Phalcon框架及多种开源库实现了教育教学数据Open API的原型。

教育教学数据Open API设计与实现

论文搜索
关键字:教育教学 教学 数据 设计 教育 Open
最新学科教育论文
试论如何在初中地理教学中有效整合信息技术
试论初中地理教学中乡土地理课程资源利用
软件工程专业“计算机网络”课程实验教学研
“赛教学训”四位一体化的物联网工程专业人
浅议幼儿美术趣味教学及创新能力的培养
如何利用奥尔夫音乐教学法培养幼儿的创造力
解读体育游戏在初中体育教学中的应用及影响
如何在美术教学中营造快乐的氛围
微积分慕课教学资源与应对策略探究
浅析在德育课教学中如何灌输团队观念
热门学科教育论文
浅谈语文教学中学生创造力的培养
变“教师教,学生学”为“教师教学生学”
素质教育与小学语文教学
小学“语文综合性学习”实践初探
素质教育和小学语文教学改革
现代体育课堂教学重在创新
浅谈《体育课程标准》与体育教师观念的转变
电教手段优化体育教学
陶行知健身思想研究
简论现代游泳技术与训练的发展方向