日期:2023-01-24 阅读量:0次 所属栏目:学前教育
文献标识码: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的原型。
本文链接:http://www.qk112.com/lwfw/jiaoyulunwen/xueqianjiaoyu/230411.html下一篇:校企合作提升职业院校教学质量