教育教學(xué)數(shù)據(jù)Open API設(shè)計(jì)與實(shí)現(xiàn)_第1頁(yè)
教育教學(xué)數(shù)據(jù)Open API設(shè)計(jì)與實(shí)現(xiàn)_第2頁(yè)
教育教學(xué)數(shù)據(jù)Open API設(shè)計(jì)與實(shí)現(xiàn)_第3頁(yè)
教育教學(xué)數(shù)據(jù)Open API設(shè)計(jì)與實(shí)現(xiàn)_第4頁(yè)
教育教學(xué)數(shù)據(jù)Open API設(shè)計(jì)與實(shí)現(xiàn)_第5頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

教育教學(xué)數(shù)據(jù)OpenAPI設(shè)計(jì)與實(shí)現(xiàn)教育教學(xué)數(shù)據(jù)OpenAPI設(shè)計(jì)與實(shí)現(xiàn)

中圖分類(lèi)號(hào):TP319

文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1672-7800〔2022〕005-0115-04

作者簡(jiǎn)介:黃小冬〔1986-〕,男,江西石城人,碩士,重慶工商職業(yè)學(xué)院教務(wù)處助教,研究方向?yàn)榻逃畔⒒?;陳薇?986-〕,女,重慶人,碩士,重慶工商職業(yè)學(xué)院建筑項(xiàng)目學(xué)院助教,研究方向?yàn)榻逃龑W(xué)原理。

0引言

教育教學(xué)數(shù)據(jù)管理系統(tǒng)是教學(xué)信息化中的核心局部,眾多教育教學(xué)管理系統(tǒng)的涌現(xiàn),給教育教學(xué)帶來(lái)便利的同時(shí)也帶來(lái)了不少挑戰(zhàn)。各教育教學(xué)系統(tǒng)數(shù)據(jù)相互隔離,無(wú)法進(jìn)行共享;在進(jìn)行各種教育教學(xué)數(shù)據(jù)填報(bào)過(guò)程中,大量數(shù)據(jù)重復(fù)采集、統(tǒng)計(jì)。此外,新的教育教學(xué)系統(tǒng)投入使用,重復(fù)導(dǎo)入教師、學(xué)生數(shù)據(jù)等初始化操作,數(shù)據(jù)存在大量冗余度和不完整性。本文針對(duì)教育教學(xué)數(shù)據(jù)管理的共性問(wèn)題提出了一種數(shù)據(jù)效勞架構(gòu),通過(guò)建立一個(gè)完整、統(tǒng)一的教育教學(xué)數(shù)據(jù)OpenAPI,實(shí)現(xiàn)教育教學(xué)數(shù)據(jù)的完整、開(kāi)放、共享。

1教育教學(xué)數(shù)據(jù)OpenAPI需求分析

1.1教育教學(xué)數(shù)據(jù)特性

教育教學(xué)數(shù)據(jù)應(yīng)用在從計(jì)算機(jī)管理教學(xué)〔Computer-ManagedInstruction,CMI〕開(kāi)展到基于數(shù)據(jù)的決策〔Data-DrivenDecisionMaking,DDDM〕過(guò)程中,自身也在發(fā)生著變化[1],其具有下列突出特性:①動(dòng)態(tài)性:教育教學(xué)數(shù)據(jù)是動(dòng)態(tài)變化的,在教育教學(xué)過(guò)程中存在著大量的更新變化,數(shù)據(jù)也會(huì)不斷累積;②分布性:教育教學(xué)數(shù)據(jù)存儲(chǔ)于不同的數(shù)據(jù)管理系統(tǒng)中,存儲(chǔ)的數(shù)據(jù)庫(kù)類(lèi)型不盡相同,既有關(guān)系式數(shù)據(jù)庫(kù)〔SQL〕,也有文檔式〔NOSQL〕數(shù)據(jù)庫(kù);③冗余與沖突:由于業(yè)務(wù)需要而導(dǎo)致各教育教學(xué)信息系統(tǒng)中大量重復(fù)的數(shù)據(jù)存在,這局部數(shù)據(jù)又因?qū)擂我宰龅礁乱恢露菀桩a(chǎn)生數(shù)據(jù)沖突;④結(jié)構(gòu)復(fù)雜:教育教學(xué)數(shù)據(jù)龐雜,數(shù)據(jù)之間存在關(guān)聯(lián),結(jié)構(gòu)非常復(fù)雜。

