一種RESTful API可視化方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及服務(wù)計(jì)算領(lǐng)域,服務(wù)組合基于RESTful架構(gòu)的技術(shù)領(lǐng)域,具體涉及一種RESTful API可視化方法。
【背景技術(shù)】
[0002]現(xiàn)有很多對(duì)外提供服務(wù)的網(wǎng)站,如百度API store、聚合數(shù)據(jù)、API Cloud、leanCloud等等,這些服務(wù)提供商的網(wǎng)站都是基于RESTful架構(gòu)。從Web開(kāi)發(fā)技術(shù)的發(fā)展過(guò)程來(lái)看,Web從最初的主要支持靜態(tài)頁(yè)面,到后來(lái)越來(lái)越支持動(dòng)態(tài)頁(yè)面。靜態(tài)頁(yè)面為主典型代表有門(mén)戶網(wǎng)站、電子商務(wù)網(wǎng)站、搜索引擎、社交網(wǎng)站,到后來(lái)交互性強(qiáng)的多人在線的網(wǎng)頁(yè)游戲。Rest是Roy Fielding在他2000年的博士學(xué)位論文中提出的一種新的網(wǎng)站架構(gòu)。REST本意是“Representat1nal State Transfer”,意思是表述性轉(zhuǎn)移的縮寫(xiě)。所有網(wǎng)站符合REST設(shè)計(jì)風(fēng)格都稱為RESTful。分布式應(yīng)用架構(gòu)是REST非常成功的例子。
[0003]REST風(fēng)格中有以下六個(gè)關(guān)鍵詞:
1.資源(Resource)
資源是一種對(duì)服務(wù)器抽象的概念。將服務(wù)器看成由很多離散的資源組成,每個(gè)資源是服務(wù)器上一個(gè)可命名的抽象概念。一個(gè)資源可以由特定url來(lái)表示,客戶端可以通過(guò)url來(lái)訪問(wèn)對(duì)應(yīng)資源。
[0004]2.資源表述
資源表述表示某個(gè)資源某段時(shí)間內(nèi)的狀態(tài)表述。主要用于服務(wù)器和客戶端進(jìn)行數(shù)據(jù)交換。資源的表述可以有多種方式,以下幾個(gè)比較常見(jiàn)的,如HTML/XML/JS0N/TXT/PNG等等。
[0005]3.狀態(tài)轉(zhuǎn)移
指客戶端與服務(wù)器端之間轉(zhuǎn)移代表資源狀態(tài)表述??蛻舳艘訦TTP方式請(qǐng)求服務(wù)器上的資源,對(duì)資源進(jìn)行操作,比如添加資源、修改資源、刪除資源。
[0006]4.統(tǒng)一接口
客戶端通過(guò)HTTP協(xié)議來(lái)訪問(wèn)服務(wù)器。正好HTTP的幾個(gè)方法對(duì)應(yīng)服務(wù)器資源的操作,GET方法表示獲取資源,POST方法表示新建資源,DELETE方法表示刪除資源,PUT表示更新資源。
[0007]5.超文本驅(qū)動(dòng)
超文本驅(qū)動(dòng)的全稱為“將超媒體作為應(yīng)用狀態(tài)的引擎”。將Web應(yīng)用看成一個(gè)很多狀態(tài)組成的狀態(tài)機(jī)。在應(yīng)用中,不僅包含資源,還包含對(duì)資源操作的狀態(tài)轉(zhuǎn)移語(yǔ)義。
[0008]基于RESTful架構(gòu)的網(wǎng)站,其對(duì)外提供的服務(wù),可以統(tǒng)稱為RESTful API。下文出現(xiàn)API都是指的RESTful API o RESTful架構(gòu)通常是,客戶端以HTTP或HTTPS方式對(duì)服務(wù)器發(fā)起請(qǐng)求,服務(wù)器返回?cái)?shù)據(jù)格式一般是JS0N類型。開(kāi)發(fā)者通過(guò)閱讀相關(guān)的文檔來(lái)使用API。但是每個(gè)服務(wù)提供商的API文檔格式千奇百怪,有些文檔并不夠完善。甚至有時(shí)候API已經(jīng)改變了,但沒(méi)有及時(shí)更新文檔也是常見(jiàn)問(wèn)題。文檔作為開(kāi)發(fā)者唯一交流方式有很多弊端,并且不夠直觀易懂。
【發(fā)明內(nèi)容】
[0009]針對(duì)上述的遇到的問(wèn)題,本發(fā)明了一種RESTful API可視化方法,使API更加直觀并且易懂。本發(fā)明基于API調(diào)用實(shí)例的返回?cái)?shù)據(jù),可視化展示API。
[0010]具體的,本發(fā)明的采用了如下技術(shù)方案:
一種RESTful API可視化方法,基于API調(diào)用實(shí)例的返回?cái)?shù)據(jù),可視化展示API,具體包括如下步驟:
1、分析API的輸入結(jié)構(gòu)和具體用途,構(gòu)造輸入用例;
2、執(zhí)行步驟1中所述輸入用例,得到返回?cái)?shù)據(jù),所述返回?cái)?shù)據(jù)包括如下兩類:
a.服務(wù)器返回有效數(shù)據(jù);
b.服務(wù)器返回?zé)o效數(shù)據(jù);
3、若步驟2中返回的是無(wú)效數(shù)據(jù),提示返回?zé)o效數(shù)據(jù);若返回的是有效數(shù)據(jù),則解析有效數(shù)據(jù),將其轉(zhuǎn)化為模型數(shù)據(jù);
4、使用自動(dòng)布局算法,將所述模型數(shù)據(jù)按照算法可視化展現(xiàn)。
[0011]優(yōu)選的,所述步驟1中構(gòu)造輸入用例具體包括如下步驟:
1.1根據(jù)需求,設(shè)計(jì)API節(jié)點(diǎn)基本信息;
1.2根據(jù)所述API節(jié)點(diǎn)基本信息,設(shè)計(jì)API輸入結(jié)構(gòu);
1.3根據(jù)所述API輸入結(jié)構(gòu),構(gòu)造合理的輸入用例。
[0012]優(yōu)選的,所述步驟4具體包括如下步驟:
4.1定義ApiModel數(shù)據(jù)模型,用于描述API的功能用途及其它基本信息;
定義InputModel數(shù)據(jù)模型,用于表示API的輸入結(jié)構(gòu)根節(jié)點(diǎn);
定義OutputModel數(shù)據(jù)模型,用于表示API的輸出結(jié)構(gòu)根節(jié)點(diǎn);
4.2將所述InputModel、ApiModel、OutputModel按照從左到右的順序,即橫坐標(biāo)從小變大,但縱坐標(biāo)相等的順序擺放;
4.3遞歸生成InputModel子樹(shù)所有子模型坐標(biāo);從右向左順序擺放元素,每個(gè)子節(jié)點(diǎn)與父節(jié)點(diǎn)的坐標(biāo)差值為常量(_dx, dy);
4.4遞歸生成OutputModel子樹(shù)所有子模型坐標(biāo);從左到右順序擺放元素,每個(gè)子節(jié)點(diǎn)與父節(jié)點(diǎn)坐標(biāo)差值為常量(dx, dy)。
[0013]本發(fā)明的有益技術(shù)效果在于:
(1)直觀地將API的內(nèi)部數(shù)據(jù)結(jié)構(gòu)展現(xiàn)出來(lái),利于開(kāi)發(fā)者快速讀懂API。比閱讀API文檔,更加的快速和直觀。
[0014](2)只需要人工設(shè)計(jì)API的輸入結(jié)構(gòu)和輸入數(shù)據(jù)示例,即可獲得API的輸出。一般API的輸出結(jié)構(gòu)比較復(fù)雜,該方法可以減少手動(dòng)設(shè)計(jì)API的工作量。
[0015](3)可視化展現(xiàn)API結(jié)構(gòu),人工輔助給每個(gè)節(jié)點(diǎn),添加一些描述信息,最后可以自動(dòng)生成統(tǒng)一格式的文檔。
【附圖說(shuō)明】
[0016]圖1為本發(fā)明一個(gè)實(shí)施例的實(shí)現(xiàn)框架示意圖;
圖2為本發(fā)明一個(gè)實(shí)施例火車票到站查詢的示例圖。
[0017]
【具體實(shí)施方式】
[0018]為了更加具體描述本發(fā)明,下面結(jié)合附圖及【具體實(shí)施方式】對(duì)本發(fā)明的技術(shù)方案詳細(xì)說(shuō)明。
[0019]為了可視化的圖形顯示API結(jié)構(gòu),本發(fā)明定義了一種資源模型,即將整個(gè)API看成一個(gè)樹(shù)狀結(jié)構(gòu),節(jié)點(diǎn)表示數(shù)據(jù)字段(字段對(duì)應(yīng)值對(duì)類型的數(shù)據(jù)),而連線表示字段之間的包含關(guān)系,如果節(jié)點(diǎn)有子節(jié)點(diǎn),那么子節(jié)點(diǎn)表示的數(shù)據(jù)字段為父節(jié)點(diǎn)的內(nèi)部字段。API節(jié)點(diǎn)表示根節(jié)點(diǎn),其子節(jié)點(diǎn)有輸入和輸出。
[0020]本發(fā)明的一種RESTful API可視化方法,包括如下步驟:
(1)分析API的輸入結(jié)構(gòu)和用途,構(gòu)造合理的輸入用例;
(2)執(zhí)行(1)輸入用例,獲得返回?cái)?shù)據(jù),返回?cái)?shù)據(jù)分兩類: i服務(wù)器返回正常的有效數(shù)據(jù);
ii服務(wù)未返回有效的數(shù)據(jù);
(3)若返回的是有效數(shù)據(jù),則解析(2)返回?cái)?shù)據(jù),將其轉(zhuǎn)化為模型數(shù)據(jù);若返回的是無(wú)效數(shù)據(jù),則提示返回?zé)o效數(shù)據(jù)
在本發(fā)明的一個(gè)實(shí)施例中,為了實(shí)現(xiàn)上述步驟⑵中,將JS0N數(shù)據(jù)對(duì)應(yīng)成內(nèi)存中的模型數(shù)據(jù),本實(shí)施例定義了 KeyValueMode 1來(lái)對(duì)應(yīng)JS0N的值對(duì),定義了連線模型LineConnect1nModel表示JS0N字段的內(nèi)部字段包含關(guān)系。定義了 ApiModel模型數(shù)據(jù),用來(lái)描述API的功能用途等基本信息,InputModel數(shù)據(jù)模型表示API的輸入結(jié)構(gòu)根節(jié)點(diǎn),OutputModel數(shù)據(jù)模型表示API的輸出結(jié)構(gòu)根節(jié)點(diǎn),連線模型用于表示模型數(shù)據(jù)節(jié)點(diǎn)之間的包含關(guān)系。本文使用了 MVC設(shè)計(jì)模式,可以直接模型Model映射成視圖View,通過(guò)控制器Controller來(lái)管理Model與View之間的聯(lián)系。當(dāng)用戶操作視圖時(shí),Controller可以將用戶輸入數(shù)據(jù)轉(zhuǎn)化為對(duì)應(yīng)的模型數(shù)據(jù)。當(dāng)模型改變時(shí),Controller將響應(yīng)模型對(duì)應(yīng)視圖View的變化。
[0021]上述步驟(2)中,對(duì)返回結(jié)果1的處理具體過(guò)程如下:
以下方法使用到第三方JS0N解析開(kāi)源工具JSON-lib。將整個(gè)JS0N的作為一個(gè)輸出的根節(jié)點(diǎn),使用迭代器方法深度優(yōu)先遍歷整個(gè)JS0N數(shù)據(jù)結(jié)構(gòu)。假設(shè)當(dāng)前迭代器指向的