在我的混合式開發架構裡面,內建了WebAPI的通路,這種通路方式不僅可以實作簡便的資料交換,而且可以在多種平台上進行接入,如Winform程式、Web網站、移動端APP等多種接入方式,Web API的處理方式和微信提供的接口處理規則類似,也是通過向伺服器獲得通路令牌(AccessToken),然後傳遞給每個Web API接口,實作資料的交換處理。本篇随筆主要介紹混合架構中Winform對Web API通路的處理。
《混合式開發架構》混合了Web API接口通路、WCF接口通路,以及直接通路資料庫三種方式的接入,以适應多種場景的應用,是基于門面層的一種接口實作處理和封裝。是一種彈性化非常好的架構應用,既可用于單機版軟體或者基于區域網路内的應用軟體,也可以用于分布式技術的網際網路環境應用,是一種成熟穩定、安全高效的技術架構。
這裡主要關注Web API的接入方式,我們知道,如果是一般的接口,如果公布在網際網路上面,就會有很多接入的風險,是以需要對接口的調用進行檢查校驗,確定通路令牌有效,而且對資料發生修改的,還需要對資料的加密簽名進行檢查,才能保證我們的接口運作在較為安全的環境中。
由于我們需要對接口通路的身份進行核實,是以一般要求我們的接口都帶有一個token參數,用來對使用者身份進行識别,如下所示是Web API層的MVC控制器的接口定義。
如果我們在用戶端需要調用這個接口,那麼就需要傳入這個token參數,也就是說這個token令牌需要在調用任何接口前獲得,這樣才能為我們後面的接口調用做好準備。
而這個token的産生是非常重要的,需要嚴格頒發,是以需要對擷取這個token的方法的參數進行簽名校驗,如下面代碼是WebAPI接口對産生token的處理。
也就是需要傳入使用者名、密碼、加密簽名、時間戳、随機數、應用接入ID等資訊,進而建構出來一個通路令牌,通過使用者名、密碼、加密簽名校驗等方式,可以實作對通路令牌(token)的嚴格頒發處理。
在用戶端調用所有Web API接口前,我們需要先通過上面的Web API接口,擷取到該使用者的通路令牌,為了友善,我們可以在用戶端封裝一個函數,通過這個函數擷取到對應的通路令牌,然後把它存儲在緩存裡面,友善各個子產品的接口通路處理。
有了這個輔助方法,我們可以在程式啟動後,使用者進行身份登入的時候,先調用這個方法來擷取令牌。
剛才我提到了Web API層的MVC控制器的接口定義,預設後面一般都有一個token參數,如下代碼所示
而我們為了友善用戶端調用,一般在用戶端調用Web API的時候進行簡化了一下,把token參數拿掉,它的值從緩存裡面提取。如用戶端調用的封裝代碼如下所示。
其中GetTokenUrl就是我們根據token和方法名稱,建構一個連接配接字元串,函數實作如下所示。
這樣最終我們可以獲得類似下面的連接配接位址:
有了這個令牌組裝好的URL,我們可以對通路結果的JSON字元串進行解析,把它解析為對應的資料就可以了。
當然,在實際的Web API接口開發過程中,我們還可以使用Web API工具進行接口調試,如下所示。
下面的1-5的辨別就是擷取token所需要的簽名資料,當然連接配接還帶有幾個賬号認證所需要的資訊了,如賬号密碼、所在公司等資訊。
當然我們也可以使用浏覽器進行測試擷取Token的資訊,隻是沒有那麼友善而已。