針對(duì)教育教學(xué)數(shù)據(jù)的特性,教育教學(xué)數(shù)據(jù)OpenAPI設(shè)計(jì)與實(shí)現(xiàn)要滿(mǎn)足下列需求:①教育教學(xué)數(shù)據(jù)的獲?。篛penAPI效勞的數(shù)據(jù)源是分布且結(jié)構(gòu)復(fù)雜的,需要根據(jù)數(shù)據(jù)的關(guān)聯(lián)獲取相應(yīng)數(shù)據(jù);②教育教學(xué)數(shù)據(jù)的封裝:將獲取的數(shù)據(jù)進(jìn)行處理后封裝,提供統(tǒng)一格式的數(shù)據(jù),并按照提供數(shù)據(jù)的類(lèi)型進(jìn)行描述;③教育教學(xué)數(shù)據(jù)的平安訪(fǎng)問(wèn)機(jī)制:采用授權(quán)訪(fǎng)問(wèn)機(jī)制,保證平安獲取教育教學(xué)數(shù)據(jù)。

1.2REST格調(diào)

REST是RoyFielding在其博士論文中提出的一種軟件架構(gòu)格調(diào)[2]。RESTfulWeb效勞亦稱(chēng)RESTfulWebAPI,即一種使用HTTP并遵循REST原那么的Web效勞。REST要求開(kāi)發(fā)人員顯式地使用HTTP辦法,并且使用方式與協(xié)議定義一致。通過(guò)HTTP協(xié)議中定義的辦法〔PUT、GET、POST和DELETE〕對(duì)資源進(jìn)行CRUD操作[3]。所謂資源,就是封裝后供調(diào)用的數(shù)據(jù)處理辦法:①假設(shè)要?jiǎng)?chuàng)立資源,使用POST辦法;②假設(shè)要檢索某個(gè)資源,使用GET辦法;③假設(shè)要更改資源狀態(tài)或?qū)ζ溥M(jìn)行更新,使用PUT辦法;④假設(shè)要?jiǎng)h除某個(gè)資源,使用DELETE辦法。

RESTfulWeb效勞緊密結(jié)合Oauth認(rèn)證協(xié)議,共同構(gòu)成了OpenAPI效勞。Oauth〔openauthorization,開(kāi)放認(rèn)證〕是一個(gè)開(kāi)放認(rèn)證規(guī)范。Oauth1.0在2022年4月獲得IETF的編號(hào):5894[4],標(biāo)志著Oauth1.0正式成為互聯(lián)網(wǎng)規(guī)范協(xié)議。Oauth2.0打消了Oauth1中Accesstoken幾乎無(wú)限期所帶來(lái)的平安隱患,目前互聯(lián)網(wǎng)開(kāi)放平臺(tái)幾乎全部采用Oauth2.0認(rèn)證授權(quán)的RESTfulWebAPI訪(fǎng)問(wèn)。

2OpenAPI效勞功能模塊

根據(jù)教育教學(xué)的特性與REST架構(gòu)格調(diào),OpenAPI效勞構(gòu)建為3個(gè)功能模塊:

①數(shù)據(jù)源管理模塊;②API接口定義模塊;③訪(fǎng)問(wèn)授權(quán)模塊。

〔1〕數(shù)據(jù)源管理模塊。教育教學(xué)數(shù)據(jù)的數(shù)據(jù)源分布于不同的教育教學(xué)業(yè)務(wù)系統(tǒng)中,OpenAPI效勞的數(shù)據(jù)源管理模塊旨在提供一個(gè)松耦合的數(shù)據(jù)連接方式,既保證分布性的數(shù)據(jù)能夠聚合,也使業(yè)務(wù)系統(tǒng)的升級(jí)不影響OpenAPI效勞的運(yùn)行。

