天天看點

使用Swagger輔助開發Fabric Application的Web API

前面的幾篇部落格,我們已經把Fabric環境搭建好了,也可以使用Go開發ChainCode了,那麼我們在ChainCode開發完畢後,可以通過CLI來測試ChainCode的正确性,ChainCode開發後,接下來就是關于Application的編寫了。

Application分為2部分,一部分是關于後來業務邏輯的,也就是Web API,一般是通過RESTful的形式提供,另外一部分就是UI,當然大多數情況下都是GUI,也就是網站前端,Windows程式,APP之類的。關于前端,我由于沒啥藝術細胞,做出來的界面很醜,是以也就揚長避短,很少做前端開發,專注于背景業務邏輯的實作。

Swagger的開發方式有2種:

使用Web開發架構中遷移過來的Swagger庫,也就是先代碼,後生成API文檔的模式。比如ABP架構中就是,我們隻需要在ApiController中定義好接口和注釋好,其架構就可以幫我們生成Swagger界面。

使用Swagger的yaml檔案定義API接口,定義好後,再使用Swagger官方提供的CodeGen生成對應語言的代碼。

第一種開發方式要看你使用的Web架構的支援情況,接下來我們要講的就是第二種開發方式。

直接在安裝了Docker的環境中運作如下指令:

不管是線上的Editor或者是本地部署的Docker,我們最終看到是這樣一個界面:

使用Swagger輔助開發Fabric Application的Web API

左邊視窗就是我們要編輯的YAML檔案的内容,右邊視窗就是預覽的API文檔的效果。

關于YAML檔案,其實可讀性還是很強的,大部分都不需要解釋就知道是什麼意思,下面我來着重介紹以下幾個比較重要的元素:

host是指定了我們的API伺服器的位址,也就是我們部署了Web API時,是部署在哪個Server上。如果我們是本地開發,而且使用了自定義端口,比如8080,那麼需要改成localhost:8080。

basePath是指定API的虛拟目錄,比如我們有個獲得所有使用者清單的API是:GET /User,如果我們設定了basePath是“/api”,那麼我們要通路的路徑應該是:

當然,如果我們要更規範,比如把API版本也放進去,那麼我們可以設定basePath為”/api/v1”,于是我們的通路路徑就是:

這個basePath參數涉及到伺服器端api路由的生成,而host涉及到各個API測試時候的調用位址。

Tags是用于我們對大量的API進行分區用的,說簡單點就是為了大量的API能夠更好看,更容易查找。我們可以為tag添加注釋,使得API文檔更容易讀懂。

Tags不涉及到背景的改變,每一個具體的API都可以指定屬于哪個(或者哪幾個tag),然後在Swagger顯示的時候,會将這些API歸到所屬的Tag下面去。

【注意:YAML檔案格式嚴格要求縮進,就像Python一樣,是以如果我們在添加元素的時候一定要注意縮進是否正确。】

比如我們建立一個Tag叫Bank,然後增加一點對這個Tag的描述,接下來我們再到/pet post下面,可以把tags增加一行,寫為銀行,然後就可以看到右邊的預覽視窗更新了,顯示了銀行這個Tag相關的API:

使用Swagger輔助開發Fabric Application的Web API

如果沒有重新整理,我們可以點選上面菜單的Edit->Convert to YAML可以看到效果。

這是最主要的配置元素。主要的API配置都在這個環節。下面一級一級的講解。

第一級是URL,以/開頭,URL中可以指定參數。比如我們要獲得某個bankId對應的銀行資訊,那麼URL就是

/bank/{bankId}

第二級是HTTP方法,我們在WebAPI中主要用到的方法有:查詢get,建立post,修改put和删除delete。因為我們是要查詢某個銀行ID對應的銀行資訊,是以我們在這一級輸入get

第三級有多個元素,分别是:

tags,說明這個API是屬于哪個Tag的。

summary,對該接口的簡單描述,一句話即可。

description,顧名思義,是接口的介紹,可以寫的詳細一點。

operationId,這是對應的背景的方法名,Swagger的路由就可以根據URL和這裡的operationId找到對應的Action方法。

consumes,是用戶端往伺服器傳的時候,支援什麼類型,一般我們隻需要保留json即可,可以把xml删除。如果是get方法,不需要該元素。

produces,就是伺服器在傳回給用戶端資料的時候,是什麼樣式的資料,我們仍然保留json即可。

parameters就是具體的參數,這裡的設定比較複雜,包括指定參數是在URL中還是在Body中,傳入的參數是什麼類型的,是否必須有該參數,對該參數的描述等。如果參數是一個對象,那麼需要添加對該對象類型的引用,而對象的定義在後面definitions節點中。

responses是伺服器傳回的HTTP Code有哪些。每一種狀态碼表示什麼意思。

security是指定該接口的安全檢查方式,如果沒有設定,那麼就是匿名通路。其引用的是securityDefinitions中的定義。

x-swagger-router-controller,這是一個擴充元素,用來指定該URL對應的背景的Controller名。

結合上面介紹的,我們自定義一個根據ID擷取Bank對象的YAML内容如下:

這是安全定義子產品,在這裡可以定義我們WebAPI的安全認證方式,比如:

Basic Authentication

API Keys

Bearer Authentication

OAuth 2.0

OpenID Connect Discovery

Cookie Authentication

這裡面這麼多種認證方式,很多我也沒用過,了解不深,我主要用的是Bearer和OAuth 2.0,具體設定大家可以參考文檔:

<a href="https://swagger.io/docs/specification/authentication/">https://swagger.io/docs/specification/authentication/</a>

這裡是定義我們在API中會涉及到哪些JSON對象的地方。也就是說我們在API中要POST上去的JSON或者通過GET由伺服器傳回的JSON,其對象都在這裡定義,上面的步驟直接引用這裡的定義即可。

比如我們上面需要引用到Bank對象,那麼我們在這裡定義如下:

如果是對象嵌套引用了其他對象,也可以通過$ref的方式引用過去,我們可以參考官方示例中的Pet對象,就引用了Category。

隻要我們預覽右邊的代碼沒有報任何錯誤,那麼我們就可以生成對于的背景代碼了。這裡因為Fabric SDK是Node的,是以我們的Web API也是使用Node來開發。我們點選Generate Server菜單下的nodejs-server選項:

使用Swagger輔助開發Fabric Application的Web API

系統會下載下傳一個壓縮包,該壓縮包解壓後就是我們的Web API Node項目。在安裝了Node的機器上,我們使用以下指令,安裝項目所依賴的包:

Swagger真的不愧是Web API開發的神器,太好用了。另外官方還有SwaggerHub,支援多人協作編寫YAML文檔,不過是收費的。我們在項目中其實可以通過Git來管理yaml檔案,因為該檔案存在于WebAPI項目的api檔案夾中,是以其實大家可以共同編輯,然後使用Git來合并沖突。另外Swagger還有Client,看了一些支援各種語言,各種架構,各種APP開發,真是太強大了,我由于不開發GUI,是以沒怎麼接觸,需要你去研究了。

本文轉自深藍居部落格園部落格,原文連結:http://www.cnblogs.com/studyzy/p/7812035.html,如需轉載請自行聯系原作者