bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

API的實現(xiàn)方法是什么

這篇文章主要介紹“API的實現(xiàn)方法是什么”的相關(guān)知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“API的實現(xiàn)方法是什么”文章能幫助大家解決問題。

創(chuàng)新互聯(lián)長期為成百上千家客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為科爾沁右翼中企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、網(wǎng)站設(shè)計科爾沁右翼中網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。

1 對外接口的設(shè)計準則

SDK對外提供接口設(shè)計的基本原則是易用,易懂,易擴展,易監(jiān)控。展開來可歸納為以下幾個特性:

  1. API按照業(yè)務(wù)功能分類,但所有業(yè)務(wù)具有統(tǒng)一的調(diào)用風格。

  2. API不包含方法實現(xiàn),接口的實現(xiàn)對調(diào)用者隱藏。

  3. API調(diào)用可跟蹤。

在功能形式上,SDK需要提供以下類型的API:

  1. 功能接口:主動調(diào)用使用其提供的功能

    1. 同步接口:在調(diào)用線程完成函數(shù)調(diào)用,并立即返回結(jié)果。

    2. 普通異步接口:在后臺線程完成函數(shù)調(diào)用,可以添加回調(diào)函數(shù)。

    3. 可中斷異步接口:在后臺線程完成函數(shù)調(diào)用,可以添加回調(diào)函數(shù),可以中斷調(diào)用。

  2. 回調(diào)接口:監(jiān)聽數(shù)據(jù)和狀態(tài)改變。

2 業(yè)務(wù)的分類

SDK包含多種業(yè)務(wù),一部分是基礎(chǔ)業(yè)務(wù),另一部分是可選業(yè)務(wù)。比如用戶認證服務(wù)、群服務(wù)等是基礎(chǔ)業(yè)務(wù);超大群服務(wù)、第三方推送服務(wù)等是可選業(yè)務(wù)。另外,不同的業(yè)務(wù)之間難免有相似的功能,如群服務(wù)和超大群服務(wù)中,都有添加群成員,拉取群消息等功能。因此,需要將不同的業(yè)務(wù)進行隔離,一方面方便業(yè)務(wù)功能的擴展與調(diào)整,另一方面方便函數(shù)的命名與用戶的理解。

同一個業(yè)務(wù)下有多個API,按照調(diào)用的主動性,分為回調(diào)接口和功能接口,分別放在與業(yè)務(wù)一一對應的接口類Observer和Service中。例如:用戶認證服務(wù)下的所有回調(diào)接口和功能接口都位于AuthServiceObserver和AuthService中。其中由用戶主動調(diào)用來實現(xiàn)功能的功能接口在AuthService中,如登錄、登出等;而用于注冊回調(diào)的回調(diào)接口都在AuthServiceObserver中,如監(jiān)聽在線狀態(tài)、監(jiān)聽數(shù)據(jù)同步等。

每個Service中的功能接口根據(jù)執(zhí)行的性質(zhì)又分為三種,同步接口、普通異步接口和可中斷異步接口。其中同步接口在調(diào)用線程立即執(zhí)行;異步接口在后臺線程執(zhí)行,在調(diào)用線程返回可設(shè)置回調(diào)的InvocationFuture類型,最終結(jié)果在主線程回調(diào);可中斷異步接口和普通異步接口相似,但是返回的是繼承自InvocationFuture的AbortableFuture類型,支持中斷操作,用戶可以通過主動調(diào)用來中斷功能接口的執(zhí)行。接口調(diào)用的線程切換流程如圖2.1所示,業(yè)務(wù)功能和接口的分類如圖2.2所示。

API的實現(xiàn)方法是什么

圖 2.1 接口調(diào)用的線程切換流程

API的實現(xiàn)方法是什么

圖 2.2 業(yè)務(wù)功能和接口的分類

3 API的實現(xiàn)

3.1 API的實現(xiàn)方式

為了實現(xiàn)這些目標,并考慮到實現(xiàn)簡單,我們選用Java的動態(tài)代理類模型。外部調(diào)用者調(diào)用API時,得到一個動態(tài)代理(Proxy)對象,通過Proxy對象,將功能接口的調(diào)用全部轉(zhuǎn)接到一個實現(xiàn)了InvocationHandler 接口的類ProxyHandler上。再根據(jù)調(diào)用方法,執(zhí)行注冊/注銷回調(diào)或者將調(diào)用請求分派到真正的實現(xiàn)類上,最后根據(jù)接口的返回類型進行返回或回調(diào),如圖3.1所示。

API的實現(xiàn)方法是什么

圖 3.1 功能調(diào)用流程

和用戶服務(wù)的接口類AuthService和AuthServiceObserver一樣,SDK也為其他的所有業(yè)務(wù)定義了接口類。所有接口類和實現(xiàn)類呈一一對應關(guān)系,可以方便地找到API對應的實現(xiàn)。

3.2 獲取Proxy對象的方法