OpenAPI效勞中教育教學(xué)數(shù)據(jù)分為本地〔Local〕數(shù)據(jù)與分布〔Distribution〕數(shù)據(jù)。本地?cái)?shù)據(jù)主要包含教師、學(xué)生、學(xué)校部門(mén)和授權(quán)訪(fǎng)問(wèn)客戶(hù)端等根本數(shù)據(jù),以及經(jīng)過(guò)認(rèn)證審核后的統(tǒng)計(jì)數(shù)據(jù);分布數(shù)據(jù)為各類(lèi)教育教學(xué)業(yè)務(wù)系統(tǒng)中的教師、學(xué)生、學(xué)校部門(mén)等業(yè)務(wù)數(shù)據(jù)。連接方式上,數(shù)據(jù)源管理模塊直連本地?cái)?shù)據(jù),分布數(shù)據(jù)那么通過(guò)RPC的方式連接業(yè)務(wù)數(shù)據(jù)源。

〔2〕API接口模塊。本研究中API接口是指響應(yīng)數(shù)據(jù)請(qǐng)求,按一定邏輯進(jìn)行處理后,統(tǒng)一返回狀態(tài)與數(shù)據(jù)格式的傳輸辦法。API接口模塊是OpenAPI效勞的核心模塊,其以REST方式處理數(shù)據(jù)請(qǐng)求,采取統(tǒng)一路由映射,在URI中設(shè)置Prefix辨別API版本,便于OpenAPI的版本升級(jí),將API訪(fǎng)問(wèn)映射到Controller中相應(yīng)的Action,對(duì)數(shù)據(jù)進(jìn)行處理并作出狀態(tài)響應(yīng)。

〔3〕訪(fǎng)問(wèn)授權(quán)模塊。訪(fǎng)問(wèn)授權(quán)是指為保證數(shù)據(jù)平安,只對(duì)已接入的客戶(hù)端授權(quán),并對(duì)每次數(shù)據(jù)API訪(fǎng)問(wèn)請(qǐng)求進(jìn)行平安驗(yàn)證。對(duì)請(qǐng)求數(shù)據(jù)的客戶(hù)端權(quán)限域scope、請(qǐng)求的AccessToken與ResfreshToken、狀態(tài)state、用戶(hù)標(biāo)識(shí)等進(jìn)行驗(yàn)證。3教育教學(xué)數(shù)據(jù)OpenAPI設(shè)計(jì)

教育教學(xué)數(shù)據(jù)OpenAPI效勞采用三層架構(gòu):即數(shù)據(jù)訪(fǎng)問(wèn)層、API接口層和訪(fǎng)問(wèn)授權(quán)層,如圖1所示。OpenAPI效勞還包括了數(shù)據(jù)庫(kù)。

〔1〕數(shù)據(jù)訪(fǎng)問(wèn)層:負(fù)責(zé)連接本地?cái)?shù)據(jù)庫(kù)與分布數(shù)據(jù)庫(kù),為API接口層提供各類(lèi)數(shù)據(jù)的添加、刪除、查詢(xún)、修改辦法,封裝對(duì)數(shù)據(jù)庫(kù)的訪(fǎng)問(wèn)。對(duì)分布數(shù)據(jù)的訪(fǎng)問(wèn)采用RPC方式,一定程度上減少與具體教學(xué)業(yè)務(wù)系統(tǒng)數(shù)據(jù)結(jié)構(gòu)的耦合度。

〔2〕API接口層:負(fù)責(zé)響應(yīng)數(shù)據(jù)請(qǐng)求,根據(jù)數(shù)據(jù)請(qǐng)求的不同方式、訪(fǎng)問(wèn)的資源進(jìn)行相應(yīng)的數(shù)據(jù)處理并返回?cái)?shù)據(jù)。流程上,API接口層通過(guò)路由規(guī)那么將請(qǐng)求由GET、POST、PUT、DELETE轉(zhuǎn)發(fā)到Controller,進(jìn)行數(shù)據(jù)的查詢(xún)、新增、更新或刪除,將處理狀態(tài)值與需要返回的數(shù)據(jù)封裝為JSON返回。另外,API接口層根據(jù)API接口的名稱(chēng)、類(lèi)別、需要的數(shù)據(jù)域等自動(dòng)生成API文檔,便于OpenAPI的第三方使用。

