一種網(wǎng)絡(luò)應(yīng)用程序接口升級(jí)的方法及系統(tǒng)的制作方法
【專(zhuān)利摘要】本申請(qǐng)?zhí)峁┮环N網(wǎng)絡(luò)應(yīng)用程序接口升級(jí)的方法及系統(tǒng),其中,該方法包括:在升級(jí)啟動(dòng)階段,生成與WebAPI的升級(jí)版本相對(duì)應(yīng)的第二定義信息,其中,第二定義信息被存儲(chǔ)在數(shù)據(jù)庫(kù)中,數(shù)據(jù)庫(kù)中還存儲(chǔ)與WebAPI的初始版本相對(duì)應(yīng)的第一定義信息,在升級(jí)線上測(cè)試階段,更新第二定義信息中的發(fā)布狀態(tài)信息以標(biāo)記WebAPI升級(jí)版本當(dāng)前為線上測(cè)試狀態(tài);在升級(jí)發(fā)布階段,更新第二定義信息中的發(fā)布狀態(tài)信息以標(biāo)記WebAPI升級(jí)版本當(dāng)前為已發(fā)布狀態(tài),如果WebAPI為兼容性升級(jí),則在升級(jí)發(fā)布階段,更新第一定義信息中的發(fā)布狀態(tài)信息以標(biāo)記WebAPI的初始版本為已過(guò)期。采用本申請(qǐng),可同時(shí)支持兼容性升級(jí)和非兼容性升級(jí),并能實(shí)現(xiàn)線上測(cè)試環(huán)境和線上正式環(huán)境下WebAPI的隔離及自動(dòng)切換。
【專(zhuān)利說(shuō)明】一種網(wǎng)絡(luò)應(yīng)用程序接口升級(jí)的方法及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001] 本申請(qǐng)涉及互聯(lián)網(wǎng)領(lǐng)域,尤其涉及一種網(wǎng)絡(luò)應(yīng)用程序接口升級(jí)的方法及系統(tǒng)。
【背景技術(shù)】
[0002] 在開(kāi)放平臺(tái)領(lǐng)域,Web API (網(wǎng)絡(luò)應(yīng)用程序接口)一旦發(fā)布上線后,會(huì)被大量的外部 應(yīng)用調(diào)用,而發(fā)布后的Web API由于新增功能或者修復(fù)缺陷等原因不可避免的需要進(jìn)行升 級(jí),然而,對(duì)于已發(fā)布的Web API進(jìn)行升級(jí),會(huì)帶來(lái)以下三個(gè)問(wèn)題:1)對(duì)于兼容性升級(jí),如何 做到對(duì)外部應(yīng)用的透明性,即,在不強(qiáng)迫外部應(yīng)用改變?cè)蠾eb API調(diào)用方式的前提下,使 兼容性升級(jí)自動(dòng)生效,同時(shí)對(duì)于內(nèi)部網(wǎng)關(guān)來(lái)說(shuō),又可以區(qū)分兼容性升級(jí)前后的Web API,以 便做不同的內(nèi)部處理;2)對(duì)于非兼容性升級(jí),如何做到升級(jí)前和升級(jí)后的Web API的隔離 性,既不影響那些已經(jīng)調(diào)用升級(jí)前的Web API的外部應(yīng)用的正常運(yùn)行,同時(shí),又能由外部應(yīng) 用自行選擇是否調(diào)用升級(jí)后的Web API ;3)如何做到線上測(cè)試環(huán)境和線上正式環(huán)境的Web API隔離以及切換,S卩,在線上測(cè)試環(huán)境中,可以使用線上真實(shí)的請(qǐng)求對(duì)升級(jí)后的Web API 進(jìn)行測(cè)試驗(yàn)證,而在測(cè)試期間,線上正式環(huán)境仍然使用升級(jí)前的Web API,測(cè)試通過(guò)發(fā)布后, 線上正式環(huán)境使用的Web API自動(dòng)切換為升級(jí)后的版本。
[0003] 目前的Web API升級(jí)方法主要有以下三種方案:第一種是升級(jí)后采用新的Web API名稱(chēng);第二種是給Web API加一個(gè)版本屬性,升級(jí)后更新版本號(hào),應(yīng)用調(diào)用時(shí)需要同時(shí) 傳遞Web API名稱(chēng)和版本號(hào)兩個(gè)信息;第三種是升級(jí)后不改變Web API的任何標(biāo)示信息,包 括名稱(chēng)和版本等。
[0004] 現(xiàn)有的技術(shù)方案的第一種和第二種,因?yàn)槊看紊?jí)后都會(huì)更新Web API的標(biāo)示信 息(第一種改變名稱(chēng)信息,第二種改變版本信息),而Web API的標(biāo)示信息恰恰包含在外部 應(yīng)用的請(qǐng)求參數(shù)中,因此,升級(jí)后會(huì)影響已有應(yīng)用對(duì)Web API原有的使用方式。例如,對(duì) 于現(xiàn)有的第一種方案,由于每次Web API升級(jí)后都會(huì)修改名稱(chēng),這會(huì)導(dǎo)致Web API名稱(chēng)泛 濫,并且,有些Web API的名稱(chēng)代表了該Web API特定的功能、作用等,改變名稱(chēng)后,無(wú)法 體現(xiàn)出Web API的內(nèi)在含義。對(duì)于現(xiàn)有的第二種方案,例如,原來(lái)的外部應(yīng)用調(diào)用方式如 T* :https://openapi. xxxxx. com/gateway. do?method=abcd. efgh. hijk&version=l. O&us er_id=2012123456789123, Web API進(jìn)行兼容性升級(jí)后版本號(hào)變?yōu)?. 0,那么對(duì)于已有的 應(yīng)用,如果不能接受這個(gè)缺陷,就必須將原來(lái)的Web API調(diào)用參數(shù)中的版本號(hào)由1.0改為 2. 0,艮P,調(diào)用方式改變?yōu)椋篽ttps://openapi. xxxxx. com/gateway. do?method=abcd. efgh. hijk&version=2. O&us er_id=2012123456789123。而這對(duì)于兼容性升級(jí)來(lái)說(shuō),是不可接受 的,因?yàn)橐坏┰揥eb API已被大量的外部應(yīng)用使用后,再?gòu)?qiáng)迫所有的這些應(yīng)用進(jìn)行改造的代 價(jià)是巨大的。
[0005] 現(xiàn)有方案的第三種,對(duì)于兼容性升級(jí),雖然對(duì)外部應(yīng)用來(lái)說(shuō)是透明的,但由于升 級(jí)前和升級(jí)后的Web API的標(biāo)示信息是完全相同的,對(duì)內(nèi)部的網(wǎng)關(guān)來(lái)說(shuō)升級(jí)前后的Web API是無(wú)法區(qū)分的,網(wǎng)關(guān)無(wú)法針對(duì)升級(jí)前和升級(jí)后的Web API做不同的處理,例如,網(wǎng)關(guān)無(wú) 法將升級(jí)前和升級(jí)后的Web API路由到不同的目標(biāo)系統(tǒng)。另外,兼容性升級(jí)前后的Web API的返回結(jié)果可能會(huì)出現(xiàn)不一樣,譬如升級(jí)后的Web API的返回結(jié)果增加了一個(gè)返回 屬性,外部應(yīng)用的開(kāi)發(fā)者可能就會(huì)感到疑惑,因?yàn)殚_(kāi)發(fā)者從返回結(jié)果中無(wú)從知道Web API 是否進(jìn)行過(guò)兼容性升級(jí),不利于快速排查問(wèn)題;而對(duì)于非兼容性升級(jí),是不可接受的。例 如,某Web API返回的結(jié)果里包含有用戶(hù)的郵箱地址屬性,原來(lái)這個(gè)屬性是一個(gè)字符串類(lèi) 型:{ "email" :"XXX@X. com"},應(yīng)用以字符串的方式使用該屬性。之后,由于用戶(hù)可以 有多個(gè)郵箱地址,因此對(duì)該Web API進(jìn)行非兼容性升級(jí),將郵箱地址屬性改為列表類(lèi)型 { "email": [ "χχχ@χ· com","yyy@x. com"]},那么就會(huì)破壞原來(lái)以字符串方式使用該屬性 的應(yīng)用的運(yùn)行。
[0006] 同時(shí),由于線上測(cè)試環(huán)境和線上正式環(huán)境使用的是同一份數(shù)據(jù),采用上述三種方 法對(duì)Web API進(jìn)行升級(jí)后,會(huì)立即同時(shí)影響線上測(cè)試環(huán)境和線上正式環(huán)境,因此無(wú)法做到線 上測(cè)試環(huán)境和線上正式環(huán)境之間的Web API隔離,一旦升級(jí)后的Web API引發(fā)比較嚴(yán)重的 缺陷,會(huì)給線上正式環(huán)境帶來(lái)很大的影響。
【發(fā)明內(nèi)容】
[0007] 為解決上述問(wèn)題本申請(qǐng)?zhí)峁┮环N網(wǎng)絡(luò)應(yīng)用程序接口 Web API升級(jí)的方法,以實(shí)現(xiàn) 同時(shí)支持兼容性升級(jí)和非兼容性升級(jí),以及升級(jí)過(guò)程中線上測(cè)試環(huán)境和線上正式環(huán)境的隔 離,其中:網(wǎng)絡(luò)應(yīng)用程序接口(Web API)升級(jí)的方法,包括:在對(duì)Web API進(jìn)行升級(jí)的升級(jí)啟 動(dòng)階段,生成與所述Web API的升級(jí)版本相對(duì)應(yīng)的第二定義信息,其中,所述第二定義信息 被存儲(chǔ)在數(shù)據(jù)庫(kù)中,所述數(shù)據(jù)庫(kù)中還存儲(chǔ)與所述Web API的初始版本相對(duì)應(yīng)的第一定義信 息,并且其中,所述第一和第二定義信息分別至少包括:Web API的名稱(chēng)、主版本號(hào)、子版本 號(hào)、發(fā)布狀態(tài)信息以及路由信息;在對(duì)所述Web API的升級(jí)版本進(jìn)行線上測(cè)試的升級(jí)線上 測(cè)試階段,更新所述第二定義信息中的發(fā)布狀態(tài)信息以標(biāo)記所述Web API升級(jí)版本當(dāng)前的 發(fā)布狀態(tài)為線上測(cè)試狀態(tài);在對(duì)所述Web API的升級(jí)版本進(jìn)行發(fā)布的升級(jí)發(fā)布階段,更新 所述第二定義信息中的發(fā)布狀態(tài)信息以標(biāo)記所述Web API升級(jí)版本當(dāng)前的發(fā)布狀態(tài)為已發(fā) 布狀態(tài),并且其中,如果所述Web API的升級(jí)類(lèi)型為兼容性升級(jí),則在所述升級(jí)發(fā)布階段,更 新所述第一定義信息中的發(fā)布狀態(tài)信息以標(biāo)記所述Web API的初始版本為已過(guò)期。
[0008] 根據(jù)本申請(qǐng)的實(shí)施例,在該方法中,如果所述Web API的升級(jí)類(lèi)型為兼容性升級(jí), 則將所述第二定義信息中的主版本號(hào)生成為與所述第一定義信息中相同的主版本號(hào),將所 述第二定義信息中的子版本號(hào)生成為所述第一定義信息中的子版本號(hào)不同的子版本號(hào);如 果所述Web API的升級(jí)類(lèi)型為非兼容性升級(jí),則將所述第二定義信息中的主版本號(hào)生成為 所述第一定義信息中的主版本號(hào)不同的主版本號(hào),將所述第二定義信息中的子版本號(hào)生成 為與所述第一定義信息中相同的子版本號(hào)。
[0009] 根據(jù)本申請(qǐng)的實(shí)施例,在該方法中,當(dāng)接收到對(duì)所述Web API的調(diào)用請(qǐng)求時(shí),如果 所述請(qǐng)求是線上測(cè)試環(huán)境的,在所述數(shù)據(jù)庫(kù)中查找與所述調(diào)用請(qǐng)求中的調(diào)用信息相對(duì)應(yīng)且 發(fā)布狀態(tài)為線上測(cè)試狀態(tài)的所述Web API的定義信息,如果查找不到,則在所述數(shù)據(jù)庫(kù)中查 找與所述調(diào)用請(qǐng)求中的調(diào)用信息相對(duì)應(yīng)且發(fā)布狀態(tài)為已發(fā)布狀態(tài)的所述Web API的定義信 息;如果所述請(qǐng)求是線上正式環(huán)境的,在所述數(shù)據(jù)庫(kù)中查找與所述調(diào)用請(qǐng)求中的調(diào)用信息 相對(duì)應(yīng)且發(fā)布狀態(tài)為已發(fā)布狀態(tài)的所述Web API的定義信息;其中,所述調(diào)用信息至少包 括:所調(diào)用Web API的名稱(chēng)、主版本號(hào)。
[0010] 根據(jù)本申請(qǐng)的實(shí)施例,在該方法中,基于查找到的定義信息確定處理所述調(diào)用請(qǐng) 求的目標(biāo)系統(tǒng),將所述調(diào)用請(qǐng)求向所述目標(biāo)系統(tǒng)轉(zhuǎn)發(fā),以使所述目標(biāo)系統(tǒng)對(duì)所述請(qǐng)求進(jìn)行 處理;接收來(lái)自目標(biāo)系統(tǒng)對(duì)所述請(qǐng)求的處理結(jié)果。
[0011] 本申請(qǐng)的另一方面還提供一種網(wǎng)絡(luò)應(yīng)用程序接口(Web API)升級(jí)的系統(tǒng),包括:信 息生成模塊,用于在對(duì)Web API進(jìn)行升級(jí)的升級(jí)啟動(dòng)階段,生成與升級(jí)后得到所述Web API 的升級(jí)版本相對(duì)應(yīng)的第二定義信息,其中,所述第二定義信息被存儲(chǔ)在數(shù)據(jù)庫(kù)中,所述數(shù)據(jù) 庫(kù)中還存儲(chǔ)與所述Web API的初始版本相對(duì)應(yīng)的第一定義信息,并且其中,所述第一和第 二定義信息分別至少包括:Web API的名稱(chēng)、主版本號(hào)、子版本號(hào)、發(fā)布狀態(tài)信息以及路由信 息;信息更新模塊,用于在對(duì)所述Web API的升級(jí)版本進(jìn)行線上測(cè)試的升級(jí)線上測(cè)試階段, 更新所述第二定義信息中的發(fā)布狀態(tài)信息以標(biāo)記所述Web API升級(jí)版本當(dāng)前的發(fā)布狀態(tài)為 線上測(cè)試狀態(tài);以及用于在對(duì)所述Web API的升級(jí)版本進(jìn)行發(fā)布的升級(jí)發(fā)布階段,更新所 述第二定義信息中的發(fā)布狀態(tài)信息以標(biāo)記所述Web API升級(jí)版本當(dāng)前的發(fā)布狀態(tài)為已發(fā)布 狀態(tài),并且其中,如果所述Web API的升級(jí)類(lèi)型為兼容性升級(jí),所述信息更新模塊還用于在 所述升級(jí)發(fā)布階段,更新所述第一定義信息中的發(fā)布狀態(tài)信息以標(biāo)記所述Web API的初始 版本為已過(guò)期。
[0012] 根據(jù)本申請(qǐng)的實(shí)施例,在該系統(tǒng)中,所述信息生成模塊還用于:當(dāng)所述Web API的 升級(jí)類(lèi)型為兼容性升級(jí)時(shí),將所述第二定義信息中的主版本號(hào)生成為與所述第一定義信息 中相同的主版本號(hào),將所述第二定義信息中的子版本號(hào)生成為所述第一定義信息中的子版 本號(hào)不同的子版本號(hào);當(dāng)所述Web API的升級(jí)類(lèi)型為非兼容性升級(jí)時(shí),將所述第二定義信 息中的主版本號(hào)生成為所述第一定義信息中的主版本號(hào)不同的主版本號(hào),將所述第二定義 信息中的子版本號(hào)生成為與所述第一定義信息中相同的子版本號(hào)。
[0013] 根據(jù)本申請(qǐng)的實(shí)施例,在該系統(tǒng)中,還包括:信息查找模塊,用于當(dāng)接收到對(duì)所述 Web API的調(diào)用請(qǐng)求時(shí),如果所述請(qǐng)求是線上測(cè)試環(huán)境的,在所述數(shù)據(jù)庫(kù)中查找與所述調(diào)用 請(qǐng)求中的調(diào)用信息相對(duì)應(yīng)且發(fā)布狀態(tài)為線上測(cè)試狀態(tài)的所述Web API的定義信息,如果查 找不到,則在所述數(shù)據(jù)庫(kù)中查找與所述調(diào)用請(qǐng)求中的調(diào)用信息相對(duì)應(yīng)且發(fā)布狀態(tài)為已發(fā)布 狀態(tài)的所述Web API的定義信息;如果所述請(qǐng)求是線上正式環(huán)境的,在所述數(shù)據(jù)庫(kù)中查找 與所述調(diào)用請(qǐng)求中的調(diào)用信息相對(duì)應(yīng)且發(fā)布狀態(tài)為已發(fā)布狀態(tài)的所述Web API的定義信 息;其中,所述調(diào)用信息至少包括:所調(diào)用Web API的名稱(chēng)、主版本號(hào)。
[0014] 根據(jù)本申請(qǐng)的實(shí)施例,在該系統(tǒng)中,還包括:確定模塊,用于基于查找到的定義信 息確定目標(biāo)系統(tǒng);轉(zhuǎn)發(fā)模塊,用于將所述調(diào)用請(qǐng)求向所述目標(biāo)系統(tǒng)轉(zhuǎn)發(fā),以使所述目標(biāo)系統(tǒng) 對(duì)所述請(qǐng)求進(jìn)行處理;接收模塊,用于接收來(lái)自目標(biāo)系統(tǒng)對(duì)所述請(qǐng)求的處理結(jié)果。
[0015] 與現(xiàn)有技術(shù)相比,根據(jù)本申請(qǐng)的技術(shù)方案,在兼容性升級(jí)時(shí),外部應(yīng)用在調(diào)用已升 級(jí)的Web API時(shí),不需要修改已有的調(diào)用方式,就能獲得Web API升級(jí)后的結(jié)果;同時(shí),在 處理外部應(yīng)用對(duì)所述Web API的調(diào)用請(qǐng)求時(shí),對(duì)于升級(jí)前和升級(jí)后的Web API是可區(qū)分的。 對(duì)于非兼容性升級(jí),外部應(yīng)用只需要在請(qǐng)求參數(shù)里指明Web API升級(jí)后的主版本號(hào),就能獲 得該Web API升級(jí)后的結(jié)果,不會(huì)影響那些已經(jīng)調(diào)用該Web API升級(jí)前版本的外部應(yīng)用的 運(yùn)行。另外,根據(jù)本申請(qǐng)的技術(shù)方案,可以實(shí)現(xiàn)線上測(cè)試環(huán)境和線上正式環(huán)境下Web API的 隔離,并且,當(dāng)線上測(cè)試環(huán)境驗(yàn)證通過(guò)后,線上正式環(huán)境使用的Web API能夠自動(dòng)切換為升 級(jí)后的Web API的升級(jí)版本。
【專(zhuān)利附圖】
【附圖說(shuō)明】
[0016] 此處所說(shuō)明的附圖用來(lái)提供對(duì)本申請(qǐng)的進(jìn)一步理解,構(gòu)成本申請(qǐng)的一部分,本申 請(qǐng)的示意性實(shí)施例及其說(shuō)明用于解釋本申請(qǐng),并不構(gòu)成對(duì)本申請(qǐng)的不當(dāng)限定。在附圖中:
[0017] 圖1是本申請(qǐng)實(shí)施例涉及的網(wǎng)絡(luò)應(yīng)用程序接口(Web API)升級(jí)的方法流程圖;
[0018] 圖2是本申請(qǐng)實(shí)施例的對(duì)Web API進(jìn)行兼容性升級(jí)時(shí)第一定義信息和第二定義信 息在升級(jí)的各個(gè)階段的更新情況示意圖;
[0019] 圖3是本申請(qǐng)實(shí)施例的對(duì)Web API進(jìn)行非兼容性升級(jí)時(shí)第一定義信息和第二定義 信息在升級(jí)的各個(gè)階段的更新情況示意圖;
[0020] 圖4是本申請(qǐng)實(shí)施例的對(duì)Web API進(jìn)行升級(jí)過(guò)程中接收到對(duì)所述Web API的調(diào)用 請(qǐng)求時(shí)對(duì)所述請(qǐng)求進(jìn)行處理的流程圖;
[0021] 圖5是本申請(qǐng)實(shí)施例的對(duì)外部應(yīng)用的調(diào)用請(qǐng)求進(jìn)行處理的一個(gè)實(shí)例的處理流程 的不意圖;以及
[0022] 圖6是本申請(qǐng)實(shí)施例涉及的一種網(wǎng)絡(luò)應(yīng)用程序接口升級(jí)的系統(tǒng)的框圖。
【具體實(shí)施方式】
[0023] 為使本申請(qǐng)的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,以下結(jié)合附圖及具體實(shí)施例,對(duì)本 申請(qǐng)作進(jìn)一步地詳細(xì)說(shuō)明。
[0024] 根據(jù)本申請(qǐng)的實(shí)施例,提供了一種網(wǎng)絡(luò)應(yīng)用程序接口升級(jí)的方法及系統(tǒng)。
[0025] 參考圖1,圖1是本申請(qǐng)實(shí)施例涉及的網(wǎng)絡(luò)應(yīng)用程序接口升級(jí)的方法的流程圖。如 圖1所示,當(dāng)進(jìn)行網(wǎng)絡(luò)應(yīng)用程序接口(Web API)的升級(jí)時(shí),在步驟S101中,在對(duì)所述Web API 進(jìn)行升級(jí)的升級(jí)啟動(dòng)階段,生成與所述Web API的升級(jí)版本相對(duì)應(yīng)的第二定義信息,其中, 所述第二定義信息被存儲(chǔ)在數(shù)據(jù)庫(kù)中;所述數(shù)據(jù)庫(kù)中還存儲(chǔ)有與Web API的初始版本相對(duì) 應(yīng)的第一定義信息。所述第一、第二定義信息分別至少可以包括:所述Web API的名稱(chēng)、主 版本號(hào)、子版本號(hào)、發(fā)布狀態(tài)信息以及路由信息等,即所述第一定義信息中,記錄所述Web API的初始版本的主版本號(hào)、子版本號(hào)、發(fā)布狀態(tài)信息以及路由信息等,例如,將某Web API 的第一定義信息記錄成:"名稱(chēng):X,主版本號(hào):1. 〇,子版本號(hào)〇. 1,發(fā)布狀態(tài):已發(fā)布……"。 其中,發(fā)布狀態(tài)信息可以表示所述Web API初始版本或升級(jí)版本當(dāng)前的發(fā)布狀態(tài),例如,某 Web API初始版本已經(jīng)正式發(fā)布,當(dāng)前正在使用,則可以將該Web API的第一定義信息中的 發(fā)布狀態(tài)信息記為"已發(fā)布"。例如,某Web API升級(jí)版本當(dāng)前處在升級(jí)啟動(dòng)階段,可以將所 述Web API第二定義信息中的所述Web API升級(jí)版本的發(fā)布狀態(tài)信息記為"初始化",當(dāng)所 述Web API的升級(jí)進(jìn)行到線上測(cè)試階段,可以將所述Web API的發(fā)布狀態(tài)記為"線上測(cè)試", 對(duì)所述發(fā)布狀態(tài)信息的記錄方式,本申請(qǐng)不做限定,例如,還可以以數(shù)字、字母、符號(hào)等字符 來(lái)標(biāo)記。所述Web API的名稱(chēng)在升級(jí)前后保持不變,所述Web API的主版本號(hào)和子版本號(hào) 可以根據(jù)所述Web API的升級(jí)類(lèi)型來(lái)確定。
[0026] 其中,如果所述Web API的升級(jí)類(lèi)型為兼容性升級(jí),則將所述第二定義信息中的主 版本號(hào)生成為與所述第一定義信息中相同的主版本號(hào),將所述第二定義信息中的子版本號(hào) 生成為所述第一定義信息中的子版本號(hào)不同的子版本號(hào)。
[0027] 例如:當(dāng)某個(gè)Web API進(jìn)行兼容性升級(jí)時(shí),將待升級(jí)的Web API的初始版本相對(duì)應(yīng) 的第一定義信息中主版本號(hào)記為1. 0、子版本號(hào)記為0. 1,將所述Web API升級(jí)得到的所述 Web API的升級(jí)版本,則將所述Web API的第二定義信息中的主版本號(hào)仍然記為1.0,而子 版本號(hào)記為與第一定義信息中不同的子版本號(hào),例如,可以在原來(lái)的子版本號(hào)〇. 1的基礎(chǔ) 上累加0. 1,記為0. 2。
[0028] 當(dāng)對(duì)所述Web API進(jìn)行調(diào)用時(shí),例如,外部應(yīng)用對(duì)所述Web API的調(diào)用,由于在Web API的定義信息中主版本號(hào)信息,還包括子版本號(hào)信息,而外部應(yīng)用在進(jìn)行Web API的調(diào)用 時(shí),一般都會(huì)引用Web API的版本號(hào)信息,S卩,主版本號(hào)信息,而在兼容性升級(jí)中,升級(jí)后的 Web API,主版本號(hào)是不變的,而子版本號(hào)升級(jí)后記錄為與原來(lái)不同的子版本號(hào),因此,夕卜部 應(yīng)用在調(diào)用兼容性升級(jí)的Web API時(shí),不需要改變調(diào)用參數(shù)(方式),就可以調(diào)用到升級(jí)之后 的Web API升級(jí)版本,而內(nèi)部網(wǎng)關(guān)接收到外部應(yīng)用的調(diào)用請(qǐng)求時(shí),則可以由Web API的定義 信息中的子版本號(hào)來(lái)區(qū)分對(duì)所述Web API升級(jí)前后的Web API初始版本和升級(jí)版本。
[0029] 而如果所述Web API的升級(jí)類(lèi)型為非兼容性升級(jí),則將所述第二定義信息中的主 版本號(hào)生成為所述第一定義信息中的主版本號(hào)不同的主版本號(hào),將所述第二定義信息中的 子版本號(hào)生成為與所述第一定義信息中相同的子版本號(hào)。
[0030] 例如,當(dāng)某個(gè)Web API進(jìn)行非兼容性升級(jí)時(shí),將待升級(jí)的Web API的初始版本相對(duì) 應(yīng)的第一定義信息中主版本號(hào)記為1. 〇,子版本號(hào)記為〇. 1,將所述進(jìn)行Web API升級(jí)得到 所述Web API的升級(jí)版本,則將所述Web API的第二定義信息中的主版本號(hào)記為與第一定 義信息中不同,例如,可以在原來(lái)的主版本號(hào)1. 〇的基礎(chǔ)上累加1記為2. 0,而子版本號(hào)不需 改變,可以記為與第一定義信息中相同的子版本號(hào)〇. 1。
[0031] 由于外部應(yīng)用在進(jìn)行Web API的調(diào)用時(shí),一般引用的是Web API的主版本號(hào)信息, 而在非兼容性升級(jí)時(shí),所述Web API的第二定義信息中記錄的所述Web API的升級(jí)版本的 主版本號(hào)與所述Web API的第一定義信息中記錄的所述Web API的初始版本的主版本號(hào)是 不同的,因此,外部應(yīng)用在調(diào)用該升級(jí)的Web API時(shí),如果還以原來(lái)的調(diào)用參數(shù)調(diào)用該Web API時(shí),則得到的還是所述Web API的初始版本,如果用戶(hù)想要使用升級(jí)后Web API,即,所 述Web API的升級(jí)版本,則需要將調(diào)用請(qǐng)求中引用的主版本號(hào)改為所述Web API升級(jí)版本 的主版本號(hào),這樣可以使用戶(hù)對(duì)是否使用升級(jí)后的Web API進(jìn)行選擇。
[0032] 在步驟S102中,在對(duì)所述Web API的升級(jí)版本進(jìn)行線上測(cè)試的升級(jí)線上測(cè)試階 段,更新所述第二定義信息中的發(fā)布狀態(tài)信息以標(biāo)記所述Web API升級(jí)版本當(dāng)前的發(fā)布 狀態(tài)為線上測(cè)試狀態(tài)。例如,原來(lái)的第二定義信息為"名稱(chēng):X、主版本號(hào):1. 〇、子版本號(hào): 〇. 2、發(fā)布狀態(tài):初始化、……",進(jìn)入線上測(cè)試階段后則可以將發(fā)布狀態(tài)信息更新為"線上 測(cè)試",即,第二定義信息更新為"名稱(chēng):X、主版本號(hào):1. 0、子版本號(hào):〇. 2、發(fā)布狀態(tài):線上測(cè) 試、……"此階段,由于Web API的升級(jí)版本沒(méi)有正式發(fā)布,因此,Web API的初始版本仍然 在線上正式環(huán)境中使用,即沒(méi)有過(guò)期,第一定義信息中的發(fā)布狀態(tài)信息不變,例如,原來(lái)記 錄的第一定義信息為"名稱(chēng):X、主版本號(hào):1. 〇、子版本號(hào):〇. 1、發(fā)布狀態(tài):已發(fā)布、……"而 該Web API的升級(jí)版本沒(méi)有正式發(fā)布,則在線上正式環(huán)境下使用的仍然是該Web API的初 始版本,則第一定義信息中的發(fā)布狀態(tài)信息仍然為"已發(fā)布"。
[0033] 在步驟S103中,在對(duì)所述Web API的升級(jí)版本進(jìn)行發(fā)布的升級(jí)發(fā)布階段,更新所 述第二定義信息中的發(fā)布狀態(tài)信息以標(biāo)記所述Web API升級(jí)版本當(dāng)前的發(fā)布狀態(tài)為已發(fā)布 狀態(tài)。例如,在上一階段,第二定義信息為"名稱(chēng):X、主版本號(hào):1. 〇、子版本號(hào):〇. 2、發(fā)布狀 態(tài):線上測(cè)試、……"進(jìn)入了發(fā)布階段則可以將發(fā)布狀態(tài)信息更新為"已發(fā)布"即,第二定義 信息更新為"名稱(chēng):x、主版本號(hào):1. 0、子版本號(hào):〇. 2、發(fā)布狀態(tài):已發(fā)布、……"。在兼容性 升級(jí)時(shí),在升級(jí)發(fā)布階段,由于Web API的升級(jí)版本已經(jīng)正式發(fā)布,因此,Web API的初始版 本已經(jīng)過(guò)期,第一定義信息中的發(fā)布狀態(tài)信息需要更新,以標(biāo)記所述Web API的初始版本的 已過(guò)期。例如,原來(lái)記錄的第一定義信息為"名稱(chēng):X、主版本號(hào):1. 0、子版本號(hào):〇. 1、發(fā)布狀 態(tài):已發(fā)布、……"而該Web API的升級(jí)版本正式發(fā)布時(shí),則第一定義信息中的發(fā)布狀態(tài)信 息更新為"已過(guò)期"。
[0034] 下面結(jié)合圖2、圖3分別對(duì)兼容性升級(jí)和非兼容性升級(jí)的升級(jí)過(guò)程中第一定義信 息和第二定義信息在升級(jí)的各個(gè)階段的更新情況進(jìn)行詳細(xì)說(shuō)明。
[0035] 圖2為進(jìn)行兼容性升級(jí)時(shí),第一定義信息和第二定義信息在升級(jí)的各個(gè)階段的更 新情況示意圖,如圖2所示:
[0036] 首先,記錄Web API的初始版本(未升級(jí)過(guò))的第一定義信息(R1),可以將主版本 號(hào)和子版本號(hào)分別記錄為1.0和〇. 1,發(fā)布狀態(tài)可以記錄為:已發(fā)布。
[0037] Web API從升級(jí)到發(fā)布上線歷經(jīng)三個(gè)過(guò)程:升級(jí)啟動(dòng)、線上測(cè)試和發(fā)布。兼容性升 級(jí)的升級(jí)流程中Web API定義信息的變化分別如下:
[0038] 在對(duì)Web API進(jìn)行升級(jí)的升級(jí)啟動(dòng)階段,針對(duì)Web API的升級(jí)版本,記錄相應(yīng)的第 二定義信息(R2),與第一定義信息R1相比,第二定義信息R2中的主版本號(hào)保持不變,仍為 1. 〇,子版本累加〇. 1,更新為〇. 2,狀態(tài)可以記錄為"初始化",而第一定義信息R1的任何信 息均保持不變。
[0039] 在對(duì)Web API的升級(jí)版本進(jìn)行線上測(cè)試的升級(jí)線上測(cè)試階段,該Web API的升級(jí) 版本沒(méi)有正式發(fā)布,初始版本還在線上正式環(huán)境中使用,因此,第一定義信息R1中的信息 均保持不變,狀態(tài)信息仍然記為與升級(jí)啟動(dòng)階段相同的"已發(fā)布"狀態(tài)。而Web API的升級(jí) 版本的發(fā)布狀態(tài)變?yōu)榫€上測(cè)試狀態(tài),因此,可以將第二定義信息R2中的發(fā)布狀態(tài)信息由原 來(lái)的"初始化"更新為現(xiàn)階段的狀態(tài),例如,可以記為"線上測(cè)試"。
[0040] 對(duì)所述Web API的升級(jí)版本進(jìn)行發(fā)布的升級(jí)發(fā)布階段,該Web API的升級(jí)版本已 經(jīng)正式發(fā)布,因此,將R2中的發(fā)布狀態(tài)信息由"線上測(cè)試"更新為"已發(fā)布",那么,Web API 的初始版本已經(jīng)過(guò)期,因此將R1中的發(fā)布狀態(tài)信息由"已發(fā)布"更新為"已過(guò)期"。
[0041] 圖3為進(jìn)行非兼容性升級(jí)時(shí),第一定義信息和第二定義信息在升級(jí)的各個(gè)階段的 更新情況的示意圖,如圖3所示:
[0042] 首先,針對(duì)Web API的初始版本(未升級(jí)過(guò))記錄第一定義信息(R1),可以將主版 本號(hào)和子版本號(hào)分別記錄為1.0和〇. 1,發(fā)布狀態(tài)可以記錄為:已發(fā)布。
[0043] Web API從升級(jí)到發(fā)布上線歷經(jīng)三個(gè)過(guò)程:升級(jí)啟動(dòng)、線上測(cè)試和發(fā)布。非兼容性 升級(jí)的升級(jí)流程中Web API定義信息的變化分別如下:
[0044] 在對(duì)Web API進(jìn)行升級(jí)的升級(jí)啟動(dòng)階段,針對(duì)Web API的升級(jí)版本,記錄相應(yīng)的第 二定義信息(R2),與第一定義信息R1相比,第二定義信息R2中的主版本號(hào)可以累加1,記 為2. 0,子版本號(hào)不變,仍然記為0. 1,發(fā)布狀態(tài)可以記錄為"初始化"。而對(duì)于第一定義信 息,在非兼容性升級(jí)中,整個(gè)升級(jí)的過(guò)程中第一定義信息R1的任何信息均保持不變。
[0045] 在對(duì)Web API的升級(jí)版本進(jìn)行線上測(cè)試的升級(jí)線上測(cè)試階段,R1中狀態(tài)信息仍然 記為"已發(fā)布"狀態(tài)。此階段Web API的升級(jí)版本的發(fā)布狀態(tài)變?yōu)榫€上測(cè)試狀態(tài),因此,可 以將第二定義信息R2中的發(fā)布狀態(tài)信息由原來(lái)的"初始化"更新為現(xiàn)階段的狀態(tài),可以記 為"線上測(cè)試"。
[0046] 對(duì)所述Web API的升級(jí)版本進(jìn)行發(fā)布的升級(jí)發(fā)布階段,R1中狀態(tài)信息仍然記為 "已發(fā)布"狀態(tài),所述Web API的升級(jí)版本已經(jīng)正式發(fā)布,因此,將R2中的發(fā)布狀態(tài)信息由 "線上測(cè)試"更新為"已發(fā)布"。
[0047] 在對(duì)Web API進(jìn)行升級(jí)的過(guò)程中,如果接收到對(duì)所述Web API的調(diào)用請(qǐng)求,可以根 據(jù)調(diào)用請(qǐng)求中的調(diào)用信息(Web API名稱(chēng)和主版本號(hào))以及調(diào)用請(qǐng)求的環(huán)境(例如,線上測(cè)試 環(huán)境或線上正式環(huán)境)在數(shù)據(jù)庫(kù)中查找相應(yīng)的所述Web API的定義信息,并基于查找到的定 義信息確定目標(biāo)系統(tǒng),并將所述調(diào)用請(qǐng)求向所述目標(biāo)系統(tǒng)轉(zhuǎn)發(fā),以使所述目標(biāo)系統(tǒng)對(duì)所述 請(qǐng)求進(jìn)行處理。可如圖4所示,圖4為在對(duì)Web API進(jìn)行升級(jí)過(guò)程中接收到對(duì)所述Web API 的調(diào)用請(qǐng)求時(shí)對(duì)所述調(diào)用請(qǐng)求進(jìn)行處理的流程圖,如圖4所示,
[0048] 在步驟S401中,接收對(duì)所述Web API的調(diào)用請(qǐng)求,基于所述調(diào)用請(qǐng)求查找相應(yīng)的 所述Web API的定義信息。
[0049] 查找規(guī)則為:如果所述請(qǐng)求是線上測(cè)試環(huán)境的,在所述數(shù)據(jù)庫(kù)中查找與所述調(diào)用 請(qǐng)求中的調(diào)用信息相對(duì)應(yīng)且發(fā)布狀態(tài)為線上測(cè)試狀態(tài)的所述Web API的定義信息,如果查 找不到,則在所述數(shù)據(jù)庫(kù)中查找與所述調(diào)用請(qǐng)求中的調(diào)用信息相對(duì)應(yīng)且發(fā)布狀態(tài)為已發(fā)布 狀態(tài)的所述Web API的定義信息;如果所述請(qǐng)求是線上正式環(huán)境的,在所述數(shù)據(jù)庫(kù)中查找 與所述調(diào)用請(qǐng)求中的調(diào)用信息相對(duì)應(yīng)且發(fā)布狀態(tài)為已發(fā)布狀態(tài)的所述Web API的定義信 肩、。
[0050] 在兼容性升級(jí)的升級(jí)線上測(cè)試階段,所述第一定義信息中Web API的初始版本的 發(fā)布狀態(tài)為"已發(fā)布",所述第二定義信息中Web API的升級(jí)版本的發(fā)布狀態(tài)為"線上測(cè)試", 當(dāng)外部應(yīng)用以不變的調(diào)用參數(shù)(調(diào)用Web API的初始版本時(shí)的調(diào)用參數(shù),例如,調(diào)用名稱(chēng)為 aaa.bbb.ccc,主版本號(hào)1.0的Web API),發(fā)起調(diào)用所述Web API的請(qǐng)求,如果所述調(diào)用請(qǐng)求 是在線上測(cè)試環(huán)境中處理的,則需要查找到發(fā)布狀態(tài)為"線上測(cè)試"的定義信息,也就是查 找處于線上測(cè)試狀態(tài)的第二定義信息。而如果查找不到線上測(cè)試狀態(tài)的定義信息,則查找 發(fā)布狀態(tài)為"已發(fā)布"的定義信息,也就是查找發(fā)布狀態(tài)為"已發(fā)布"狀態(tài)的Web API初始 版本的第一定義信息。
[0051] 而如果所述請(qǐng)求是在線上正式環(huán)境中處理的,在所述數(shù)據(jù)庫(kù)中查找發(fā)布狀態(tài)為已 發(fā)布狀態(tài)的所述Web API的定義信息。由于調(diào)用請(qǐng)求是在線上正式環(huán)境中發(fā)起的,就需要 查找發(fā)布狀態(tài)為"已發(fā)布"狀態(tài)的所述Web API的定義信息,由于此時(shí)處于升級(jí)線上測(cè)試階 段,Web API的升級(jí)版本還未正式發(fā)布,因此,可以查找發(fā)布狀態(tài)為已發(fā)布狀態(tài)的第一定義 信息,即Web API的初始版本的定義信息,這樣就實(shí)現(xiàn)了線上測(cè)試環(huán)境和線上正式環(huán)境的隔 離。
[0052] 而在兼容性升級(jí)的升級(jí)發(fā)布階段,Web API的第二定義信息中的發(fā)布狀態(tài)被更新 為"已發(fā)布",第一定義信息的狀態(tài)被更新為"已過(guò)期",當(dāng)接收到調(diào)用所述Web API的請(qǐng)求 時(shí),如果所述請(qǐng)求是在線上正式環(huán)境中處理的,就需要查找發(fā)布狀態(tài)為"已發(fā)布"的定義信 息,由于Web API的升級(jí)版本已發(fā)布,而所述Web API的初始版本已過(guò)期,因此可以查找到 發(fā)布狀態(tài)為已發(fā)布的第二定義信息。這樣,線上正式環(huán)境采用的Web API在發(fā)布后就自動(dòng) 從初始版本切換為升級(jí)版本,實(shí)現(xiàn)了兼容性升級(jí)對(duì)外部應(yīng)用的透明性,外部應(yīng)用不需要對(duì) 調(diào)用請(qǐng)求做任何變更,就能得到兼容性升級(jí)后的Web API的處理結(jié)果??蛇x地,同時(shí)還可以 將主版本號(hào)和子版本號(hào)包含在返回的結(jié)果里,可以使外部應(yīng)用知道每次的返回結(jié)果是由哪 個(gè)具體版本的Web API處理的,當(dāng)對(duì)返回結(jié)果有疑惑時(shí),便于快速排查問(wèn)題。
[0053] 由上所述,在兼容性升級(jí)中,由于Web API在升級(jí)前后的主版本號(hào)沒(méi)有改變,因此, 在外部應(yīng)用調(diào)用所述Web API時(shí),不需要改變調(diào)用方式就可以得到升級(jí)之后的Web API的 處理結(jié)果,而當(dāng)處理所述調(diào)用請(qǐng)求時(shí),(例如,網(wǎng)關(guān)處理外部應(yīng)用對(duì)所述Web API的調(diào)用請(qǐng) 求)又能區(qū)分升級(jí)前和升級(jí)后的Web API版本,并將各自路由到不同的目標(biāo)系統(tǒng)。同時(shí),根 據(jù)Web API的發(fā)布狀態(tài)有效的將線上測(cè)試環(huán)境和線上正式環(huán)境進(jìn)行了隔離。
[0054] 在非兼容性升級(jí)的升級(jí)線上測(cè)試階段,所述Web API第一定義信息中發(fā)布狀態(tài)為 "已發(fā)布"狀態(tài),第二定義信息中的發(fā)布狀態(tài)為"線上測(cè)試"狀態(tài)。如果所述調(diào)用請(qǐng)求是在線 上測(cè)試環(huán)境中處理的,需要查找發(fā)布狀態(tài)為線上測(cè)試狀態(tài)的定義信息,如果查找不到發(fā)布 狀態(tài)為線上測(cè)試狀態(tài)的定義信息,則查找發(fā)布狀態(tài)為已發(fā)布狀態(tài)的定義信息。當(dāng)接收到外 部應(yīng)用對(duì)所述Web API的調(diào)用請(qǐng)求時(shí),如果外部應(yīng)用仍然以之前調(diào)用所述Web API的初始 版本的方式發(fā)起調(diào)用請(qǐng)求(例如,調(diào)用名稱(chēng)為abc. defg. hi j,主版本號(hào)1. 0的Web API ),則 根據(jù)請(qǐng)求中的調(diào)用信息(所述調(diào)用信息至少包括:所調(diào)用的Web API的名稱(chēng)、主版本號(hào)),要 查找名稱(chēng)為abc. defg. hi j,主版本號(hào)1. 0的定義信息。而當(dāng)外部請(qǐng)求想要調(diào)用升級(jí)之后的 Web API的升級(jí)版本時(shí),由于非兼容性升級(jí)中,Web API升級(jí)前后的初始版本和升級(jí)版本的 主版本號(hào)不同,因此,則在調(diào)用升級(jí)之后的Web API升級(jí)版本時(shí),需要改變調(diào)用參數(shù)中的主 版本號(hào),例如,原來(lái)的主版本號(hào)為1. 〇,升級(jí)后主版本號(hào)為2. 0,則外部應(yīng)用如果想要調(diào)用升 級(jí)之后的Web API升級(jí)版本,在調(diào)用之時(shí),需要改變調(diào)用請(qǐng)求中的主版本號(hào)為2.0,而在接 收到外部應(yīng)用的調(diào)用請(qǐng)求時(shí),根據(jù)請(qǐng)求中的調(diào)用信息,查找名稱(chēng)為abc. defg. hij,主版本號(hào) 2.0的定義信息。
[0055] 而如果所述請(qǐng)求是在線上正式環(huán)境中處理的,在所述數(shù)據(jù)庫(kù)中查找與所述調(diào)用請(qǐng) 求中的調(diào)用信息相對(duì)應(yīng)的、發(fā)布狀態(tài)為已發(fā)布狀態(tài)的所述Web API的定義信息。例如,當(dāng)接 收到外部應(yīng)用對(duì)所述Web API的調(diào)用請(qǐng)求時(shí),如果外部應(yīng)用仍然以之前調(diào)用所述Web API 的初始版本的方式發(fā)起調(diào)用請(qǐng)求時(shí),例如,調(diào)用名稱(chēng)為abc. defg. hij,主版本號(hào)1. 0的Web API,則根據(jù)請(qǐng)求中的調(diào)用信息(所述調(diào)用信息至少包括:所調(diào)用的Web API的名稱(chēng)、主版本 號(hào)),要查找名稱(chēng)為abc. defg. hi j,主版本號(hào)1. 0的定義信息。而如果外部應(yīng)用的調(diào)用請(qǐng)求 想要調(diào)用升級(jí)之后的Web API的升級(jí)版本,由于非兼容性升級(jí)中,Web API升級(jí)前后的初始 版本和升級(jí)版本的主版本號(hào)不同,因此需要改變調(diào)用參數(shù)中的主版本號(hào),例如,原來(lái)的主版 本號(hào)為1. 〇,升級(jí)后主版本號(hào)為2. 0,則外部應(yīng)用在調(diào)用升級(jí)版本時(shí),需要改變調(diào)用請(qǐng)求中 的主版本號(hào)為2.0,而在接收到外部應(yīng)用的調(diào)用請(qǐng)求時(shí),根據(jù)請(qǐng)求中的調(diào)用信息,查找名稱(chēng) 為abc. defg. hi j,主版本號(hào)2. 0,處于已發(fā)布狀態(tài)的定義信息,由于此時(shí)數(shù)據(jù)庫(kù)中主版本號(hào) 為2. 0的定義信息的發(fā)布狀態(tài)還為線上測(cè)試狀態(tài),因此會(huì)查找不到主版本號(hào)為2. 0,處于已 發(fā)布狀態(tài)的定義信息,這時(shí),就會(huì)導(dǎo)致線上正式環(huán)境中的調(diào)用失敗,這樣就實(shí)現(xiàn)了線上測(cè)試 環(huán)境和線上正式環(huán)境的隔離。
[0056] 在非兼容性升級(jí)的升級(jí)發(fā)布階段,當(dāng)接收到外部應(yīng)用對(duì)所述Web API的調(diào)用請(qǐng)求 時(shí),由于Web API升級(jí)前后的初始版本和升級(jí)版本的主版本號(hào)不同,例如原來(lái)的版本(所述 Web API的初始版本)號(hào)為1.0,非兼容性升級(jí)之后的版本(所述Web API的升級(jí)版本)號(hào)為 2. 0,如果外部應(yīng)用仍然以之前調(diào)用所述Web API的初始版本的方式發(fā)起調(diào)用請(qǐng)求時(shí),例如, 調(diào)用名稱(chēng)為abc. defg. hi j,主版本號(hào)1. 0的Web API,則要根據(jù)請(qǐng)求中的調(diào)用信息,查找名 稱(chēng)為abc. defg. hi j,主版本號(hào)1. 0,處于已發(fā)布狀態(tài)的定義信息;而如果外部請(qǐng)求想要調(diào)用 升級(jí)之后的Web API的升級(jí)版本,則外部應(yīng)用需要改變調(diào)用參數(shù)中的主版本號(hào),例如,原來(lái) 的主版本號(hào)為1. 0,升級(jí)后主版本號(hào)為2. 0,則外部應(yīng)用在調(diào)用升級(jí)版本時(shí),需要改變調(diào)用 請(qǐng)求中的主版本號(hào)為2.0,而在接收到外部應(yīng)用的調(diào)用請(qǐng)求時(shí),根據(jù)請(qǐng)求中的調(diào)用信息,查 找名稱(chēng)為abc. defg. hi j,主版本號(hào)2. 0,處于已發(fā)布狀態(tài)的定義信息。
[0057] 由上所述,在非兼容性升級(jí)中,由于Web API升級(jí)前后的主版本號(hào)不同,因此在調(diào) 用所述Web API時(shí),外部應(yīng)用可以自行選擇調(diào)用升級(jí)之前的Web API初始版本還是調(diào)用升 級(jí)之后的所述Web API的升級(jí)版本,這樣在進(jìn)行Web API的非兼容性升級(jí)的同時(shí),又不影響 已有應(yīng)用的運(yùn)行。同時(shí),根據(jù)Web API的發(fā)布狀態(tài)有效的將線上測(cè)試環(huán)境和線上正式環(huán)境 進(jìn)行了隔離。
[0058] 在步驟S402中,基于查找到的定義信息確定目標(biāo)系統(tǒng)。
[0059] 在步驟S403中,將所述調(diào)用請(qǐng)求向所述目標(biāo)系統(tǒng)轉(zhuǎn)發(fā),以使所述目標(biāo)系統(tǒng)對(duì)所述 請(qǐng)求進(jìn)行處理。
[0060] 在步驟S404中,接收來(lái)自目標(biāo)系統(tǒng)對(duì)所述請(qǐng)求的處理結(jié)果。
[0061] 例如,當(dāng)網(wǎng)關(guān)接收到外部應(yīng)用的調(diào)用請(qǐng)求時(shí),對(duì)所述請(qǐng)求進(jìn)行處理,可參考圖5,是 對(duì)外部應(yīng)用的調(diào)用請(qǐng)求進(jìn)行處理的處理流程的示意圖;如圖5所示:
[0062] 外部應(yīng)用50訪問(wèn)網(wǎng)關(guān)10,對(duì)名稱(chēng)為N且主版本=V的Web API發(fā)起調(diào)用請(qǐng)求。
[0063] 步驟S1,網(wǎng)關(guān)10接收到外部應(yīng)用50的調(diào)用請(qǐng)求后,如果所述調(diào)用請(qǐng)求是基于線上 線上測(cè)試環(huán)境的調(diào)用請(qǐng)求,則從數(shù)據(jù)庫(kù)中查找名稱(chēng)為N、主版本號(hào)為V且發(fā)布狀態(tài)為"線上 測(cè)試"的Web API定義信息,如果不存在,則再查詢(xún)狀態(tài)為已發(fā)布的Web API定義信息。如 果所述調(diào)用請(qǐng)求是基于線上正式環(huán)境的,則從數(shù)據(jù)庫(kù)中查詢(xún)名稱(chēng)為N、主版本=V且發(fā)布狀 態(tài)為已發(fā)布的Web API定義信息。
[0064] 步驟S2,網(wǎng)關(guān)10根據(jù)查找到的Web API定義信息中的路由信息,確定對(duì)應(yīng)的目標(biāo) 前置系統(tǒng)30,其中,目標(biāo)前置系統(tǒng)是一組業(yè)務(wù)相似的目標(biāo)系統(tǒng)的前置系統(tǒng),它為這組目標(biāo)系 統(tǒng)提供一個(gè)統(tǒng)一的外部調(diào)用接口給網(wǎng)關(guān)。
[0065] 步驟S3,網(wǎng)關(guān)將所述調(diào)用請(qǐng)求向目標(biāo)前置系統(tǒng)20轉(zhuǎn)發(fā)。
[0066] 步驟S4,目標(biāo)前置系統(tǒng)20根據(jù)Web API定義信息中的名稱(chēng)、主版本號(hào)、子版本號(hào)確 定處理本次請(qǐng)求的目標(biāo)系統(tǒng)30,其中,目標(biāo)系統(tǒng)是最終處理請(qǐng)求的業(yè)務(wù)系統(tǒng)。
[0067] 步驟S5,目標(biāo)前置系統(tǒng)20將請(qǐng)求轉(zhuǎn)發(fā)給目標(biāo)系統(tǒng)30。
[0068] 步驟S6,目標(biāo)系統(tǒng)30處理請(qǐng)求。
[0069] 步驟S7,目標(biāo)系統(tǒng)30將處理結(jié)果返回給目標(biāo)前置系統(tǒng)20
[0070] 步驟S8,目標(biāo)前置系統(tǒng)20將結(jié)果返回給網(wǎng)關(guān)10。
[0071] 步驟S9,網(wǎng)關(guān)10將結(jié)果返回給外部應(yīng)用50。
[0072] 參考圖6,為本申請(qǐng)涉及的一種網(wǎng)絡(luò)應(yīng)用程序接口升級(jí)的系統(tǒng)的框圖,如圖6所 示,該網(wǎng)絡(luò)應(yīng)用程序接口升級(jí)的系統(tǒng)600包括:信息生成模塊601以及信息更新模塊602。
[0073] 信息生成模塊601,可以用于在對(duì)所述Web API進(jìn)行升級(jí)的升級(jí)啟動(dòng)階段,生成與 升級(jí)后得到所述Web API的升級(jí)版本相對(duì)應(yīng)的第二定義信息,其中,所述第二定義信息被存 儲(chǔ)在數(shù)據(jù)庫(kù)中,所述數(shù)據(jù)庫(kù)中還存儲(chǔ)與所述Web API的初始版本向?qū)?yīng)的第一定義信息,并 且其中,所述第一和第二定義信息分別至少包括:Web API的名稱(chēng)、主版本號(hào)、子版本號(hào)、發(fā) 布狀態(tài)信息以及路由信息。
[0074] 信息更新模塊602,可以用于在對(duì)所述Web API的升級(jí)版本進(jìn)行線上測(cè)試的升級(jí) 線上測(cè)試階段,更新所述第二定義信息中的發(fā)布狀態(tài)信息以標(biāo)記所述Web API升級(jí)版本當(dāng) 前的發(fā)布狀態(tài)為線上測(cè)試狀態(tài);以及用于在對(duì)所述Web API的升級(jí)版本進(jìn)行發(fā)布的升級(jí)發(fā) 布階段,更新所述第二定義信息中的發(fā)布狀態(tài)信息以標(biāo)記所述Web API升級(jí)版本當(dāng)前的發(fā) 布狀態(tài)為已發(fā)布狀態(tài)。并且其中,如果所述Web API的升級(jí)類(lèi)型為兼容性升級(jí),所述信息更 新模塊602還可以用于在所述升級(jí)發(fā)布階段,更新所述第一定義信息中的發(fā)布狀態(tài)信息以 標(biāo)記所述Web API的初始版本為已過(guò)期。
[0075] 所述信息生成模塊601還可以用于:當(dāng)所述Web API的升級(jí)類(lèi)型為兼容性升級(jí)時(shí), 將所述第二定義信息中的主版本號(hào)生成為與所述第一定義信息中相同的主版本號(hào),將所述 第二定義信息中的子版本號(hào)生成為所述第一定義信息中的子版本號(hào)不同的子版本號(hào)。
[0076] 當(dāng)所述Web API的升級(jí)類(lèi)型為非兼容性升級(jí)時(shí),將所述第二定義信息中的主版本 號(hào)生成為所述第一定義信息中的主版本號(hào)不同的主版本號(hào),將所述第二定義信息中的子版 本號(hào)生成為與所述第一定義信息中相同的子版本號(hào)。
[0077] 所述系統(tǒng)還可以包括信息查找模塊603,該模塊可以用于當(dāng)接收到對(duì)所述Web API 的調(diào)用請(qǐng)求時(shí),如果所述請(qǐng)求是線上測(cè)試環(huán)境的,在所述數(shù)據(jù)庫(kù)中查找與所述調(diào)用請(qǐng)求中 的調(diào)用信息相對(duì)應(yīng)的且發(fā)布狀態(tài)為線上測(cè)試狀態(tài)的所述Web API的定義信息,如果查找不 至IJ,則在所述數(shù)據(jù)庫(kù)中查找與所述調(diào)用請(qǐng)求中的調(diào)用信息相對(duì)應(yīng)且發(fā)布狀態(tài)為已發(fā)布狀態(tài) 的所述Web API的定義信息;如果所述請(qǐng)求是線上正式環(huán)境的,在所述數(shù)據(jù)庫(kù)中查找與所 述調(diào)用請(qǐng)求相對(duì)應(yīng)且發(fā)布狀態(tài)為已發(fā)布狀態(tài)的所述Web API的定義信息。
[0078] 其中,所述調(diào)用信息至少包括:所調(diào)用的Web API的名稱(chēng)、主版本號(hào)。
[0079] 所述系統(tǒng)還可以包括:確定模塊604、轉(zhuǎn)發(fā)模塊605、以及接收模塊606。
[0080] 確定模塊604,可以用于基于查找到的定義信息確定目標(biāo)系統(tǒng)。
[0081] 轉(zhuǎn)發(fā)模塊605,可以用于將所述調(diào)用請(qǐng)求向所述目標(biāo)系統(tǒng)轉(zhuǎn)發(fā),以使所述目標(biāo)系統(tǒng) 對(duì)所述請(qǐng)求進(jìn)行處理。
[0082] 接收模塊606,可以用于接收來(lái)自目標(biāo)系統(tǒng)對(duì)所述請(qǐng)求的處理結(jié)果。
[0083] 本申請(qǐng)的方法的具體實(shí)施與系統(tǒng)600所包括的各個(gè)模塊的具體實(shí)施是相對(duì)應(yīng)的, 可以相互參照,為了不模糊本申請(qǐng),在此省略對(duì)系統(tǒng)600的具體細(xì)節(jié)進(jìn)行描述。
[0084] 應(yīng)當(dāng)注意,盡管在上文描述中提及了系統(tǒng)的若干模塊或子模塊,但是這種劃分并 非強(qiáng)制性的。實(shí)際上,根據(jù)本申請(qǐng)的實(shí)施方式,上文描述的兩個(gè)或更多模塊的特征和功能可 以在一個(gè)模塊中具體化。反之,上文描述的一個(gè)模塊的特征和功能可以進(jìn)一步劃分為由多 個(gè)模塊來(lái)具體化。
[0085] 此外,盡管在附圖中以特定順序描述了本申請(qǐng)方法的操作,但是,這并非要求或者 暗示必須按照該特定順序來(lái)執(zhí)行這些操作,或是必須執(zhí)行全部所示的操作才能實(shí)現(xiàn)期望的 結(jié)果。
[0086] 本申請(qǐng)可以在由計(jì)算機(jī)執(zhí)行的計(jì)算機(jī)可執(zhí)行指令的一般上下文中描述,例如程序 模塊或單元。一般地,程序模塊或單元可以包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類(lèi)型的 例程、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等等。一般來(lái)說(shuō),程序模塊或單元可以由軟件、硬件或兩者 的結(jié)合來(lái)實(shí)現(xiàn)。也可以在分布式計(jì)算環(huán)境中實(shí)踐本申請(qǐng),在這些分布式計(jì)算環(huán)境中,由通過(guò) 通信網(wǎng)絡(luò)而被連接的遠(yuǎn)程處理設(shè)備來(lái)執(zhí)行任務(wù)。在分布式計(jì)算環(huán)境中,程序模塊或單元可 以位于包括存儲(chǔ)設(shè)備在內(nèi)的本地和遠(yuǎn)程計(jì)算機(jī)存儲(chǔ)介質(zhì)中。
[0087] 在一個(gè)典型的配置中,計(jì)算設(shè)備包括一個(gè)或多個(gè)處理器(CPU)、輸入/輸出接口、 網(wǎng)絡(luò)接口和內(nèi)存。
[0088] 內(nèi)存可能包括計(jì)算機(jī)可讀介質(zhì)中的非永久性存儲(chǔ)器,隨機(jī)存取存儲(chǔ)器(RAM)和/ 或非易失性?xún)?nèi)存等形式,如只讀存儲(chǔ)器(ROM)或閃存(flash RAM)。內(nèi)存是計(jì)算機(jī)可讀介質(zhì) 的示例。
[0089] 計(jì)算機(jī)可讀介質(zhì)包括永久性和非永久性、可移動(dòng)和非可移動(dòng)媒體可以由任何方法 或技術(shù)來(lái)實(shí)現(xiàn)信息存儲(chǔ)。信息可以是計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。 計(jì)算機(jī)的存儲(chǔ)介質(zhì)的例子包括,但不限于相變內(nèi)存(PRAM)、靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)、 動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)、其他類(lèi)型的隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、電 可擦除可編程只讀存儲(chǔ)器(EEPR0M)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤(pán)只讀存儲(chǔ)器 (CD-ROM)、數(shù)字多功能光盤(pán)(DVD)或其他光學(xué)存儲(chǔ)、磁盒式磁帶,磁帶磁磁盤(pán)存儲(chǔ)或其他磁 性存儲(chǔ)設(shè)備或任何其他非傳輸介質(zhì),可用于存儲(chǔ)可以被計(jì)算設(shè)備訪問(wèn)的信息。按照本文中 的界定,計(jì)算機(jī)可讀介質(zhì)不包括非暫存電腦可讀媒體(transitory media),如調(diào)制的數(shù)據(jù) 信號(hào)和載波。
[0090] 還需要說(shuō)明的是,術(shù)語(yǔ)"包括"、"包含"或者其任何其他變體意在涵蓋非排他性的 包含,從而使得包括一系列要素的過(guò)程、方法、商品或者設(shè)備不僅包括那些要素,而且還包 括沒(méi)有明確列出的其他要素,或者是還包括為這種過(guò)程、方法、商品或者設(shè)備所固有的要 素。在沒(méi)有更多限制的情況下,由語(yǔ)句"包括一個(gè)……"限定的要素,并不排除在包括所述 要素的過(guò)程、方法、商品或者設(shè)備中還存在另外的相同要素。
[0091] 本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本申請(qǐng)的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序 產(chǎn)品。因此,本申請(qǐng)可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí) 施例的形式。而且,本申請(qǐng)可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī) 可用存儲(chǔ)介質(zhì)(包括但不限于磁盤(pán)存儲(chǔ)器、CD-ROM、光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn) 品的形式。
[0092] 本文中應(yīng)用了具體個(gè)例對(duì)本申請(qǐng)的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說(shuō) 明只是用于幫助理解本申請(qǐng)的方法及其主要思想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù) 本申請(qǐng)的思想,在【具體實(shí)施方式】及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說(shuō)明書(shū)內(nèi)容不 應(yīng)理解為對(duì)本申請(qǐng)的限制。
【權(quán)利要求】
1. 一種網(wǎng)絡(luò)應(yīng)用程序接口(Web API)升級(jí)的方法,其特征在于,包括: 在對(duì)Web API進(jìn)行升級(jí)的升級(jí)啟動(dòng)階段,生成與所述Web API的升級(jí)版本相對(duì)應(yīng)的第 二定義信息,其中,所述第二定義信息被存儲(chǔ)在數(shù)據(jù)庫(kù)中,所述數(shù)據(jù)庫(kù)中還存儲(chǔ)與所述Web API的初始版本相對(duì)應(yīng)的第一定義信息,并且其中,所述第一和第二定義信息分別至少包 括:Web API的名稱(chēng)、主版本號(hào)、子版本號(hào)、發(fā)布狀態(tài)信息以及路由信息; 在對(duì)所述Web API的升級(jí)版本進(jìn)行線上測(cè)試的升級(jí)線上測(cè)試階段,更新所述第二定義 信息中的發(fā)布狀態(tài)信息以標(biāo)記所述Web API升級(jí)版本當(dāng)前的發(fā)布狀態(tài)為線上測(cè)試狀態(tài); 在對(duì)所述Web API的升級(jí)版本進(jìn)行發(fā)布的升級(jí)發(fā)布階段,更新所述第二定義信息中的 發(fā)布狀態(tài)信息以標(biāo)記所述Web API升級(jí)版本當(dāng)前的發(fā)布狀態(tài)為已發(fā)布狀態(tài),并且其中,如果 所述Web API的升級(jí)類(lèi)型為兼容性升級(jí),則在所述升級(jí)發(fā)布階段,更新所述第一定義信息中 的發(fā)布狀態(tài)信息以標(biāo)記所述Web API的初始版本為已過(guò)期。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,如果所述Web API的升級(jí)類(lèi)型為兼容性升 級(jí),則將所述第二定義信息中的主版本號(hào)生成為與所述第一定義信息中相同的主版本號(hào), 將所述第二定義信息中的子版本號(hào)生成為與所述第一定義信息中的子版本號(hào)不同的子版 本號(hào); 如果所述Web API的升級(jí)類(lèi)型為非兼容性升級(jí),則將所述第二定義信息中的主版本號(hào) 生成為與所述第一定義信息中的主版本號(hào)不同的主版本號(hào),將所述第二定義信息中的子版 本號(hào)生成為與所述第一定義信息中相同的子版本號(hào)。
3. 根據(jù)權(quán)利要求1所述的方法,其特征在于,當(dāng)接收到對(duì)所述Web API的調(diào)用請(qǐng)求時(shí), 如果所述請(qǐng)求是線上測(cè)試環(huán)境的,在所述數(shù)據(jù)庫(kù)中查找與所述調(diào)用請(qǐng)求中的調(diào)用信息 相對(duì)應(yīng)且發(fā)布狀態(tài)為線上測(cè)試狀態(tài)的所述Web API的定義信息,如果查找不到,則在所述數(shù) 據(jù)庫(kù)中查找與所述調(diào)用請(qǐng)求中的調(diào)用信息相對(duì)應(yīng)且發(fā)布狀態(tài)為已發(fā)布狀態(tài)的所述Web API 的定義信息; 如果所述請(qǐng)求是線上正式環(huán)境的,在所述數(shù)據(jù)庫(kù)中查找與所述調(diào)用請(qǐng)求中的調(diào)用信息 相對(duì)應(yīng)且發(fā)布狀態(tài)為已發(fā)布狀態(tài)的所述Web API的定義信息; 其中,所述調(diào)用信息至少包括:所調(diào)用Web API的名稱(chēng)、主版本號(hào)。
4. 根據(jù)權(quán)利要求3所述的方法,其特征在于,還包括: 基于查找到的定義信息確定處理所述調(diào)用請(qǐng)求的目標(biāo)系統(tǒng); 將所述調(diào)用請(qǐng)求向所述目標(biāo)系統(tǒng)轉(zhuǎn)發(fā),以使所述目標(biāo)系統(tǒng)對(duì)所述請(qǐng)求進(jìn)行處理; 接收來(lái)自目標(biāo)系統(tǒng)對(duì)所述請(qǐng)求的處理結(jié)果。
5. -種網(wǎng)絡(luò)應(yīng)用程序接口(Web API)升級(jí)的系統(tǒng),其特征在于,包括: 信息生成模塊,用于在對(duì)Web API進(jìn)行升級(jí)的升級(jí)啟動(dòng)階段,生成與升級(jí)后得到所述 Web API的升級(jí)版本相對(duì)應(yīng)的第二定義信息,其中,所述第二定義信息被存儲(chǔ)在數(shù)據(jù)庫(kù)中, 所述數(shù)據(jù)庫(kù)中還存儲(chǔ)與所述Web API的初始版本相對(duì)應(yīng)的第一定義信息,并且其中,所述第 一和第二定義信息分別至少包括:Web API的名稱(chēng)、主版本號(hào)、子版本號(hào)、發(fā)布狀態(tài)信息以及 路由信息; 信息更新模塊,用于在對(duì)所述Web API的升級(jí)版本進(jìn)行線上測(cè)試的升級(jí)線上測(cè)試階段, 更新所述第二定義信息中的發(fā)布狀態(tài)信息以標(biāo)記所述Web API升級(jí)版本當(dāng)前的發(fā)布狀態(tài)為 線上測(cè)試狀態(tài);以及用于在對(duì)所述Web API的升級(jí)版本進(jìn)行發(fā)布的升級(jí)發(fā)布階段,更新所 述第二定義信息中的發(fā)布狀態(tài)信息以標(biāo)記所述Web API升級(jí)版本當(dāng)前的發(fā)布狀態(tài)為已發(fā)布 狀態(tài),并且其中,如果所述Web API的升級(jí)類(lèi)型為兼容性升級(jí),所述信息更新模塊還用于在 所述升級(jí)發(fā)布階段,更新所述第一定義信息中的發(fā)布狀態(tài)信息以標(biāo)記所述Web API的初始 版本為已過(guò)期。
6. 根據(jù)權(quán)利要求5所述的系統(tǒng),其特征在于,所述信息生成模塊還用于:當(dāng)所述Web API的升級(jí)類(lèi)型為兼容性升級(jí)時(shí),將所述第二定義信息中的主版本號(hào)生成為與所述第一定 義信息中相同的主版本號(hào),將所述第二定義信息中的子版本號(hào)生成為與所述第一定義信息 中的子版本號(hào)不同的子版本號(hào); 當(dāng)所述Web API的升級(jí)類(lèi)型為非兼容性升級(jí)時(shí),將所述第二定義信息中的主版本號(hào)生 成為與所述第一定義信息中的主版本號(hào)不同的主版本號(hào),將所述第二定義信息中的子版本 號(hào)生成為與所述第一定義信息中相同的子版本號(hào)。
7. 根據(jù)權(quán)利要求5所述的系統(tǒng),其特征在于,還包括:信息查找模塊, 用于當(dāng)接收到對(duì)所述Web API的調(diào)用請(qǐng)求時(shí), 如果所述請(qǐng)求是線上測(cè)試環(huán)境的,在所述數(shù)據(jù)庫(kù)中查找與所述調(diào)用請(qǐng)求中的調(diào)用信息 相對(duì)應(yīng)且發(fā)布狀態(tài)為線上測(cè)試狀態(tài)的所述Web API的定義信息,如果查找不到,則在所述數(shù) 據(jù)庫(kù)中查找與所述調(diào)用請(qǐng)求中的調(diào)用信息相對(duì)應(yīng)且發(fā)布狀態(tài)為已發(fā)布狀態(tài)的所述Web API 的定義信息; 如果所述請(qǐng)求是線上正式環(huán)境的,在所述數(shù)據(jù)庫(kù)中查找與所述調(diào)用請(qǐng)求中的調(diào)用信息 相對(duì)應(yīng)且發(fā)布狀態(tài)為已發(fā)布狀態(tài)的所述Web API的定義信息; 其中,所述調(diào)用信息至少包括:所調(diào)用Web API的名稱(chēng)、主版本號(hào)。
8. 根據(jù)權(quán)利要求7所述的系統(tǒng),其特征在于,還包括: 確定模塊,用于基于查找到的定義信息確定目標(biāo)系統(tǒng); 轉(zhuǎn)發(fā)模塊,用于將所述調(diào)用請(qǐng)求向所述目標(biāo)系統(tǒng)轉(zhuǎn)發(fā),以使所述目標(biāo)系統(tǒng)對(duì)所述請(qǐng)求 進(jìn)行處理; 接收模塊,用于接收來(lái)自目標(biāo)系統(tǒng)對(duì)所述請(qǐng)求的處理結(jié)果。
【文檔編號(hào)】G06F9/445GK104216724SQ201310217643
【公開(kāi)日】2014年12月17日 申請(qǐng)日期:2013年6月3日 優(yōu)先權(quán)日:2013年6月3日
【發(fā)明者】張先武 申請(qǐng)人:阿里巴巴集團(tuán)控股有限公司