張志禮:API可視化調(diào)用體驗(yàn)
2016年8月27日,HDG華為開(kāi)發(fā)者匯的第五站在蘇州這座擁有2500多年悠久歷史的古城成功舉行。此次技術(shù)沙龍與之前幾站稍有不同,除了幾位來(lái)自華為的專家?guī)?lái)的精彩演講外,在最后還設(shè)置了《為何加入開(kāi)發(fā)者社區(qū)?社區(qū)大牛經(jīng)驗(yàn)談》圓桌論壇環(huán)節(jié),邀請(qǐng)了微軟軟件工程師 Colin Su 與猿生態(tài)創(chuàng)始人CEO晉劍兩位大牛一起探討。
華為開(kāi)發(fā)者社區(qū)高級(jí)工程師張志禮首次揭秘了華為API可視化調(diào)用產(chǎn)品的開(kāi)放 API的形式和調(diào)用方式,并現(xiàn)場(chǎng)演示了一個(gè)應(yīng)用程序如何可視化的調(diào)用及編排華為 API、自動(dòng)生成對(duì)應(yīng)的調(diào)用代碼及最終運(yùn)行。
華為開(kāi)發(fā)者社區(qū)高級(jí)工程師張志禮
現(xiàn)場(chǎng)實(shí)錄如下:
大家上午好,我叫張志禮,我是2006年畢業(yè),畢業(yè)之后在蘇州(01:43),我相信現(xiàn)場(chǎng)估計(jì)有一些人應(yīng)該知道,待過(guò)。我在那邊待了6年,主要是做java的開(kāi)發(fā),后來(lái)到華為,也是做java的開(kāi)發(fā)。最近我對(duì)前端技術(shù)特別感興趣,我寫(xiě)JS大概是七八年前了,那時(shí)候JS已經(jīng)作為標(biāo)準(zhǔn)加入java里面了,現(xiàn)在已經(jīng)完全不一樣了,因?yàn)榍岸税l(fā)展的空間廣,所以我真的是有非常大的愿望把前端的東西學(xué)習(xí)一下。
我想了解一下現(xiàn)場(chǎng)有多少人還在寫(xiě)代碼的,可以示意一下嗎。非常好,這么多人。我這個(gè)會(huì)技術(shù)方面一點(diǎn),希望有興趣的或者有問(wèn)題的中間可以隨時(shí)打斷我。前面我們一直在說(shuō)華為的開(kāi)放性,通過(guò)API來(lái)做,我們先看一下華為的API開(kāi)放性的主要有哪些。我這邊列的主要的,不是詳細(xì)的羅列,是主要的開(kāi)放形態(tài)。我們首先看一下當(dāng)前比較多的是Restful,我們現(xiàn)在提前端,貨幣是服務(wù)微服務(wù)化之后,我們會(huì)特別強(qiáng)調(diào)各個(gè)組建和系統(tǒng)之間的交互,通過(guò)什么交互,其實(shí)就是通過(guò)一種很多系統(tǒng)產(chǎn)生Restful接口的形式,所以Restful接口現(xiàn)在是非常多的開(kāi)放形式。再一個(gè)是SOPA接口,我相信很多人也看到過(guò),會(huì)看到一些SOPA排名榜,我一開(kāi)始看到這個(gè)東西的時(shí)候是什么東西,看都看不到。后來(lái)我們?cè)敿?xì)了解SOPA協(xié)議之后就知道是做的接口交互的東西?,F(xiàn)在SOPA接口用的相對(duì)來(lái)說(shuō)少了,趨勢(shì)是用的越來(lái)越少了。這兩種是協(xié)議性的東西,換句話說(shuō)我要調(diào)用華為這些接口,就要考慮在系統(tǒng)中根據(jù)這些接口的定義,來(lái)實(shí)現(xiàn)客戶端,來(lái)調(diào)用這些接口。下面這種SDK包,這種是我們做了更多的構(gòu)成,方便開(kāi)發(fā)者,我們把這些協(xié)議的東西實(shí)現(xiàn),通過(guò)不同的語(yǔ)言實(shí)現(xiàn),提供SDK包,你直接把SDK包引用到里面就可以調(diào)用API了。舉個(gè)例子,用C向語(yǔ)言來(lái)說(shuō),我們會(huì)發(fā)布C向語(yǔ)言包,我們會(huì)提供DAL庫(kù),你在工具里面下載我們的SDK包之后,這個(gè)DAL庫(kù)原則上是怎么樣,直接可以引用到API。而不需要關(guān)心每個(gè)接口的細(xì)節(jié),比如說(shuō)到B接口,你只需要用我們的密碼,而不需要關(guān)注它是用哪種形式,這個(gè)就是可以帶來(lái)開(kāi)發(fā)效率的提升。
我們所有這些業(yè)務(wù)的提供,產(chǎn)品的提供,提供這些API接口,大家都有看到,如果大家對(duì)每個(gè)生態(tài)圈里面的每個(gè)接口,每個(gè)業(yè)務(wù)的接口比較感興趣,可以點(diǎn)出來(lái)看。剛才有同學(xué)說(shuō)他比較感興趣大數(shù)據(jù)和云計(jì)算,這個(gè)我們可以看云計(jì)算這一塊的東西,提供了更多的支持。
這個(gè)是我今天要講的可視化,API這個(gè)東西我們傳統(tǒng)的都是要么去現(xiàn)場(chǎng),要么通過(guò)DL數(shù)據(jù)去引用。我們今天提出一個(gè)新的概念叫可視化,這個(gè)可視化我要強(qiáng)調(diào)一下它的目的,可能不是用于實(shí)際的項(xiàng)目開(kāi)發(fā),它的主要產(chǎn)品是幫大家來(lái)快速了解這個(gè)東西,這個(gè)API是什么意思,是個(gè)什么東西,通過(guò)這個(gè)東西,可視化的東西快速的幫你了解我們接口的意義,這就是我們可視化調(diào)研的目的。
先看一下可視化,可視化的東西主要核心的是強(qiáng)調(diào)用圖形化的東西影像,或者一個(gè)什么東西來(lái)傳達(dá)一個(gè)消息,傳達(dá)一個(gè)信息。這個(gè)信息就是我們需要花時(shí)間去理解,但是通過(guò)這個(gè)東西能快速的幫助我們了解這個(gè)東西,這就是可視化的目的和含義。這邊舉一個(gè)簡(jiǎn)單的例子,當(dāng)初很早的時(shí)候我們都是用計(jì)算機(jī),那時(shí)候計(jì)算機(jī)還不是很普及的時(shí)候,都是很黑底百字,黑底的DOS窗口。
我們?nèi)A為這邊開(kāi)發(fā)者為什么要做可視化的東西,我剛才提到可視化就是幫大家快速的了解產(chǎn)品,我們的API是怎樣的,怎么調(diào)用,這就是我們做的可視化的目的,就是希望這個(gè)東西快速幫助大家了解華為的產(chǎn)品,它的調(diào)用結(jié)果,它有什么作用。下面看一下可視化產(chǎn)品是什么樣的,我們現(xiàn)在在做的東西是結(jié)合了華為的視頻監(jiān)控的產(chǎn)品來(lái)做的,視頻監(jiān)控,現(xiàn)在百度上基本上每個(gè)接口都會(huì)有一張屏,這種智能化的設(shè)備,監(jiān)控視頻的方式,使得蘇州的犯罪率,不叫犯罪率統(tǒng)計(jì),我不知道有多少人記得,估計(jì)在10年多之前,蘇州邊遠(yuǎn)地方街上搶包的是很多的,現(xiàn)在基本上很難見(jiàn)到了。因?yàn)楝F(xiàn)在街上到處都是攝像頭,我們可以根據(jù)智能的東西,很快能定位到他去什么地方,為破案帶來(lái)相當(dāng)大的幫助,視頻監(jiān)控會(huì)有這樣的作用。如果你想了解這個(gè)東西,有些API我們提供了開(kāi)放的接口,來(lái)調(diào)用這些視頻。
我們現(xiàn)在來(lái)看一下調(diào)用情況,這里我延伸一下。下面切到很多人比較熟悉的界面,運(yùn)營(yíng)出來(lái)的是這樣的,我讓它運(yùn)營(yíng)起來(lái),跑起來(lái),給大家看一下這是什么東西。我們可視化這邊,左邊我把可視化呈現(xiàn)的效果放在這里,右邊我會(huì)把一些每個(gè)API可以看得到的東西,如果你想要調(diào)這個(gè)API,要做的事情很簡(jiǎn)單。比如我們要調(diào)某個(gè)API,肯定會(huì)有一系列的組合邏輯。第一步有可能就是你要初始化這個(gè)軟件,也就是說(shuō)我們要調(diào)用初始化的接口。點(diǎn)了這個(gè)以后,你可以拖一下,拖到這邊來(lái),這個(gè)接口就會(huì)出現(xiàn)。拖上來(lái)之后,這樣自然會(huì)想到釋放這個(gè)拖到這邊。因?yàn)槟阋{(diào)用服務(wù)器的資源,下一你要登錄,我們把登錄窗口拖到這邊。登錄的時(shí)候會(huì)有一些服務(wù)器的信息,包括通信的IP地址,或者通信通常會(huì)有一個(gè)協(xié)議端口,我們會(huì)把端口放在這邊,還有常用的密碼,不同的接口有不同的形式,通過(guò)這些信息就可以完成登錄的工作。下一個(gè)登錄的時(shí)候,最后會(huì)出來(lái),寫(xiě)出來(lái)的時(shí)候我先把接口接好了,不然的話我放上之后還要再回過(guò)來(lái)。
下面我們要看視頻了,要看畫(huà)面,就是把看視頻的放在這邊。瀏覽的時(shí)候還有一個(gè)參數(shù),因?yàn)橛泻芏嗟臄z像頭。瀏覽完之后,我們可能需要調(diào)整,就是你可能看著看著,根據(jù)現(xiàn)場(chǎng)某些場(chǎng)景,你要做調(diào)整。大家如果看不出來(lái),我放一下小的視頻給大家看一下效果。這個(gè)效果出來(lái)了,我們就可以看到視頻在播放,現(xiàn)在執(zhí)行的是瀏覽,這邊是停止。這就是完整的通過(guò)API拖拽的方式,來(lái)體現(xiàn)API到底是一個(gè)什么樣的動(dòng)作,可以幫助我們來(lái)了解情況。這個(gè)攝像頭是轉(zhuǎn)的,上下左右轉(zhuǎn)的,這些都是控制攝像頭的轉(zhuǎn)動(dòng)。當(dāng)然這個(gè)東西你要個(gè)控制它,肯定要有很多的經(jīng)驗(yàn),有可能是匯報(bào)錯(cuò)誤,當(dāng)然也有可能是不報(bào),但是你看不到效果。
我們可以讓它做一個(gè)攝像頭轉(zhuǎn)動(dòng)工作,如果不停的轉(zhuǎn)動(dòng)會(huì)一直轉(zhuǎn)動(dòng)。這個(gè)地方因?yàn)槟悴恢朗裁辞闆r,它跟著一直在轉(zhuǎn),挺累的。我們下面再看一下,現(xiàn)在是往左轉(zhuǎn),這是一個(gè)左轉(zhuǎn)的。其實(shí)我們還可以做一個(gè)更嚴(yán)密的事情,我剛才只用到了這里面,就是本身的API。但是可視化的東西是一個(gè)編程的概念,我們基本用到的循環(huán)、函數(shù),在這里面都可以用得到。這時(shí)候我們可以做一個(gè)動(dòng)作,我可以做一個(gè)復(fù)循環(huán),可以重復(fù)來(lái)控制機(jī)器,循環(huán)一下。這個(gè)時(shí)候兩個(gè)事情要做的,我們可以讓他住的更遠(yuǎn)一點(diǎn),他走了之后他又轉(zhuǎn),這樣會(huì)更有意思一點(diǎn),我們略微加一個(gè)組合,讓它右轉(zhuǎn)。這個(gè)時(shí)候開(kāi)始左轉(zhuǎn),這個(gè)時(shí)候開(kāi)始右轉(zhuǎn)。我們可以想到這個(gè)動(dòng)作有可能有很多地方有問(wèn)題,如果形象一點(diǎn)的講,這個(gè)擺頭搖頭的動(dòng),我們根據(jù)通常的規(guī)則,最佳實(shí)踐的時(shí)候會(huì)把它抽象出來(lái),會(huì)成為一個(gè)方型的函數(shù)或者方法,這個(gè)一定是支持的,我們可以把這個(gè)做出來(lái),把這個(gè)當(dāng)成一個(gè)函數(shù)。我把這些擺動(dòng)的放到一個(gè)函數(shù)里面去,我把它命名一下。
這個(gè)時(shí)候定義了這個(gè)函數(shù)之后,函數(shù)里面的東西我們就可以定義了,我們?cè)賮?lái)看一下,應(yīng)該是跟剛才一樣的效果。它已經(jīng)在動(dòng)了,但是由于網(wǎng)絡(luò)的原因效果不明顯,卡的有點(diǎn)嚴(yán)重。如果網(wǎng)絡(luò)流暢的話,大家可以感受到通過(guò)這個(gè)東西,改變這些組合,來(lái)改變接口。同時(shí)可以利用函數(shù)來(lái)做這個(gè)東西。我們作為資深級(jí)研究的話沒(méi)有問(wèn)題,如果剛開(kāi)始關(guān)注,對(duì)于我們的系統(tǒng)還沒(méi)有了解。但是如果你家里有一個(gè)小孩,或者是培訓(xùn)機(jī)構(gòu),大家可以拖一拖。
我們?cè)倏匆幌?,這些接口來(lái)說(shuō)不知道是什么意思,你如果點(diǎn)右鍵,我們會(huì)有一個(gè)幫助,我們這些接口都是在線化的,就是關(guān)于我們?cè)诰€網(wǎng)站的東西,你可以看到接口的功能。我現(xiàn)在看到的這個(gè)版本或比較老,我們最近新的版本馬上上線,會(huì)做一些說(shuō)明,對(duì)于系統(tǒng)的東西大家后面可以看一下。在這里通過(guò)幫助可以看得到。還有這些服務(wù)器的端口號(hào),這是一個(gè)變量,這個(gè)時(shí)候我就要看剛剛大家提到的一個(gè)概念,華為提供了一個(gè)遠(yuǎn)程實(shí)驗(yàn)室,我們把華為的一些產(chǎn)品設(shè)備,放在遠(yuǎn)程實(shí)驗(yàn)室里面,布好了環(huán)境,開(kāi)發(fā)者在開(kāi)發(fā)的時(shí)候沒(méi)有環(huán)境,或者做項(xiàng)目設(shè)備還沒(méi)有到位,這個(gè)時(shí)候我們就可以借助遠(yuǎn)程實(shí)驗(yàn)室來(lái)進(jìn)行調(diào)測(cè)。這個(gè)東西怎么過(guò)去的呢?剛才視頻里面主要說(shuō)的就是遠(yuǎn)程實(shí)驗(yàn)室,一個(gè)帥哥通過(guò)遠(yuǎn)程實(shí)驗(yàn)室,很快的可以教他了。當(dāng)然這個(gè)是我們?nèi)A為的說(shuō)法,這個(gè)東西從現(xiàn)實(shí)來(lái)說(shuō),能快速的幫助我們了解這些東西。我們可以看一下,這個(gè)東西怎么做,怎么樣去獲取這些環(huán)境信息。
大家看一下這個(gè)地方,developer·huawei·com/cn 是我們?nèi)A為開(kāi)發(fā)者社區(qū)官網(wǎng)地址。進(jìn)來(lái)之后第一個(gè)就提到了我們API開(kāi)放,環(huán)境開(kāi)放里面大家可以看一下,就是不同的領(lǐng)域,有你關(guān)心的領(lǐng)域可以點(diǎn)進(jìn)去看看,或者你感興趣的這些文檔都在那里,這是開(kāi)放者里面?,F(xiàn)在我回到遠(yuǎn)程實(shí)驗(yàn)室里面,我剛才說(shuō)的是遠(yuǎn)程實(shí)驗(yàn)室。點(diǎn)進(jìn)去,在這里我們可以看到遠(yuǎn)程實(shí)驗(yàn)室。這個(gè)時(shí)候你要進(jìn)入實(shí)驗(yàn)室,如果你還不是我們?nèi)A為開(kāi)發(fā)者的時(shí)候,因?yàn)檫@個(gè)是需要登錄的,為什么需要登錄呢,這個(gè)東西不是誰(shuí)都可以用的,因?yàn)槲覀兪窃谧鲆粋€(gè)管控,因?yàn)槲覀冃枰勒l(shuí)在用這個(gè)東西,可能會(huì)通過(guò)他們的反饋改進(jìn)我們的服務(wù)。而且如果不做控制的話,從安全方面來(lái)講也是完全不靠譜的事情,會(huì)被人家曝光的。如果是第一次用戶,可能需要麻煩大家注冊(cè)一下,注冊(cè)成為我們開(kāi)發(fā)者社區(qū)的會(huì)員。
注冊(cè)成功之后要登錄,登錄之后就可以來(lái)到這個(gè)平臺(tái)。這個(gè)頁(yè)面里面展示的是我們現(xiàn)在目前華為向開(kāi)發(fā)者提供了什么環(huán)境信息,剛才用的就是監(jiān)控的信息,在這里。右側(cè)這邊是有分類(lèi)的,我直接就跳到這里了。你進(jìn)來(lái)之后可以看到一個(gè)含量信息,在這邊直接可以點(diǎn)擊。我們的資源供給是有限的,所以需要大家來(lái)預(yù)約一下,你需要什么時(shí)段來(lái)用這個(gè)資源來(lái)調(diào)測(cè)你的程序,你提前需要預(yù)約一下。這個(gè)網(wǎng)絡(luò)有點(diǎn)不行,(26:13),出來(lái)之后你可以選擇用個(gè)什么方向的東西,用多長(zhǎng)時(shí)間。預(yù)約之后,我們的系統(tǒng)會(huì)到你的郵箱里面告訴你,你會(huì)拿到我們整個(gè)環(huán)境的用戶名密碼,這個(gè)用戶名密碼是幫助你接入遠(yuǎn)程實(shí)驗(yàn)室的,遠(yuǎn)程實(shí)驗(yàn)室環(huán)境的信息是在這邊,這邊是環(huán)境里面設(shè)備的IP,設(shè)備的斷口號(hào),這邊有教你怎么通過(guò)OTT接入信息,這就是我們遠(yuǎn)程實(shí)驗(yàn)室的基本情況。
作為開(kāi)發(fā)者,我們要保持一顆好奇的信,這個(gè)東西雖然看起來(lái)挺有意思,但是我們一定會(huì)好奇這個(gè)東西怎么做的,這個(gè)東西是怎么實(shí)現(xiàn)的。我跟大家講一下它主要的一些實(shí)現(xiàn)步驟,剛才我們看到的是產(chǎn)生這個(gè)頁(yè)面。剛才看到的我們是基于整個(gè)的架構(gòu),基于java體系的,雖然現(xiàn)在這個(gè)東西已經(jīng)漸漸出局,被取代了,但是因?yàn)檫@個(gè)業(yè)務(wù)的需要,我還是要用了它。最外面的是Swing,大家都知道Swing不依賴操作系統(tǒng)任何東西,它是輕的。但是我們看4.0的東西,又是一個(gè)重的東西,重的東西java里面不得不用SWDE,SWDE真正的意見(jiàn)是調(diào)用操作系統(tǒng)的。所以那些東西稱之為重的方式。
最早java是不擅長(zhǎng)做這些視頻的輸出、解碼這些東西,它真正的解碼、傳輸其實(shí)用的是我們視頻傳送業(yè)務(wù)的C++的SDK包,基于那些東西,我們通過(guò)打包的方式給java調(diào)用。那是左邊的。右邊整個(gè)大的一塊是javaFX,我不知道有多少人了解javaFX,java還沒(méi)有被甲骨文收購(gòu)之前,已經(jīng)在做這個(gè)項(xiàng)目了。當(dāng)時(shí)就是因?yàn)樗麄冇X(jué)得Swing不能有好的、大的突破,老是效果不太好,于是他們又開(kāi)發(fā)了FX這個(gè)項(xiàng)目。這個(gè)項(xiàng)目的目的不光說(shuō)不是取代的,但實(shí)際上它就是用來(lái)取代Swing的。
這里為什么會(huì)提的用javaFX,因?yàn)閖avaFX里面有一個(gè)軟件談了web引擎,這個(gè)web引擎目前它支持H5的特性。為什么要支持H5,是因?yàn)槲覀冞@一塊其實(shí)是web的東西,這個(gè)東西是通過(guò)這些來(lái)受限的,GS,H5受限。
右邊這個(gè)是一個(gè)純的可視頁(yè)面,我點(diǎn)起來(lái)的為什么左邊的java的東西和C++的東西能夠動(dòng)起來(lái),它能反饋到那邊。就是因?yàn)閣eb引擎,它是支持GS和java之間的關(guān)聯(lián)互動(dòng),這是其中的一個(gè)原因。反過(guò)來(lái)GS能調(diào)到j(luò)ava,java也能調(diào)到GS,這個(gè)就形成了GS和java之間的和諧調(diào)度。這就是現(xiàn)在形成的整個(gè)的思路。
下面還有一類(lèi),我們也是剛剛開(kāi)始嘗試做這個(gè)東西,看能不能幫助開(kāi)發(fā)者快速的了解我們的一些業(yè)務(wù)接口。這些東西大家看我們的界面就可以知道。剛才前面講到US的內(nèi)容還有一定的差距,這是我們要努力的方向。另外我們希望能夠得到真正使用者,在座的各位如果能用到,希望能夠提供什么東西,也希望大家提些意見(jiàn),有什么東西有什么想法,有什么可以交流的,我希望大家可以提些意見(jiàn)。不提問(wèn)也沒(méi)什么關(guān)系,我們可以私下交流。這個(gè)東西有一個(gè)小的調(diào)研,小的編程的人士。
我就講到這里,下面大家有沒(méi)有一些問(wèn)題可以交流。