〔3〕訪(fǎng)問(wèn)授權(quán)層:負(fù)責(zé)維護(hù)API的數(shù)據(jù)平安,包括客戶(hù)端管理與訪(fǎng)問(wèn)驗(yàn)證效勞。客戶(hù)端申請(qǐng)接入后,需要請(qǐng)求數(shù)據(jù)時(shí),客戶(hù)端將請(qǐng)求跳轉(zhuǎn)到OpenAPI的授權(quán)頁(yè)面,驗(yàn)證用戶(hù)身份后,將用戶(hù)的ID標(biāo)識(shí)與AccessToken返回客戶(hù)端,完成授權(quán)。在數(shù)據(jù)請(qǐng)求時(shí),訪(fǎng)問(wèn)授權(quán)層那么主要檢查AccessToken是否有效,無(wú)效那么拒絕效勞,有效那么響應(yīng)數(shù)據(jù)。

4OpenAPI效勞原型實(shí)現(xiàn)

基于教學(xué)教學(xué)數(shù)據(jù)OpenAPI的設(shè)計(jì),本研究采用了Phalcon-Micro框架及多種技術(shù)伎倆實(shí)現(xiàn)OpenAPI效勞的原型。Phalcon是C語(yǔ)言實(shí)現(xiàn)的高性能PHP框架,具有豐盛的功能及完善的文檔社區(qū)支持,Phalcon-Micro是特別適合RESTfulAPI開(kāi)發(fā)的工作模式。

4.1數(shù)據(jù)訪(fǎng)問(wèn)層實(shí)現(xiàn)技術(shù)

OpenAPI效勞的本地?cái)?shù)據(jù)采用了Mysql與MongoDB數(shù)據(jù)庫(kù)。Mysql主要存儲(chǔ)的是結(jié)構(gòu)化的根本數(shù)據(jù),MongoDB那么存儲(chǔ)統(tǒng)計(jì)評(píng)審后的數(shù)據(jù)。數(shù)據(jù)訪(fǎng)問(wèn)層使用Phalcon的ORM〔對(duì)象關(guān)系映射〕方式連接本地Mysql數(shù)據(jù)庫(kù),使用ODM〔對(duì)象文檔映射〕方式連接本地MongoDB數(shù)據(jù)庫(kù),將數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)操作封裝為對(duì)數(shù)據(jù)模型的辦法調(diào)用。采用PhalconDevtools的phalconmodelTABLE_NAME命令可以快速自動(dòng)生成Model類(lèi),簡(jiǎn)單調(diào)用其靜態(tài)辦法即可實(shí)現(xiàn)數(shù)據(jù)的增刪改查操作。以使用郵箱與密碼查詢(xún)授權(quán)用戶(hù)信息為例,代碼片段如下:

$conditions="email=:user_id:ANDteacher_pwd=:pwd:";

$parameters=array〔

"user_id"=>$user_id,

"pwd"=>md5〔$pwd〕

〕;

$user=OdpTeacher::findFirst〔array〔$conditions,"bind"=>$parameters〕〕;

對(duì)MongoDB的操作,那么需要自定義Model類(lèi),但其數(shù)據(jù)操作與phalcon的ORM根本一致。

對(duì)分布數(shù)據(jù)的操作,本研究采用Yar〔http:///package/yar〕這一開(kāi)源并行RPC框架。實(shí)現(xiàn)上,YarServer使用相應(yīng)數(shù)據(jù)庫(kù)驅(qū)動(dòng)封裝對(duì)各種業(yè)務(wù)系統(tǒng)數(shù)據(jù)庫(kù)的訪(fǎng)問(wèn),根據(jù)OpenAPI的數(shù)據(jù)需求提供數(shù)據(jù)操作接口。在業(yè)務(wù)系統(tǒng)升級(jí)波及到數(shù)據(jù)庫(kù)調(diào)整的時(shí)候,只需要修改YarServer中的相關(guān)局部,就可以保證教育教學(xué)數(shù)據(jù)OpenAPI不受影響。其中OpenAPI的YarClient實(shí)現(xiàn)代碼如下:

functioncallback〔$retval,$callinfo〕{

var_dump〔$retval〕;//返回?cái)?shù)據(jù)

}

