本申請(qǐng)涉及應(yīng)用編程接口調(diào)用領(lǐng)域,尤其涉及一種基于元數(shù)據(jù)(Metadata)的命令行工具調(diào)用應(yīng)用編程接口API的方法和系統(tǒng)。
背景技術(shù):
一個(gè)網(wǎng)站提供一個(gè)服務(wù)時(shí),不會(huì)直接提供服務(wù)的源代碼,或者稱為業(yè)務(wù)的源代碼。服務(wù)商會(huì)將需要提供的網(wǎng)站服務(wù)封裝成一系列的應(yīng)用編程接口(Application Programming Interface,API),以API的方式將該服務(wù)提供出去,以供第三方開發(fā)者使用,這種行為叫做開放網(wǎng)站的API,被開放的API稱作OpenAPI,或稱作開放API,也可以稱作開放平臺(tái)。
第三方開發(fā)者可以通過網(wǎng)站服務(wù)提供API的軟件開發(fā)工具包(Software Development Kit,SDK)進(jìn)行二次開發(fā)和調(diào)用,以完成用戶的各種需求。用戶在使用網(wǎng)站服務(wù)時(shí),利用命令行工具,通過SDK調(diào)用API完成通信和交互。
而目前采用命令行工具調(diào)用API的系統(tǒng)如圖1所示。交互界面110接收用戶輸入的命令并解析,將解析后的命令發(fā)送給SDK解析和調(diào)用模塊120;SDK解析和調(diào)用模塊調(diào)用SDK包130中的相應(yīng)的接口,并將所有接口與解析后的命令進(jìn)行匹配,當(dāng)所有接口中的任一接口與解析后的命令相匹配時(shí),SDK解析和調(diào)用模塊根據(jù)解析后的命令校驗(yàn)并生成請(qǐng)求,調(diào)用相匹配的接口向遠(yuǎn)程服務(wù)器發(fā)送該請(qǐng)求,以用于遠(yuǎn)程服務(wù)器根據(jù)該請(qǐng)求返回結(jié)果。
但是,通過現(xiàn)有的命令行工具調(diào)用API,存在至少以下缺點(diǎn):由于調(diào)用API的命令行工具是通過SDK包的二次封裝來完成的,所以命令行工具對(duì)SDK包具有很強(qiáng)的依賴性,命令行工具對(duì)服務(wù)的適配性差,且容易造成命令行工 具由于API更新,SDK包不能同步更新,而不能工作的情況。比如:當(dāng)遠(yuǎn)程服務(wù)器存在多個(gè)不同的服務(wù)時(shí),命令行工具必須依賴多個(gè)SDK(每一個(gè)服務(wù)都需要一個(gè)特定的SDK與之匹配),且每個(gè)SDK與命令行工具的實(shí)現(xiàn)必須采用一致的方法,如果無法保證SDK與命令行工具的實(shí)現(xiàn)流程一致,那么命令行工具就需要逐個(gè)適配不同服務(wù)的SDK;或者相同服務(wù)存在多個(gè)API時(shí),命令行工具需要兼容不同版本,且需要安裝多個(gè)版本的SDK,以實(shí)現(xiàn)API的調(diào)用。
技術(shù)實(shí)現(xiàn)要素:
本申請(qǐng)實(shí)施例提供的調(diào)用應(yīng)用編程接口的方法和裝置,通過從元數(shù)據(jù)文件中調(diào)用所有的應(yīng)用程序接口,以實(shí)現(xiàn)調(diào)用API的命令行工具不再依賴SDK包,提高命令行工具對(duì)服務(wù)的適配性。
為實(shí)現(xiàn)上述目的,本申請(qǐng)實(shí)施例提供了一種調(diào)用應(yīng)用編程接口的方法,該方法包括:
解析用戶輸入的調(diào)用操作請(qǐng)求,獲取調(diào)用操作請(qǐng)求中的至少一個(gè)第一數(shù)據(jù)信息;根據(jù)至少一個(gè)第一數(shù)據(jù)信息調(diào)用相應(yīng)的應(yīng)用編程接口,從元數(shù)據(jù)文件中獲取至少一個(gè)第二數(shù)據(jù)信息;根據(jù)至少一個(gè)第一數(shù)據(jù)信息與至少一個(gè)第二數(shù)據(jù)信息對(duì)至少一個(gè)第一數(shù)據(jù)信息進(jìn)行合法驗(yàn)證;當(dāng)至少一個(gè)第一數(shù)據(jù)信息合法驗(yàn)證通過時(shí),根據(jù)至少一個(gè)第一數(shù)據(jù)信息和至少一個(gè)第二數(shù)據(jù)信息生成請(qǐng)求消息;向遠(yuǎn)程服務(wù)器發(fā)送請(qǐng)求消息,以用于遠(yuǎn)程服務(wù)器根據(jù)請(qǐng)求消息返回結(jié)果信息。
本申請(qǐng)實(shí)施例還提供了一種系統(tǒng),該系統(tǒng)包括:包括命令解析模塊、元數(shù)據(jù)解析模塊、元數(shù)據(jù)描述模塊、生成請(qǐng)求模塊和公共連網(wǎng)模塊;
命令解析模塊,用于解析用戶輸入的調(diào)用操作請(qǐng)求,獲取調(diào)用操作請(qǐng)求中的至少一個(gè)第一數(shù)據(jù)信息;元數(shù)據(jù)解析模塊還用于,根據(jù)至少一個(gè)第一數(shù)據(jù)信息從元數(shù)據(jù)描述模塊的元數(shù)據(jù)文件中獲取至少一個(gè)第二數(shù)據(jù)信息;命令解析模塊還用于,根據(jù)至少一個(gè)第一數(shù)據(jù)信息與至少一個(gè)第二數(shù)據(jù)信息對(duì)至少一 個(gè)第一數(shù)據(jù)信息進(jìn)行合法驗(yàn)證(或匹配),以確定需要調(diào)用的應(yīng)用編程接口;生成請(qǐng)求模塊,用于當(dāng)至少一個(gè)第一數(shù)據(jù)信息合法驗(yàn)證通過時(shí),根據(jù)至少一個(gè)第一數(shù)據(jù)信息和至少一個(gè)第二數(shù)據(jù)信息生成請(qǐng)求消息;公共連網(wǎng)模塊,用于通過調(diào)用的應(yīng)用編程接口向遠(yuǎn)程服務(wù)器發(fā)送請(qǐng)求消息,以用于遠(yuǎn)程服務(wù)器根據(jù)請(qǐng)求消息返回結(jié)果信息。
本申請(qǐng)實(shí)施例提供的調(diào)用應(yīng)用編程接口的方法和系統(tǒng),根據(jù)解析用戶輸入的調(diào)用操作請(qǐng)求獲取第一數(shù)據(jù)信息,根據(jù)第一數(shù)據(jù)信息調(diào)用相應(yīng)的應(yīng)用編程接口,從元數(shù)據(jù)文件中獲取第二數(shù)據(jù)信息,并根據(jù)第一數(shù)據(jù)信息和第二數(shù)據(jù)信息對(duì)第一數(shù)據(jù)信息進(jìn)行匹配,以確定調(diào)用的應(yīng)用編程接口,根據(jù)第一數(shù)據(jù)信息和第二數(shù)據(jù)信息生成請(qǐng)求消息,并通過調(diào)用的應(yīng)用編程接口發(fā)送給遠(yuǎn)程服務(wù)器,避免了現(xiàn)有技術(shù)中調(diào)用API的命令行工具依賴SDK包,提高了命令行工具對(duì)服務(wù)的適配性。
附圖說明
為了更清楚地說明本申請(qǐng)實(shí)施例的技術(shù)方案,下面將對(duì)本申請(qǐng)實(shí)施例中所需要使用的附圖作簡單地介紹,顯而易見地,下面所描述的附圖僅僅是本申請(qǐng)的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為現(xiàn)有技術(shù)中命令行工具調(diào)用API的系統(tǒng)示意圖;
圖2為本申請(qǐng)實(shí)施例提供的系統(tǒng)結(jié)構(gòu)示意圖;
圖3為本申請(qǐng)實(shí)施例提供的調(diào)用應(yīng)用編程接口的方法的流程圖;
圖4為本申請(qǐng)實(shí)施例提供的元數(shù)據(jù)文件更新方法的流程圖;
圖5為本申請(qǐng)另一實(shí)施例提供的元數(shù)據(jù)文件更新方法的流程圖。
具體實(shí)施方式
下面將結(jié)合本申請(qǐng)實(shí)施例中的附圖,對(duì)本申請(qǐng)實(shí)施例中的技術(shù)方案進(jìn)行 清楚、完整地描述,顯然,所描述的實(shí)施例是本申請(qǐng)的一部分實(shí)施例,而不是全部實(shí)施例?;诒旧暾?qǐng)中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)的前提下所獲得的所有其他實(shí)施例,都應(yīng)屬于本申請(qǐng)保護(hù)的范圍。
圖2為本申請(qǐng)實(shí)施例提供的系統(tǒng)結(jié)構(gòu)示意圖。如圖2所示的系統(tǒng)200包括交互模塊210、命令解析模塊220、元數(shù)據(jù)解析模塊230、元數(shù)據(jù)描述模塊240、生成請(qǐng)求模塊250、簽名模塊260和公共連網(wǎng)模塊270。
該系統(tǒng)200中的交互模塊210用于接收用戶輸入的命令行,該命令行可以為指示調(diào)用操作請(qǐng)求,用于指示系統(tǒng)調(diào)用應(yīng)用編程接口(Application Programming Interface,API),并執(zhí)行相應(yīng)的操作,例如向遠(yuǎn)程服務(wù)器發(fā)送請(qǐng)求消息,以便于遠(yuǎn)端服務(wù)器根據(jù)請(qǐng)求消息返回相應(yīng)的資源信息。該命令行還可以為元數(shù)據(jù)文件更新請(qǐng)求,用于指示系統(tǒng)更新元數(shù)據(jù)描述模塊240中的元數(shù)據(jù)文件。
其中,用戶輸入的命令行可以包括服務(wù)名稱、應(yīng)用編程接口名稱、應(yīng)用編程接口參數(shù)。例如用戶輸入的命令為:
aliyuncli ecs StartInstance—InstanceId 12345—port 80
或者
aliyuncli ecs StopInstance—instanceId 12345—port 443
其中,aliyuncli表示工具的名稱;ecs表示服務(wù)名稱;StartInstance/StopInstance表示操作;InstanceId、port表示應(yīng)用編程接口參數(shù);12345和80/43分別為InstanceId、port的參數(shù)內(nèi)容,port 80表示http網(wǎng)絡(luò),port 443表示https網(wǎng)絡(luò)協(xié)議。
例如,在用戶數(shù)據(jù)的其他命令行中包括應(yīng)用編程接口名稱,例如CreateInstance等。
應(yīng)理解,以上命令行中的服務(wù)名稱、應(yīng)用編程接口名稱和應(yīng)用編程接口參數(shù)是為了詳細(xì)描述本申請(qǐng)的方案進(jìn)行的舉例說明,且用戶輸入的命令行還可以包括其他信息,例如,應(yīng)用編程接口風(fēng)格、簽名方式等調(diào)用應(yīng)用編程接 口的相關(guān)信息,以上示例的內(nèi)容并不限制本申請(qǐng)的技術(shù)方案。
但為了提高用戶的體驗(yàn),在本申請(qǐng)實(shí)施例中,以用戶輸入的命令行包括服務(wù)名稱、應(yīng)用編程接口名稱和應(yīng)用編程接口參數(shù)為例對(duì)本申請(qǐng)的技術(shù)方案進(jìn)行詳細(xì)說明。
當(dāng)交互模塊210接收到用戶輸入的命令行時(shí),交互模塊210會(huì)對(duì)用戶輸入的命令行進(jìn)行“拼裝”,該“拼裝”將命令行中的參數(shù)名稱和值進(jìn)行處理,例如,可以將參數(shù)名稱和值放到某個(gè)數(shù)據(jù)結(jié)構(gòu),典型的入字典類型或者map類型的數(shù)據(jù)結(jié)構(gòu),以便于用戶輸入的信息在系統(tǒng)中繼續(xù)傳遞。
假設(shè)用戶輸入的命令行為:
aliyuncli ecs StartInstance—InstanceId 12345—port 80—region cn-hangzhou-----;
交互模塊210會(huì)將命令行拼裝為:
{“InstanceId”:“12345”,“port”:“80”,“region”:“cn-hangzhou”}
其中,aliyuncli一般是工具的名稱;ecs表示服務(wù)名稱;StartInstance表示操作;InstanceId、port和region均為應(yīng)用編程接口參數(shù);12345、80和cn-hangzhou依次為InstanceId、port、region應(yīng)用編程接口參數(shù)的參數(shù)內(nèi)容;。
在本申請(qǐng)實(shí)施例中,交互模塊210還可以對(duì)接收到命令行進(jìn)行轉(zhuǎn)換,在應(yīng)用中可能以大寫的方式為可能被調(diào)用的函數(shù)命名,比如函數(shù)名稱為“CreateInstance”,在函數(shù)調(diào)用過程中,用戶輸入了“createinstance”,在命令行工具做大小寫兼容的情況下,交互模塊210將用戶輸入的“createinstance”轉(zhuǎn)換為“CreateInstance”,以進(jìn)行函數(shù)的調(diào)用。
命令解析模塊220用于解析交互模塊210接收的用戶輸入的命令行,確定交互模塊210接收到的命令行是調(diào)用操作請(qǐng)求還是元數(shù)據(jù)文件更新請(qǐng)求。
當(dāng)解析命令行為調(diào)用操作請(qǐng)求時(shí),以便于根據(jù)命令行中的應(yīng)用編程接口名稱,應(yīng)用編程接口參數(shù)等信息與從元數(shù)據(jù)文件中獲取的相應(yīng)的應(yīng)用編程接口名稱,應(yīng)用編程接口參數(shù)等信息逐一匹配,以確定需要調(diào)用的應(yīng)用編程接 口,并向生成請(qǐng)求模塊250發(fā)送該命令行和從原數(shù)據(jù)文件中獲取的信息。
當(dāng)解析命令行為元數(shù)據(jù)文件更新請(qǐng)求時(shí),向公共連網(wǎng)模塊270發(fā)送元數(shù)據(jù)文件更新請(qǐng)求,以便于公共連網(wǎng)模塊270將該元數(shù)據(jù)文件更新請(qǐng)求發(fā)送給遠(yuǎn)程服務(wù)器,遠(yuǎn)程服務(wù)器根據(jù)元數(shù)據(jù)文件更新請(qǐng)求返回遠(yuǎn)程服務(wù)器端元數(shù)據(jù)文件的版本信息,以便于系統(tǒng)根據(jù)元數(shù)據(jù)描述模塊240中的元數(shù)據(jù)文件的版本信息進(jìn)行更新。
當(dāng)遠(yuǎn)程服務(wù)器返回的遠(yuǎn)程服務(wù)器的元數(shù)據(jù)文件的版本信息與系統(tǒng)中元數(shù)據(jù)描述模塊240中的元數(shù)據(jù)文件的版本信息一致時(shí),該系統(tǒng)的元數(shù)據(jù)文件不需要更新;當(dāng)遠(yuǎn)程服務(wù)器返回的遠(yuǎn)程服務(wù)器的元數(shù)據(jù)文件的版本信息與系統(tǒng)中元數(shù)據(jù)描述模塊240中的元數(shù)據(jù)文件的版本信息不一致時(shí),系統(tǒng)通過公共連網(wǎng)模塊270從遠(yuǎn)程服務(wù)器下載元數(shù)據(jù)文件,并覆蓋元數(shù)據(jù)描述模塊240中的原有的元數(shù)據(jù)文件,以完成元數(shù)據(jù)文件的更新。
應(yīng)理解,在本申請(qǐng)實(shí)施例中,當(dāng)系統(tǒng)需要更新或升級(jí)時(shí),也可以通過除版本信息之外的其他信息對(duì)系統(tǒng)的原文件進(jìn)行更新或升級(jí),例如匹配遠(yuǎn)程服務(wù)端與系統(tǒng)中任一原文件的信息不相同時(shí),原文件版本的上線日期等信息。
元數(shù)據(jù)解析模塊230用于解析元數(shù)據(jù)描述模塊240中的元數(shù)據(jù)文件中的數(shù)據(jù)。當(dāng)命令解析模塊220根據(jù)用戶輸入的命令行通過元數(shù)據(jù)解析模塊230解析從元數(shù)據(jù)描述模塊240中獲取的元數(shù)據(jù)文件,獲取與用戶輸入的命令行相應(yīng)的數(shù)據(jù)信息,例如用戶輸入的命令行包括服務(wù)名稱(或稱為產(chǎn)品名稱),API的名稱,API的參數(shù),API接口信息等其他信息,那么命令解析模塊220根據(jù)用戶輸入的API接口信息,通過元數(shù)據(jù)解析模塊230從元數(shù)據(jù)描述模塊240中的元數(shù)據(jù)文件中獲取與用戶輸入的命令行包括的服務(wù)名稱,API的名稱,API的參數(shù),API接口信息等其他信息相應(yīng)的信息。
其中,用戶輸入的命令行還可以包括API風(fēng)格、簽名方式、元數(shù)據(jù)文件的版本信息、獨(dú)立軟件開發(fā)商(Independent Software Vendors,ISV)協(xié)議等信息。
元數(shù)據(jù)描述模塊240包括多個(gè)元數(shù)據(jù)文件。每個(gè)元數(shù)據(jù)文件中都包括一個(gè)接口的名稱、類型、風(fēng)格、元數(shù)據(jù)文件的版本信息;接口入?yún)⒌拿Q、類型、是否必填、默認(rèn)值等信息;返回值的參數(shù)名稱、類型以及可能的報(bào)錯(cuò)信息等。元數(shù)據(jù)文件可以以xml或JSON等通用方式保存。
下面以xml格式的元數(shù)據(jù)(Matedate)文件為例,詳細(xì)闡述元數(shù)據(jù)文件對(duì)API描述的方式:
在該示例中,元數(shù)據(jù)描述文件包括API屬性信息、API入?yún)⑿畔ⅰSV協(xié)議(IsvProtocol)描述和返回參數(shù)(ResultMapping)描述。
API屬性信息包括API所屬服務(wù)(或產(chǎn)品)信息(product)、API的名稱(name)、API狀態(tài)(status)、版本(version)、規(guī)則或者稱作協(xié)議(policy)、 API風(fēng)格(style)等信息。API屬性信息還可以根據(jù)需要增加其他字段。根據(jù)API屬性信息可以作為匹配規(guī)則,在生成調(diào)用時(shí)使用。
API入?yún)⑿畔?,即示例中每一個(gè)參數(shù),為每一個(gè)參數(shù)定義了其名稱(name),展示名(tagName),類型(type),位置(position,決定參數(shù)被如何拼裝),是否必填(required),默認(rèn)值(default),數(shù)值轉(zhuǎn)換(Switch&Case)等信息。通過以上信息可以將入?yún)⑦M(jìn)行全面描述,還可以根據(jù)需要增加例如最大最小值等屬性,進(jìn)一步對(duì)入?yún)⑦M(jìn)行約束.以上信息用于在生成調(diào)用時(shí)對(duì)入?yún)⑦M(jìn)行定義,影響API調(diào)用時(shí)入?yún)⒌钠囱b方式和約束。
ISV協(xié)議描述是對(duì)調(diào)用該API使用的協(xié)議進(jìn)行描述,用于確定API的調(diào)用方式。在本申請(qǐng)實(shí)施例中關(guān)于接入點(diǎn),調(diào)用規(guī)則等信息可以在ISV協(xié)議描述中進(jìn)行定義。
返回參數(shù)描述是對(duì)返回值的每個(gè)參數(shù),定義其名稱(name),類型(type),展示名(tagName),由數(shù)組(Array)以及結(jié)構(gòu)體(Struct)組成的,復(fù)雜數(shù)據(jù)類型的描述,null是否轉(zhuǎn)化為空標(biāo)簽(nullToEmpty)等信息。返回參數(shù)描述可用于調(diào)用后返回值的對(duì)象。
通過以上示例,可以完成API屬性及完整內(nèi)容的描述,滿足通用元數(shù)據(jù)文件對(duì)API的描述需求。在本申請(qǐng)實(shí)施例中,在元數(shù)據(jù)描述文件對(duì)API的描述中,還可以擴(kuò)展新的屬性,增加更多API特征的描述,在本申請(qǐng)實(shí)施例中對(duì)此不作限制。
采用本申請(qǐng)示例所示的元數(shù)據(jù)文件,通過本申請(qǐng)圖2所示的系統(tǒng),以及下文圖3所示的調(diào)用應(yīng)用編程接口的方法和圖4、圖5所示的元數(shù)據(jù)文件更新的方法,可以輕松實(shí)現(xiàn)API的調(diào)用,解決了不同服務(wù)(或產(chǎn)品)的兼容性和相同服務(wù)(或產(chǎn)品)的不同版本的兼容性,利用通用的元數(shù)據(jù)文件,可以使得命令行工具具有極大的兼容性和可擴(kuò)展性。
生成請(qǐng)求模塊250用于接收命令解析模塊220發(fā)送的解析后的命令行,(用戶輸入的);根據(jù)解析后的命令行中API風(fēng)格確定生成請(qǐng)求的類型,根 據(jù)生成請(qǐng)求的類型和命令行中簽名方式,通過簽名模塊260計(jì)算簽名,最終生成請(qǐng)求消息。
根據(jù)解析后的命令行中API風(fēng)格確定生成請(qǐng)求的類型可以通過組織命令行的格式和參數(shù)順序,將命令行拼成一個(gè)唯一確定的字符串,該字符串用于簽名。在本申請(qǐng)實(shí)施例中,不同的API風(fēng)格對(duì)應(yīng)的參數(shù)順序可能不一致,該參數(shù)的順序就是為了簽名時(shí)保證與被簽名的字符串一致。
應(yīng)理解,簽名過后向遠(yuǎn)程服務(wù)器發(fā)送的請(qǐng)求消息,例如:http/https請(qǐng)求的參數(shù)順序可以任一排列。
簽名模塊260用于被生成請(qǐng)求模塊250調(diào)用,生成請(qǐng)求消息需要的簽名。需要說明的是,在命令行工具調(diào)用API時(shí),都會(huì)采用簽名校驗(yàn)機(jī)制進(jìn)行驗(yàn)證。
公共連網(wǎng)模塊270負(fù)責(zé)向遠(yuǎn)程服務(wù)器發(fā)送請(qǐng)求消息,例如:http/https請(qǐng)求;或者向遠(yuǎn)程服務(wù)器發(fā)送元數(shù)據(jù)文件更新請(qǐng)求,以用于更新元數(shù)據(jù)描述模塊240中的元數(shù)據(jù)文件。
通過本申請(qǐng)實(shí)施例提供的系統(tǒng),命令解析模塊根據(jù)解析用戶輸入的調(diào)用操作請(qǐng)求獲取第一數(shù)據(jù)信息,并根據(jù)第一數(shù)據(jù)信息從元數(shù)據(jù)描述模塊的元數(shù)據(jù)文件中獲取第二數(shù)據(jù)信息,根據(jù)第一數(shù)據(jù)信息和第二數(shù)據(jù)信息對(duì)第一數(shù)據(jù)信息,確定需要調(diào)用的應(yīng)用編程接口生成請(qǐng)求模塊根據(jù)第一數(shù)據(jù)信息和二數(shù)據(jù)信息生成請(qǐng)求消息,并通過公共連網(wǎng)模塊發(fā)送給遠(yuǎn)程服務(wù)器。以實(shí)現(xiàn)調(diào)用API的命令行工具不再依賴SDK包,提高命令行工具對(duì)服務(wù)的適配性。
以上描述了本申請(qǐng)實(shí)施例提供的系統(tǒng),下面結(jié)合圖3對(duì)圖2所示系統(tǒng)調(diào)用應(yīng)用編程接口的方法進(jìn)行詳細(xì)的描述。
圖3為本申請(qǐng)實(shí)施例提供的一種調(diào)用應(yīng)用編程接口方法的流程圖。如圖3所示,該方法300的執(zhí)行主體為圖2所示的系統(tǒng)200,該方法300包括以下步驟:
S310,解析用戶輸入的調(diào)用操作請(qǐng)求,獲取調(diào)用操作請(qǐng)求中的至少一個(gè) 第一數(shù)據(jù)信息。
該調(diào)用操作請(qǐng)求為解析后的命令行,命令行為用戶輸入的命令。該命令行用于指示系統(tǒng)調(diào)用相應(yīng)的應(yīng)用編程接口。至少一個(gè)第一數(shù)據(jù)信息可以為命令行中包括的信息,例如:服務(wù)名稱、應(yīng)用編程接口名稱和應(yīng)用編程接口參數(shù)等API調(diào)用的相關(guān)信息中的一個(gè)或多個(gè)信息。
S320,根據(jù)至少一個(gè)第一數(shù)據(jù)信息,從元數(shù)據(jù)文件中獲取與至少一個(gè)第一數(shù)據(jù)信息相對(duì)應(yīng)的至少一個(gè)第二數(shù)據(jù)信息。
至少一個(gè)第二數(shù)據(jù)信息包括與用戶輸入的命令行相對(duì)應(yīng)的信息,例如:服務(wù)名稱、應(yīng)用編程接口名稱和應(yīng)用編程接口參數(shù)等信息中的一個(gè)或多個(gè)信息。在本申請(qǐng)實(shí)施例中,S310中的至少一個(gè)第一數(shù)據(jù)信息與S320中的至少一個(gè)第二數(shù)據(jù)信息可以為相同的信息,也可以為不相同的信息。
應(yīng)理解,在該實(shí)施例中,第一數(shù)據(jù)信息和第二數(shù)據(jù)信息中的“第一”和“第二”只是為了區(qū)別數(shù)據(jù)信息的來源不同,對(duì)本申請(qǐng)實(shí)施例的保護(hù)范圍不構(gòu)成任何限制。
需要說明的是,在本申請(qǐng)實(shí)施例的方案中,S310和S320可以通過圖2所示的命令解析模塊220來執(zhí)行。
具體的,命令行解析模塊解析用戶輸入的命令行,獲取命令行中包括的至少一個(gè)第一數(shù)據(jù)信息,根據(jù)至少一個(gè)第一數(shù)據(jù)信息,例如至少一個(gè)第一數(shù)據(jù)信息中的應(yīng)用編程接口名稱,通過元數(shù)據(jù)解析模塊從相對(duì)應(yīng)元數(shù)據(jù)文件中獲取與至少一個(gè)第一數(shù)據(jù)信息相對(duì)應(yīng)的至少一個(gè)第二數(shù)據(jù)信息,其中,元數(shù)據(jù)文件是從元數(shù)據(jù)描述模塊中獲取的。
S330,根據(jù)至少一個(gè)第一數(shù)據(jù)信息與至少一個(gè)第二數(shù)據(jù)信息確定調(diào)用的應(yīng)用編程接口。
確定調(diào)用的應(yīng)用編程接口可以為:命令解析模塊將獲取到的至少一個(gè)第一數(shù)據(jù)信息中的至少一個(gè)數(shù)據(jù)信息與從元數(shù)據(jù)文件中獲取到的至少一個(gè)第二數(shù)據(jù)信息中相應(yīng)的至少一個(gè)數(shù)據(jù)信息進(jìn)行一一匹配,例如將第一數(shù)據(jù)信息服 務(wù)名稱與第二數(shù)據(jù)信息中的服務(wù)名稱進(jìn)行匹配;將第一數(shù)據(jù)信息API名稱與第二數(shù)據(jù)信息中的API名稱進(jìn)行匹配;將第一數(shù)據(jù)信息API參數(shù)與第二數(shù)據(jù)信息中的API參數(shù)進(jìn)行匹配等等,以驗(yàn)證用戶輸入的第一數(shù)據(jù)信息是否有可以調(diào)用的應(yīng)用編程接口。
在本申請(qǐng)實(shí)施例中,命令解析模塊可以先根據(jù)解析命令行獲取的至少一個(gè)第一數(shù)據(jù)信息,從元數(shù)據(jù)文件中獲取與至少一個(gè)第一數(shù)據(jù)信息相對(duì)應(yīng)的服務(wù)名稱,API名稱和API參數(shù),待獲取的數(shù)據(jù)信息存在可以調(diào)用的應(yīng)用編程接口時(shí),再從元數(shù)據(jù)文件中進(jìn)一步API調(diào)用需要的其他信息,例如:元數(shù)據(jù)文件的版本信息、API風(fēng)格,簽名方法等信息。
在本申請(qǐng)實(shí)施例中,當(dāng)至少一個(gè)第一數(shù)據(jù)信息中的任一數(shù)據(jù)信息未通過合法匹配時(shí),該系統(tǒng)API的調(diào)用都會(huì)結(jié)束,并返回信息錯(cuò)誤信息,該信息可以通過圖2所示系統(tǒng)中的交互界面210進(jìn)行信息顯示。
S340,根據(jù)至少一個(gè)第一數(shù)據(jù)信息和至少一個(gè)第二數(shù)據(jù)信息生成請(qǐng)求消息。
當(dāng)S330中對(duì)用戶輸入的至少一個(gè)第一數(shù)據(jù)信息中每一數(shù)據(jù)信息都匹配成功時(shí),對(duì)用戶輸入的至少一個(gè)第一數(shù)據(jù)信息和從與數(shù)據(jù)文件中獲取的所有的信息進(jìn)行組織生成請(qǐng)求消息,該步驟可以通過圖2所示系統(tǒng)中的生成請(qǐng)求模塊250來執(zhí)行。
具體過程可以為,當(dāng)S330對(duì)用戶輸入的至少一個(gè)第一數(shù)據(jù)信息匹配成功時(shí),生成請(qǐng)求模塊接收命令解析模塊發(fā)送的從元數(shù)據(jù)文件中獲取的所有的第二數(shù)據(jù)信息和至少一個(gè)第一數(shù)據(jù)信息,生成請(qǐng)求模塊根據(jù)接收到的信息調(diào)用圖2系統(tǒng)所示的簽名模塊260計(jì)算簽名。生成請(qǐng)求模塊將計(jì)算的簽名和至少一個(gè)第一數(shù)據(jù)信息生成請(qǐng)求消息。
可選地,在本申請(qǐng)實(shí)施例中,根據(jù)至少一個(gè)第一數(shù)據(jù)信息和至少一個(gè)第二數(shù)據(jù)信息生成請(qǐng)求消息可以包括:根據(jù)至少一個(gè)第一數(shù)據(jù)信息和應(yīng)用編程接口風(fēng)格、簽名方式計(jì)算簽名;根據(jù)簽名、至少一個(gè)第一數(shù)據(jù)信息和至少第 一第二數(shù)據(jù)信息生成請(qǐng)求消息。
例如,需要第一數(shù)據(jù)信息中的應(yīng)用編程接口參數(shù)的參數(shù)內(nèi)容和第二數(shù)據(jù)信息中的ISV協(xié)議以及計(jì)算的簽名進(jìn)行拼接,組織生成請(qǐng)求信息。
可選地,在本申請(qǐng)實(shí)施例中,根據(jù)至少一個(gè)第一數(shù)據(jù)信息和應(yīng)用編程接口風(fēng)格、簽名方式計(jì)算簽名可以包括:
根據(jù)應(yīng)用編程接口風(fēng)格確定生成請(qǐng)求消息的類型;根據(jù)請(qǐng)求消息的類型組織至少一個(gè)第一數(shù)據(jù)信息中的應(yīng)用編程接口參數(shù)的順序,將第一數(shù)據(jù)信息生成唯一的字符串;根據(jù)至少一個(gè)第一數(shù)據(jù)信息中的簽名方式和唯一的字符串計(jì)算簽名。
應(yīng)理解,在API調(diào)用的過程中,簽名是一個(gè)必須的步驟,以提高數(shù)據(jù)傳輸?shù)陌踩浴?/p>
S350,通過調(diào)用應(yīng)用編程接口向遠(yuǎn)程服務(wù)器發(fā)送請(qǐng)求消息,以用于遠(yuǎn)程服務(wù)器根據(jù)請(qǐng)求消息返回結(jié)果信息。
當(dāng)S340生成請(qǐng)求消息之后,將請(qǐng)求消息發(fā)送給遠(yuǎn)程服務(wù)器,完成API的調(diào)用,并獲取遠(yuǎn)程服務(wù)器返回的結(jié)果信息。
S350可以通過圖2所述系統(tǒng)中的公共連網(wǎng)模塊270連實(shí)現(xiàn),具體為當(dāng)生成請(qǐng)求模塊將調(diào)用簽名模塊計(jì)算的簽名和第一數(shù)據(jù)信息進(jìn)行拼裝生成請(qǐng)求消息時(shí),通過公共連網(wǎng)模塊向遠(yuǎn)程服務(wù)器發(fā)送該請(qǐng)求消息,以便于遠(yuǎn)程服務(wù)器根據(jù)該請(qǐng)求消息返回結(jié)果信息。
遠(yuǎn)程終端返回的結(jié)果信息可以通過在系統(tǒng)的顯示界面上進(jìn)行顯示,在本申請(qǐng)實(shí)施例中,結(jié)果信息可以通過圖2所示系統(tǒng)的交互界面進(jìn)行顯示。
可選地,在本申請(qǐng)實(shí)施例中,在解析用戶輸入的調(diào)用操作請(qǐng)求之前,該方法300還包括S360接收用戶輸入的操作請(qǐng)求。
該步驟可以通過圖2所示的系統(tǒng)中的交互模塊210實(shí)現(xiàn)。在本申請(qǐng)實(shí)施例中,交互模塊210還用于顯示遠(yuǎn)程服務(wù)器返回的結(jié)果信息。
通過本申請(qǐng)實(shí)施例提供的調(diào)用應(yīng)用編程接口的方法,根據(jù)解析用戶輸入 的調(diào)用操作請(qǐng)求獲取第一數(shù)據(jù)信息,根據(jù)第一數(shù)據(jù)信息調(diào)用相應(yīng)的應(yīng)用編程接口,從元數(shù)據(jù)文件中獲取第二數(shù)據(jù)信息,并根據(jù)第一數(shù)據(jù)信息和第二數(shù)據(jù)信息對(duì)第一數(shù)據(jù)信息進(jìn)行合法驗(yàn)證,當(dāng)?shù)谝粩?shù)據(jù)信息合法驗(yàn)證通過時(shí),根據(jù)第一數(shù)據(jù)信息和第二數(shù)據(jù)信息生成請(qǐng)求消息,并發(fā)送給遠(yuǎn)程服務(wù)器。實(shí)現(xiàn)了調(diào)用API的命令行工具不再依賴SDK包,提高命令行工具對(duì)服務(wù)的適配性。
應(yīng)理解,在本申請(qǐng)實(shí)施例中,“第一數(shù)據(jù)信息”和“第二數(shù)據(jù)信息”中的“第一”和“第二”只是為了區(qū)別用戶輸入的數(shù)據(jù)信息與從元數(shù)據(jù)文件中獲取的數(shù)據(jù)信息,并不構(gòu)成對(duì)本申請(qǐng)技術(shù)方案的限制。
通過圖2所示的系統(tǒng),還可以實(shí)現(xiàn)元數(shù)據(jù)文件的更新升級(jí),下面結(jié)合圖4所示的元數(shù)據(jù)文件更新的方法的流程圖,對(duì)本申請(qǐng)實(shí)施例的技術(shù)方案進(jìn)行詳細(xì)的說明。
圖4為本申請(qǐng)實(shí)施例提供的元數(shù)據(jù)文件更新方法的流程圖。如圖4所示,在方法400的執(zhí)行主體為圖2所示的系統(tǒng)200,該方法400包括以下步驟:
S410,解析用戶輸入的元數(shù)據(jù)文件更新請(qǐng)求。
元數(shù)據(jù)文件更新請(qǐng)求可以為用戶輸入的檢查更新的命令,用于指示系統(tǒng)確定元數(shù)據(jù)文件是否為最新版本的元數(shù)據(jù)文件。
該步驟可以由圖2所示系統(tǒng)的命令解析模塊210來實(shí)現(xiàn)。
S420,向遠(yuǎn)程服務(wù)器發(fā)送元數(shù)據(jù)文件更新請(qǐng)求,以用于遠(yuǎn)程服務(wù)器根據(jù)元數(shù)據(jù)文件更新請(qǐng)求返回第一版本信息,第一版本信息為遠(yuǎn)程服務(wù)器中元數(shù)據(jù)文件的版本信息。
第一版本信息為當(dāng)前遠(yuǎn)程服務(wù)器中元數(shù)據(jù)文件的版本信息,例如版本信息為V20250505。該步驟可以通過圖2所示系統(tǒng)中的公共連網(wǎng)模塊270來實(shí)現(xiàn),具體為命令解析模塊通過公共連網(wǎng)模塊向遠(yuǎn)程服務(wù)器發(fā)送元數(shù)據(jù)文件更新請(qǐng)求,以便于遠(yuǎn)程服務(wù)器根據(jù)元數(shù)據(jù)文件更新請(qǐng)求返回遠(yuǎn)程服務(wù)器中當(dāng)前元數(shù)據(jù)文件的版本信息。
S430,根據(jù)第一版本信息更新元數(shù)據(jù)文件。
更新的元數(shù)據(jù)文件為當(dāng)前系統(tǒng)的元數(shù)據(jù)文件。
可選地,在本申請(qǐng)實(shí)施例中,根據(jù)第一版本信息更新當(dāng)前系統(tǒng)的元數(shù)據(jù)文件可以包括:
從遠(yuǎn)程服務(wù)器下載第一版本信息相對(duì)應(yīng)的元數(shù)據(jù)文件;將第一版本信息對(duì)應(yīng)的元數(shù)據(jù)文件覆蓋第二版本信息對(duì)應(yīng)的元數(shù)據(jù)文件。
該步驟可以通過圖2所示系統(tǒng)的命令解析模塊220來實(shí)現(xiàn)。具體為,通過公共連網(wǎng)模塊從遠(yuǎn)程服務(wù)器下載第一版本信息對(duì)應(yīng)的元數(shù)據(jù)文件,并將下載的第一版本信息對(duì)應(yīng)的元數(shù)據(jù)文件覆蓋系統(tǒng)當(dāng)前的元數(shù)據(jù)文件,以實(shí)現(xiàn)元數(shù)據(jù)文件的更新或升級(jí)。
通過本申請(qǐng)實(shí)施例提供的元數(shù)據(jù)文件更新的方法或系統(tǒng),通過命令解析模塊解析用戶輸入的元數(shù)據(jù)文件更新請(qǐng)求,并向遠(yuǎn)程服務(wù)器發(fā)送元數(shù)據(jù)文件更新請(qǐng)求,以接收遠(yuǎn)程服務(wù)器返回的遠(yuǎn)程服務(wù)器的元數(shù)據(jù)文件的版本信息,并根據(jù)版本信息更新當(dāng)前系統(tǒng)的元數(shù)據(jù)文件,實(shí)現(xiàn)了元數(shù)據(jù)文件的更新或升級(jí),避免先有技術(shù)中命令行工具由于API更新,SDK包不能同步更新,造成的不能工作的問題。
可選地,在本申請(qǐng)實(shí)施例中,如圖5所示,該方法還包括:
S440,接收用戶輸入的元數(shù)據(jù)文件更新請(qǐng)求。
具體的,該步驟可以通過圖2所示系統(tǒng)中的交互模塊210來實(shí)現(xiàn)。
在本申請(qǐng)實(shí)施例中,交互模塊210還可以用來顯示遠(yuǎn)程服務(wù)器下載的第一版本信息對(duì)應(yīng)的元數(shù)據(jù)文件。
可選地,在本申請(qǐng)另一實(shí)施例中,如圖5所示,該方法還包括400還包括:
S450,根據(jù)元數(shù)據(jù)文件更新請(qǐng)求獲取第二版本信息,第二版本信息為當(dāng)前元數(shù)據(jù)文件的版本信息。
第二版本信息為當(dāng)前系統(tǒng)的元數(shù)據(jù)文件的版本信息,例如版本信息為 V20240526。該步驟可以通過圖2所示的系統(tǒng)中的命令解析模塊220來完成,命令解析模塊根據(jù)元數(shù)據(jù)文件更新請(qǐng)求從元數(shù)據(jù)描述模塊的元數(shù)據(jù)文件中獲取版本信息。
應(yīng)理解,在本申請(qǐng)實(shí)施例中,執(zhí)行S420和S450的先后順序可以互換,在本申請(qǐng)實(shí)施例中執(zhí)行S420和S450的先后順序不作任何限制。
可選地,在本申請(qǐng)實(shí)施例中,如圖5所示,所述方法400還包括:
S460,確定第二版本信息是否為第一版本信息。
在本申請(qǐng)實(shí)施例中,當(dāng)?shù)诙姹拘畔⑴c第一版本信息相同時(shí),不需要更新當(dāng)前系統(tǒng)的元數(shù)據(jù)文件。當(dāng)?shù)诙姹拘畔⑴c第一版本信息不相同時(shí),需要根據(jù)第一版本信息更新當(dāng)前系統(tǒng)的元數(shù)據(jù)文件。
該步驟可以由圖2所示系統(tǒng)中的命令解析模塊220來實(shí)現(xiàn)。
通過本申請(qǐng)實(shí)施例提供的元數(shù)據(jù)文件更新的方法或系統(tǒng),通過命令解析模塊解析用戶輸入的元數(shù)據(jù)文件更新請(qǐng)求,并向遠(yuǎn)程服務(wù)器發(fā)送元數(shù)據(jù)文件更新請(qǐng)求,以接收遠(yuǎn)程服務(wù)器返回的遠(yuǎn)程服務(wù)器的元數(shù)據(jù)文件的版本信息,并根據(jù)版本信息更新當(dāng)前系統(tǒng)的元數(shù)據(jù)文件,實(shí)現(xiàn)了元數(shù)據(jù)文件的更新或升級(jí),避免先有技術(shù)中命令行工具由于API更新,SDK包不能同步更新,造成的不能工作的問題。同時(shí)通過命令解析模塊確定當(dāng)前系統(tǒng)的元數(shù)據(jù)文件的版本信息與遠(yuǎn)程服務(wù)器元數(shù)據(jù)文件的版本信息是否一致,節(jié)省了系統(tǒng)元數(shù)據(jù)文件更新或升級(jí)的功耗,降低了系通過元數(shù)據(jù)文件更新或升級(jí)的是時(shí)間消耗。
應(yīng)理解,在本申請(qǐng)實(shí)施例中,上述各過程的序號(hào)的大小并不意味著執(zhí)行順序的先后,各過程的執(zhí)行順序應(yīng)以其功能和內(nèi)在邏輯確定,而不應(yīng)對(duì)本發(fā)明實(shí)施例的實(shí)施過程構(gòu)成任何限定。
專業(yè)人員應(yīng)該還可以進(jìn)一步意識(shí)到,結(jié)合本文中所公開的實(shí)施例描述的各示例的單元及算法步驟,能夠以電子硬件、計(jì)算機(jī)軟件或者二者的結(jié)合來實(shí)現(xiàn),為了清楚地說明硬件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來 執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計(jì)約束條件。專業(yè)技術(shù)人員可以對(duì)每個(gè)特定的應(yīng)用來使用不同方法來實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng)認(rèn)為超出本申請(qǐng)的范圍。
結(jié)合本文中所公開的實(shí)施例描述的方法或算法的步驟可以用硬件、處理器執(zhí)行的軟件模塊,或者二者的結(jié)合來實(shí)施。軟件模塊可以置于隨機(jī)存儲(chǔ)器(RAM)、內(nèi)存、只讀存儲(chǔ)器(ROM)、電可編程ROM、電可擦除可編程ROM、寄存器、硬盤、可移動(dòng)磁盤、CD-ROM、或技術(shù)領(lǐng)域內(nèi)所公知的任意其它形式的存儲(chǔ)介質(zhì)中。
以上所述的具體實(shí)施方式,對(duì)本申請(qǐng)的目的、技術(shù)方案和有益效果進(jìn)行了進(jìn)一步詳細(xì)說明,所應(yīng)理解的是,以上所述僅為本申請(qǐng)的具體實(shí)施方式而已,并不用于限定本申請(qǐng)的保護(hù)范圍,凡在本申請(qǐng)的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本申請(qǐng)的保護(hù)范圍之內(nèi)。