通用設備互聯框架(CDIF)是一個基於web的鏈接框架,目前有部分開源實現存放在: GitHub - out4b/cdif: Common device interconnect framework。CDIF是一種基於JSON的SOA軟件框架。CDIF爲客戶端app提供了與基於XML的WSDL語言和SOAP協議同等抽象能力、但簡潔得多的基於JSON的實現,也很是適合用於描述微服務架構的API接口。CDIF提供了完整的服務註冊和發現能力,併爲全部的web服務和物聯網設備,包括REST、SOAP類型的服務,各類協議的物聯網設備建立出一個簡潔、統一的JSON模型;並在此基礎上提供了其REST接口上的,基於JSON文本的統一RPC調用接口,方便了各類前端應用開發出基於該統一模型的API調用代碼。前端
CDIF的整體架構以下圖所示:node
CDIF整體架構git
經過框架提供的設備抽象層,CDIF未來自不一樣廠商的各類類型的REST或SOAP API,或者物聯網設備封裝成各類虛擬設備,並對外提供統一的虛擬設備訪問REST接口供客戶端使用。github
CDIF框架代碼用node.js書寫,所以底層的虛擬設備驅動所有使用node.js的npm包進行管理。每一個設備驅動可包含一到多個虛擬設備,由驅動被加載時上報給CDIF框架。被CDIF管理的虛擬設備及其API內部實現經過設備抽象層被封裝在驅動中,這些驅動的內部實現可使用node.js豐富的生態中任意一個優秀的第三方包幫助實現,好比request, crypto, moment等,所以很是容易開發和管理。配合周邊的輔助開發工具,由CDIF管理的API能夠擁有自動文檔生成,自動測試工具等能力。如下是靈長科技API市場上經過解析CDIF API爲REST或SOAP API定義的規範,以及利用JSON schema form技術爲各類REST或SOAP API自動生成的API文檔和測試頁面截圖。同時,當API的參數發生變化好比新增參數字段時,這些API的文檔和測試工具都會自動更新。web
自動API文檔生成npm
自動API測試頁面生成api
CDIF爲雲服務API建立的統一模型由UPnP的啓發而來。在支持各種雲服務的API接口同時,CDIF也爲全部的物聯網設備了一個統一的模型,而且能夠方便地幫助客戶端建立出物聯網設備和網絡服務聯動的各類應用場景。緩存
因爲其簡潔的抽象能力,基於嚴格契約的鬆耦合架構,狀態無關的可互換服務定義等優勢,在WSDL和SOAP基礎上打造的SOA技術體系至今仍然普遍應用於包括銀行、交易所、航空公司、電信、醫院、電商、支付平臺等各行各業的大中型企業中。據MuleSoft估算,目前世界上每一年花費在與SOA技術相關的企業IT基礎設施建設和系統集成工做有5000億美圓之多。但因爲XML格式用於數據交換過於複雜,以XML爲基礎的許多優秀的WS-*標準都逐漸走向了沒落。服務器
隨着移動時代的發展,以REST和JSON爲基礎打造的各類web服務、微服務架構逐漸成爲主流。基於JavaScript開發的應用,如各類web app等都以REST和JSON做爲鏈接的基礎。新興IT企業也更傾向於使用REST API,而不是SOAP來鏈接企業內部的各類基礎業務組件。可是,因爲缺乏有效的schema約束和管理能力,目前企業內外使用的各類REST API基本都須要依賴於文檔手動管理,數據只能用"舉例"的方式描述,缺少嚴謹的規範也給API集成帶來了諸多不便之處。同時,在API接口須要變化時,部署和升級新的API版本也很是不便。CDIF爲REST API創建的通用模型幫助填補了REST API與傳統SOA技術的差距,併爲傳統SOA技術和雲服務的結合與發展提供了全新的方向。基於CDIF的SOA技術能夠方便地建立出許多全新類型的應用,好比REST服務流應用,web服務和物聯網設備的無縫結合等等,這些都是現有技術沒法輕易實現的場景。網絡
與WSDL或Swagger等API modelling language不一樣,藉助於JSON schema form和服務器端渲染等技術帶來的便利,使用CDIF提供的JSON模型與RPC接口的客戶端app能夠爲客戶端app提供全自動化集成能力。在這種狀況下,不須要對被CDIF管理的REST API作離線的客戶端代碼生成和手動集成,即可將由CDIF管理的API接口,及其變化動態地反映在客戶端UI上供用戶使用,省卻了客戶端對REST API的集成和API接口變化帶來的繁瑣的手動客戶端升級工做。由CDIF管理的REST API能夠將新增長的,或者變化後的API自動展示在app UI上供用戶消費使用,簡化了app開發人員的工做,同時可作到實時推廣廠商新增API所展示的新業務能力。
若是客戶端app不但願使用這些高級特性,CDIF提供的REST接口也能夠向下兼容目前流行的手動集成方法。用戶參考CDIF爲各類雲服務API建立的通用模型即可方便地開發出基於該模型的API調用代碼。
因爲作到了對API的訪問地址和方法徹底透明,CDIF也能夠較好地幫助企業解決REST API的變化管理這一難題。CDIF內部對API驅動包中的JS代碼使用動態裝載技術,可支持驅動代碼的熱切換,驅動中的API訪問代碼發生變化時,只須要一鍵安裝新的驅動包到CDIF框架上,變化便可當即生效。同時可作到不打斷線上正在執行的舊版本API調用。這些特性均可以幫助企業更方便地管理其自身的API接口。
更進一步,CDIF也爲廠商的雲服務API接口提供了靈活的數據緩存和獨有的雙向數據通道能力,廠商只須要調整其API對CDIF框架提供的統一JSON模型上幾個字段取值即可開放這些能力,API數據的緩存時間從1毫秒到10年能夠由API開發者根據實際狀況隨意指定,並隨時調整。在開啓雙向數據通道能力後,廠商雲服務上的各類數據更新即可以實時地經過WebSocket,APN等通道被CDIF的消息訂閱者獲取,而不須要由用戶主動發起API調用更新數據,產生額外的API調用開銷。這些獨有的特性都爲目前全部基於API調用的單向雲服務數據通道提供了更強大的能力。