在我們常規的業務處理中,一般內部處理的介面多數都是以資料庫相關的,基於混合式開發的winform開發框架,雖然在客戶端呼叫的時候,一般選擇也是基於web api的呼叫,不過後端我們可能不僅僅是針對我們業務資料庫的處理,也可以能是呼叫其他外部介面,如物流、**商介面等介面,本隨筆就是主要介紹基於混合式開發框架如何整合外部api介面的呼叫。
1、混合式框架的結構介紹
我們知道,混合式的框架是可以在客戶端訪問web api服務、wcf服務或者直接連線資料庫幾種方式的綜合,而尤以web api為最廣泛的應用,它的整個框架的結構如下所示。
在客戶端中,通過統一的工廠類calle***ctory對相應的介面進行訪問,這裡主要就是伺服器端web api服務介面的處理,以及客戶端對web api介面的封裝,兩部分通過一些基類進行簡化處理,可以極大提高開發效率。
對於外部第三方的web api介面,我們也可以在自己的web api介面中進行包裝,使得客戶端通過相應的介面進行互動即可,不需要理會內部還是外部的介面,從而實現透明的介面呼叫。
2、rfid外部介面的整合處理
在乙個客戶的應用案例中,需要整合服務商rfid介面實現相應的資料互動,本篇隨筆也是基於這個案例進行整個過程的分析和操作,使得我們了解在混合框架中如何整合第三方web api介面為我們內部框架所用。
一般來說,web api介面,需要明確api的url、資料提交方式(post/get)、提交引數、返回集合,以及一些特殊的資料等,而一般介面的操作,也是需要乙個訪問令牌的,這些都是web api介面呼叫的關鍵。
基本上我們有了上面web api的1/2/3步驟的資訊就可以進行介面程式設計了,這些是web api開發非常重要的資訊。
我們需要特別主要到,步驟1中的資訊
這裡面的token是額外的介面資訊,是需要設定http request請求的頭部資訊裡面的,是使用者身份的重要資訊,所以我們一般需要先通過指定的授權介面獲取這個token資訊。
在這個外部的介面集合裡面,我們找到統一登入驗證的介面定義如下所示。
通過上面的分析,我們首先需要需要處理好登入驗證介面,然後通過介面傳遞令牌token給其他介面進行資料處理的。
結合我們的混合框架結構,這裡我以測試專案testproject專案為例進行介紹,我們調整whc.testproject.caller專案的對應類,如下所示。
其中facade層介面類irfidservice.cs**如下所示。
複製**
///
/// rfid服務外部介面
///
[servicecontract]
public inte***ce irfidservice
複製**
這裡面的介面定義,我們是根據輸入引數、輸出引數進行定義的,另外token是額外增加的令牌引數,用於請求頭部寫入資訊的。
這個介面的定義其實和我們常規的web api介面定義沒有太多的不同,如下是乙個內部客戶資訊介面定義。
複製**
///
/// 客戶資訊的服務介面
///
[servicecontract]
public inte***ce icustomerservice : ibaseservice
複製**
差別就是它們介面繼承類有所不同,外部介面由於不需要和資料庫打交道,我們不需要繼承ibaseservice介面
根據這些介面的定義,我們還需要實現我們具體的web api 服務,邏輯上它是對外部web api介面的封裝,但是對於客戶端來說,並不需要知道是內部還是外部介面,客戶端只需要知道如果提交引數或者結果即可。
由於web api涉及多個引數的資料提交,一般來說這種情況都是以post方式處理的,資料引數則統一在web api端通過定義乙個jobject物件來傳遞即可,登入認證的web api介面定義如下所示。
複製**
///
/// 基於rfid的應用介面
///
public class rfidcontroller : baseapicontroller
return result;
}else
}複製**
其中輸入的引數這裡用了jobject param的引數,我們提交給外部web api介面的時候,我們把這個引數再次序列號為json格式的字串即可:
var postdata = param.tojson();
其中checkinresult和rfidbasedata是根據輸入引數、輸出結果進行的實體類定義,目的是序列化為強型別的實體類,方便資料處理操作。
在客戶端,我們只需要對接好和web api服務端的介面,那麼呼叫起來就非常方便,其中對應的web api介面客戶端封裝類 rfidcaller 如下所示。
複製**
///
/// 對rfid控制的介面呼叫封裝
///
public class rfidcaller : normalapiservice, irfidservice
.tojson();
var result = jsonhelper.convertjson(url, postdata);
return result;
}複製**
有了這些,我們直接在客戶端的介面裡面,就可以通過呼叫calle***ctory進行處理操作了,如下是客戶端窗體獲取驗證身份令牌資料的**
複製**
private string token = null;//訪問rfid介面的token
///
/// 根據終端使用者統一登入驗證獲取相關訪問token
///
///
private string getrfidtoken()
return token;
}複製**
上面是認證身份的介面,其他型別的介面類似的處理方式,如增加了乙個
獲取標籤發貨通知單批量
操作後,對應的客戶端封裝類如下所示。
複製**
///
/// 對rfid控制的介面呼叫封裝
///
public class rfidcaller : normalapiservice, irfidservice
.tojson();
var result = jsonhelper.convertjson(url, postdata);
return result;
}public tagorderasnresult tagorderasn(int brand_id, string factcode, string start_time, string end_time, pager.entity.pagerinfo pagerinfo, string token)
", token);
var postdata = new
.tojson();
var result = jsonhelper.convertjson(url, postdata);
return result;
}複製**
獲取標籤發貨通知單批量
的web api介面如下**定義
複製**
///
/// 獲取標籤發貨通知單批量
複製**
其中表頭資訊,我們通過下面的**指定,設定特殊的token表頭資訊
而在客戶端的呼叫窗體裡面,我們呼叫對應的介面就可以獲取該介面的資料了。
複製**
private tagorderasnresult asnresult;
///
/// 根據引數獲取標籤生產訂單批量資訊
///
///
private tagorderasnresult getresult()
;//初始化乙個分頁條件
var brand_id = this.txtbrand_id.text.toint32();
var factcode = this.txtfactcode.text;
var start_time = this.txtstart_time.datetime.tostring("yyyy-mm-dd hh:mm:ss");
var end_time = this.txtend_time.datetime.tostring("yyyy-mm-dd hh:mm:ss");
asnresult = calle***ctory.instance.tagorderasn(brand_id, factcode, start_time, end_time, pagerinfo, token);
return asnresult;
}複製**
通過上面的**演示,我們了解了在混合框架基礎上增加外部web api介面的方法,通過增加facade層介面,增加web api介面,以及對應的客戶端封裝類,具體處理引數根據web api介面的輸入引數、輸出資料等資訊進行綜合處理即可。
混合式app開發框架
phonegap phonegap的官網位址是 phonegap apicloud apicloud是一款 雲端一體 的移動開發平台,信仰 雲端一體 的理念,重新定義了移動應用開發。apicloud為開發者從 雲 和 端 兩個方向提供api,簡化移動應用開發技術,讓移動應用的開發周期從乙個月縮短到7...
cordova vue混合式開發App
1.建立cordova專案並新增android平台 建立專案指令 cordova create hello com.example.hello helloworld 第乙個hello是cordova自動生成的專案資料夾名稱 第二個com.example.hello我一般填寫公司的名稱,比如 com....
Hybrid混合式開發 回顧
一 前言 1 新鮮的玩法,短期可以吸引大量使用者 2 讓使用者足不出戶就可以抓娃娃,滿足一些喜歡抓娃娃人群的訴求 3 使用者留存率低,一般使用者就是在獲取免費金幣進來玩一把,然後就不會再來了,所以還得通過各種手段吸引使用者來,提高付費率 4 需軟硬體結合,打通之後還需專門人員維護機器 5 需要倉儲 ...