Yar_Concurrent_Client::call〔"http://host/api/","api",array〔"parameters"〕,"callback"〕;

4.2API接口層實(shí)現(xiàn)技術(shù)

API接口層要實(shí)現(xiàn)API訪(fǎng)問(wèn)的路由規(guī)那么,使用的是Phalcon-Micro的MicroCollection類(lèi),通過(guò)實(shí)例化后設(shè)置對(duì)應(yīng)的Controller名稱(chēng),以及添加版本標(biāo)識(shí)為資源前綴,設(shè)置不同的請(qǐng)求辦法響應(yīng)Action等,代碼片段如下:

$api=newMicroCollection〔〕;

$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接口層的數(shù)據(jù)加工處理由MicroCollection實(shí)例綁定的Controller中的Action完成。處理流程:首先獲取請(qǐng)求傳遞的數(shù)據(jù),資源名稱(chēng)中正那么的直接作為Action函數(shù)的參數(shù)使用,其它GET、POST、PUT、DELETE那么從Phalcon的DI容器中REQUEST對(duì)象獲取;然后調(diào)用數(shù)據(jù)訪(fǎng)問(wèn)層封裝的數(shù)據(jù)操作進(jìn)行加工處理,將處理狀態(tài)碼、狀態(tài)描述和返回?cái)?shù)據(jù)封裝為JSON包,代碼如下:privatefunctionsend_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/〕自動(dòng)生成。ApiDoc支持多用編程語(yǔ)言的自動(dòng)化API文檔生成。在API接口層的Action函數(shù)前,用注釋塊的方式,描述該API的名稱(chēng)、分組、版本、權(quán)限要求等,如“@apiNameGetTeacher〞即表示該API的名稱(chēng)為GetTeacher。局部描述關(guān)鍵詞如表1所示。

執(zhí)行ApiDoc的編譯命令后就會(huì)自動(dòng)生成OpenAPI文檔,如:apidoc-imyapp/-oapidoc/-tmytemplate/。文檔效勞將教育教學(xué)數(shù)據(jù)OpenAPI的細(xì)節(jié)展示出來(lái),方便第三方使用。

4.3訪(fǎng)問(wèn)授權(quán)層實(shí)現(xiàn)技術(shù)

本層采用了目前流行的Oauth2授權(quán)認(rèn)證方式,對(duì)API訪(fǎng)問(wèn)進(jìn)行授權(quán)驗(yàn)證。在接入客戶(hù)端時(shí),記錄客戶(hù)端的client_name與redirect_url,生成其client_id、client_secret,分配grant_type類(lèi)型與scope種類(lèi)。訪(fǎng)問(wèn)授權(quán)層的認(rèn)證效勞主要分為生成與驗(yàn)證AccessToken〔ATK〕。為了平安考慮,ATK生命周期較短,使用過(guò)期的ATK訪(fǎng)問(wèn)API無(wú)法通過(guò)驗(yàn)證。需要請(qǐng)求API時(shí),客戶(hù)端檢查存儲(chǔ)在本地cookie中的ATK是否過(guò)期,假設(shè)過(guò)期,可使用RefreshToken〔RTK〕獲取新的ATK,RTK也過(guò)期那么需要重新授權(quán)。

為了實(shí)現(xiàn)訪(fǎng)問(wèn)授權(quán)層的Oauth2Server,本層引用了一個(gè)開(kāi)源的OAuth2Server庫(kù)〔https://github/bshaffer/oauth2-server-php-docs〕。為了降低效勞的開(kāi)銷(xiāo),將Oauth2的認(rèn)證授權(quán)類(lèi)封裝為單例模式。其授權(quán)時(shí)的代碼片段如下:

$oauthServer=newOauthServer〔〕;

$server=$oauthServer->getServerInstance〔〕;

$request=OAuth2\\Request::createFromGlobals〔〕;

$response=newOAuth2\\Response〔〕;

//驗(yàn)證authorize中參數(shù)是否合法

if〔!$server->validateAuthorizeRequest〔$request,$response〕〕{

$response->send〔〕;

die〔〕;

}

……

//驗(yàn)證用戶(hù)身份后授權(quán)

if〔$server->handleAuthorizeRequest〔$request,$resp

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論