SDK對外提供了靜態(tài)方法NimClient.getService(Class<T> clazz)來獲取業(yè)務(wù)接口類對應的動態(tài)代理類。參數(shù)填入對應的接口類即可。例如:獲取用戶認證服務(wù)的接口類的方式為NimClient.getService(AuthService.class),獲取用戶認證服務(wù)觀察者的接口類的方式為NimClient.getService(AuthServiceObserver.class)。

    NimClient.getService方法同步返回一個Proxy對象。該對象的構(gòu)造方式為懶加載,業(yè)務(wù)被調(diào)用的時候才構(gòu)造對應實例。如圖3.2所示。

API的實現(xiàn)方法是什么

圖 3.2 獲取業(yè)務(wù)Proxy對象流程

    生成Proxy對象基于Proxy.newProxyInstance方法,所有生成的Proxy對象都由專門的容器類來管理。以用戶認證服務(wù)為例,第一次調(diào)用NimClient.getService(AuthService.class)獲取用戶認證服務(wù)的Proxy對象時,容器理類創(chuàng)建一個對應的Proxy對象并緩存。之后再次獲取用戶認證服務(wù)Proxy對象時,容器類將緩存直接返回。

3.3 事務(wù)跟蹤類

    invoke函數(shù)中有一個重要的事務(wù)跟蹤類(Transaction),它記錄了方法的同步異步屬性、方法體和返回值要求等。Transaction對象和他的實現(xiàn)方法是一一對應的。每次執(zhí)行invoke方法,都會創(chuàng)建一個Transaction實例,并傳輸?shù)秸嬲膱?zhí)行點去執(zhí)行

       執(zhí)行完畢后,invoke方法根據(jù)同步異步特性以及返回值,來確定功能函數(shù)的返回結(jié)果。如果是同步函數(shù),則直接返回結(jié)果;如果是異步函數(shù),則根據(jù)業(yè)務(wù)需求返回InvocationFuture或者AbortableFuture。

3.4 API的執(zhí)行方式

NimClient.getService返回的是動態(tài)代理類ProxyHandler ,它實現(xiàn)了InvocationHandler接口的 Object invoke(Object who, Method method, Object[] args)方法,用于代理所有功能接口。

API執(zhí)行方式,即ProxyHandler對invoke方法的實現(xiàn)方式,其大體步驟是加載事務(wù)、初始化判斷、執(zhí)行事務(wù)和返回,如圖3.3所示。

API的實現(xiàn)方法是什么

圖 3.3 代理執(zhí)行的簡要流程

執(zhí)行事務(wù)這一環(huán)節(jié)還可以細分為回調(diào)接口的執(zhí)行和功能接口的執(zhí)行,如果是執(zhí)行回調(diào)接口,則判斷是否需要回調(diào)當前狀態(tài),如果是,則立即回調(diào)。

Transaction的執(zhí)行函數(shù)是TransactionExecutor. execute方法,送出Transaction后,invoke方法會根據(jù)同步異步屬性,決定是在當前線程執(zhí)行,還是在后臺線程執(zhí)行。用于異步執(zhí)行Transaction的后臺線程是唯一的,如果有多個Transaction需要被異步執(zhí)行,則會阻塞。

    接口類的每個方法都被存進一個Map中,SDK以方法簽名實現(xiàn)了同名函數(shù)重載。執(zhí)行Transaction時,通過方法所在的接口類找到對應的實現(xiàn)類,再調(diào)用對應的invoke方法即可。對于異步方法,invoke方法的返回值不會被返回到上層,因此異步API函數(shù)的實現(xiàn)不用關(guān)心返回值。代理的詳細執(zhí)行流程如圖3.4所示

API的實現(xiàn)方法是什么

圖 3.4 代理的詳細流程

3.5 異步方法的回調(diào)

    對于異步方法,在TransactionExecutor. execute執(zhí)行前,先基于Transaction生成對應的AbortableFuture的實現(xiàn)類TransactionFuture,然后將其緩存,用于稍后的回調(diào)。異步方法執(zhí)行完畢后,將子類返回到調(diào)用層。

    在調(diào)用可中斷異步接口后,同步返回的是AbortableFuture實例。調(diào)用方可以直接調(diào)用abort方法中止執(zhí)行。例如:調(diào)用了用于下載消息附件的downloadAttachment函數(shù)后,由于文件太大,網(wǎng)絡(luò)狀況不好等情況需要取消下載時,可以主動調(diào)用abort方法來終止。調(diào)用方式如圖3.5所示。可中斷異步接口對應的abort方法由SDK內(nèi)部實現(xiàn),調(diào)用者不需要關(guān)心其實現(xiàn)方式。

API的實現(xiàn)方法是什么

圖 3.5 abort函數(shù)調(diào)用示例

    TransactionFuture回調(diào)的基本類型為RequestCallback,SDK在此基本類型中定義了onSuccess、onFailed和onException函數(shù),分別用于在成功、失敗和異常情況下根據(jù)執(zhí)行結(jié)果的不同,回調(diào)到不同的函數(shù)。到此整個流程結(jié)束。

關(guān)于“API的實現(xiàn)方法是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。

名稱欄目:API的實現(xiàn)方法是什么
網(wǎng)站鏈接:http://vcdvsql.cn/article38/pdhjpp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈全網(wǎng)營銷推廣網(wǎng)站收錄品牌網(wǎng)站制作網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司