3、集合和分頁(yè)的處理
在很多接口里面,我們都需要用到分頁(yè)的處理,Web API也不例外,這樣可以提交數(shù)據(jù)檢索效率,減少服務(wù)器數(shù)據(jù)處理的壓力,同時(shí)也提交客戶(hù)端的數(shù)據(jù)顯示速度。
一般的集合接口定義如下所示(通用性基類(lèi)接口)。
/// 《summary》
/// 返回?cái)?shù)據(jù)庫(kù)所有的對(duì)象集合
/// 《/summary》
/// 《returns》指定對(duì)象的集合《/returns》
[HttpGet]
public virtual List《T》 GetAll(string token)
{
//檢查用戶(hù)是否有權(quán)限,否則拋出MyDenyAccessException異常
base.CheckAuthorized(AuthorizeKey.ListKey, token);
List《T》 list = baseBLL.GetAll();
return list;
}
但是這樣的返回記錄會(huì)比較多,一般情況下需要分頁(yè),那么分頁(yè)的處理接口定義如下所示。
/// 《summary》
/// 根據(jù)條件查詢(xún)數(shù)據(jù)庫(kù),并返回對(duì)象集合(用于分頁(yè)數(shù)據(jù)顯示)
/// 《/summary》
/// 《returns》指定對(duì)象的集合《/returns》
?。跦ttpPost]
public virtual PagedList《T》 FindWithPager(string condition, PagerInfo pagerInfo, string token)
分頁(yè)接口,在這里返回的結(jié)果里面,用了一個(gè)PageList的泛型類(lèi),這個(gè)方便我們獲取當(dāng)前的記錄及總數(shù),它的定義如下所示。
/// 《summary》
/// 分頁(yè)集合
/// 《/summary》
/// 《typeparam name=“T”》對(duì)象《/typeparam》
public class PagedList《T》
{
/// 《summary》
/// 返回記錄的總數(shù)
/// 《/summary》
public int total_count { get; set; }
/// 《summary》
/// 列表集合
/// 《/summary》
public List《T》 list { get; set; }
}
最后整個(gè)分頁(yè)的處理Web API接口實(shí)現(xiàn)如下所示。
/// 《summary》
/// 根據(jù)條件查詢(xún)數(shù)據(jù)庫(kù),并返回對(duì)象集合(用于分頁(yè)數(shù)據(jù)顯示)
/// 《/summary》
/// 《returns》指定對(duì)象的集合《/returns》
?。跦ttpPost]
public virtual PagedList《T》 FindWithPager(string condition, PagerInfo pagerInfo, string token)
{
//檢查用戶(hù)是否有權(quán)限,否則拋出MyDenyAccessException異常
base.CheckAuthorized(AuthorizeKey.ListKey, token);
List《T》 list = baseBLL.FindWithPager(condition, pagerInfo);
//構(gòu)造成Json的格式傳遞
var result = new PagedList《T》() { total_count = pagerInfo.RecordCount, list = list };
return result;
}
最后客戶(hù)端調(diào)用分頁(yè)的Web API代碼如下所示。
/// 《summary》
/// 根據(jù)條件查詢(xún)數(shù)據(jù)庫(kù),并返回對(duì)象集合(用于分頁(yè)數(shù)據(jù)顯示)
/// 《/summary》
/// 《param name=“condition”》查詢(xún)的條件《/param》
/// 《param name=“pagerInfo”》分頁(yè)實(shí)體《/param》
/// 《returns》指定對(duì)象的集合《/returns》
public virtual List《T》 FindWithPager(string condition, ref PagerInfo pagerInfo)
{
var action = “FindWithPager”;
string url = GetTokenUrl(action) + string.Format(“&condition={0}”, condition);
var postData = pagerInfo.ToJson();
List《T》 result = new List《T》();
PagedList《T》 list = JsonHelper《PagedList《T》》.ConvertJson(url, postData);
if (list != null)
{
pagerInfo.RecordCount = list.total_count;//修改總記錄數(shù)
result = list.list;
}
return result;
}
4、混合框架界面整合Web API接口
在整個(gè)Web API的平臺(tái)構(gòu)建以及在混合框架的整合過(guò)程中,我把各個(gè)模塊還是遵循相對(duì)獨(dú)立的方式進(jìn)行開(kāi)發(fā)和整合,它們實(shí)現(xiàn)了從直接訪問(wèn)數(shù)據(jù)庫(kù)、以WCF服務(wù)獲取數(shù)據(jù),以及通過(guò)WebAPI調(diào)用方式獲取數(shù)據(jù)幾種方式的統(tǒng)一,從而實(shí)現(xiàn)了整個(gè)混合框架的高度整合。
整個(gè)混合框架的核心是以相對(duì)獨(dú)立的方式,整合各個(gè)可重用的模塊,我們可以遵循一定的基礎(chǔ)上,快速構(gòu)建統(tǒng)一的應(yīng)用平臺(tái)。
?

搭建完畢的整個(gè)WebAPI平臺(tái),其中包括了服務(wù)端內(nèi)容,以API控制器的方式,發(fā)布了對(duì)應(yīng)的Web API接口。

在每個(gè)混合框架的獨(dú)立模塊里面,我們封裝了對(duì)應(yīng)的Web API客戶(hù)端調(diào)用處理,從而實(shí)現(xiàn)了Web API的調(diào)用方式。

在Win10下,使用Web API模式運(yùn)行混合框架,獲得的主體界面效果如下所示。

獨(dú)立模塊權(quán)限管理系統(tǒng)界面如下所示。

電子發(fā)燒友App

















評(píng)論