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