




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、Web API接口設(shè)計經(jīng)驗總結(jié)在Web API接口的開發(fā)過程中,我們可能會碰到各種各樣的問題,我在前面兩篇隨筆Web API應(yīng)用架構(gòu)在Winform混合框架中的應(yīng)用(1)、Web API應(yīng)用架構(gòu)在Winform混合框架中的應(yīng)用(2)-自定義異常結(jié)果的處理也進(jìn)行了總的介紹,在經(jīng)過我的大量模塊實踐并成功運(yùn)行后,總結(jié)了這篇隨筆,希望對大家有所幫助。1、在接口定義中確定MVC的GET或者POST方式由于我們整個Web API平臺是基于MVC的基礎(chǔ)上進(jìn)行的API開發(fā),因此整個Web API的接口,在定義的時候,一般需要顯示來聲明接口是HttpGet或者HttpPost,雖然有些接口也可以不用聲明,但是避
2、免出現(xiàn)類似下面 的錯誤信息,顯式聲明還是有好處的。例如在基類定義的查找對象接口如下所示。1. /2. /查詢數(shù)據(jù)庫,檢查是否存在指定ID的對象3. /4. /對象的ID值5. /存在則返回指定的對象,否則返回Null6. HttpGet7. publicvirtualTFindByID(stringid,stringtoken)如果是增刪改的接口,一般需要聲明為POST方式提交數(shù)據(jù),而且基于安全性的考慮,需要攜帶更多的參數(shù)。1. /2. /插入指定對象到數(shù)據(jù)庫中3. /4. /指定的對象5. /執(zhí)行操作是否成功。6. HttpPost7. publicvirtualCommonResultIn
3、sert(Tinfo,stringtoken,stringsignature,stringtimestamp,stringnonce,stringappid)2、動態(tài)對象的接口定義在一般的Web API接口里面,我們可能都會碰到很多簡單類型的參數(shù),但是又想讓它們以POST方式提交數(shù)據(jù),那么我們就可以有兩種方法來處理,一種是定義一個類來放置 這些參數(shù),一種是采用動態(tài)的JObject參數(shù),前者有很多不方便的地方,因為我們不可能為每個接口參數(shù)定義多一個實體類,這樣可能會有很多難以管理的類 定義。如下面是微信API的調(diào)用接口案例,我們也需要設(shè)置這樣的處理規(guī)則。1. 接口調(diào)用請求說明2. http請求方
4、式:POST(請使用https協(xié)議)3. 4. POST數(shù)據(jù)格式:json5. POST數(shù)據(jù)例子:group:id:108,name:test2_modify2那么我們采用JObject是這么樣的呢,我們來看接口的定義和處理代碼。JObject是Newtonsoft.Json.Linq命名空間下的一個對象。1. /2. /修改用戶密碼3. /4. /包含userName和userPassword的復(fù)合對象5. /用戶訪問令牌6. /7. HttpPost8. publicCommonResultModifyPassword(JObjectparam,stringtoken)9. 10. /令牌
5、檢查,不通過則拋出異常11. CheckResultcheckResult=CheckToken(token);12. dynamicobj=param;13. if(obj!=null)14. 15. stringuserName=obj.userName;16. stringuserPassword=obj.userPassword;17. 18. boolsuccess=BLLFactory.Instance.ModifyPassword(userName,userPassword);19. returnnewCommonResult(success);20. 21. else22. 2
6、3. thrownewMyApiException(傳遞參數(shù)出現(xiàn)錯誤);24. 25. 其中我們把JObject對象轉(zhuǎn)換為我們所需要的對象的時候,因為我們沒有定義具體的實體類,因此采用了dynamic語法,聲明這是一個動態(tài)對象,由運(yùn)行時獲取對應(yīng)的屬性。dynamic obj = param;這樣我們就可以在調(diào)用的時候,動態(tài)POST對應(yīng)的JSON對象給Web API接口,而不需要預(yù)先定義各種接口參數(shù)的類了。1. /2. /調(diào)用WebAPI接口,修改用戶密碼3. /4. /用戶名稱5. /修改的密碼6. /如果修改成功返回true,否則返回false7. publicboolModifyPassw
7、ord(stringuserName,stringuserPassword)8. 9. varaction=ModifyPassword;10. varpostData=new11. 12. userName=userName,13. userPassword=userPassword14. .ToJson();15. 16. stringurl=GetTokenUrl(action);17. 18. CommonResultresult=JsonHelper.ConvertJson(url,postData);19. return(result!=null)?result.Success:f
8、alse;20. 其中GetTokenUrl是根據(jù)token和API的地址等參數(shù),構(gòu)建一個完整的提交地址。我們在上面代碼通過 var postData = new userName = userName, userPassword = userPassword .ToJson();就可以動態(tài)創(chuàng)建一個對象,并生成它的JSON字符串,把數(shù)據(jù)POST提交到對應(yīng)的API接口里面即可,然后對結(jié)果進(jìn)行對象的轉(zhuǎn)換就算完成了。3、集合和分頁的處理在很多接口里面,我們都需要用到分頁的處理,Web API也不例外,這樣可以提交數(shù)據(jù)檢索效率,減少服務(wù)器數(shù)據(jù)處理的壓力,同時也提交客戶端的數(shù)據(jù)顯示速度。一般的集合接口定
9、義如下所示(通用性基類接口)。1. /2. /返回數(shù)據(jù)庫所有的對象集合3. /4. /指定對象的集合5. HttpGet6. publicvirtualListGetAll(stringtoken)7. 8. /檢查用戶是否有權(quán)限,否則拋出MyDenyAccessException異常9. base.CheckAuthorized(AuthorizeKey.ListKey,token);10. 11. Listlist=baseBLL.GetAll();12. returnlist;13. 但是這樣的返回記錄會比較多,一般情況下需要分頁,那么分頁的處理接口定義如下所示。1. /2. /根據(jù)條件
10、查詢數(shù)據(jù)庫,并返回對象集合(用于分頁數(shù)據(jù)顯示)3. /4. /指定對象的集合5. HttpPost6. publicvirtualPagedListFindWithPager(stringcondition,PagerInfopagerInfo,stringtoken)分頁接口,在這里返回的結(jié)果里面,用了一個PageList的泛型類,這個方便我們獲取當(dāng)前的記錄及總數(shù),它的定義如下所示。1. /2. /分頁集合3. /4. /對象5. publicclassPagedList6. 7. /8. /返回記錄的總數(shù)9. /10. publicinttotal_countget;set;11. 12.
11、 /13. /列表集合14. /15. publicListlistget;set;16. 最后整個分頁的處理Web API接口實現(xiàn)如下所示。1. /2. /根據(jù)條件查詢數(shù)據(jù)庫,并返回對象集合(用于分頁數(shù)據(jù)顯示)3. /4. /指定對象的集合5. HttpPost6. publicvirtualPagedListFindWithPager(stringcondition,PagerInfopagerInfo,stringtoken)7. 8. /檢查用戶是否有權(quán)限,否則拋出MyDenyAccessException異常9. base.CheckAuthorized(AuthorizeKey.L
12、istKey,token);10. 11. Listlist=baseBLL.FindWithPager(condition,pagerInfo);12. 13. /構(gòu)造成Json的格式傳遞14. varresult=newPagedList()total_count=pagerInfo.RecordCount,list=list;15. returnresult;16. 最后客戶端調(diào)用分頁的Web API代碼如下所示。1. /2. /根據(jù)條件查詢數(shù)據(jù)庫,并返回對象集合(用于分頁數(shù)據(jù)顯示)3. /4. /查詢的條件5. /分頁實體6. /指定對象的集合7. publicvirtualListF
13、indWithPager(stringcondition,refPagerInfopagerInfo)8. 9. varaction=FindWithPager;10. stringurl=GetTokenUrl(action)+string.Format(&condition=0,condition);11. varpostData=pagerInfo.ToJson();12. 13. Listresult=newList();14. PagedListlist=JsonHelperPagedList.ConvertJson(url,postData);15. if(list!=null)1
14、6. 17. pagerInfo.RecordCount=list.total_count;/修改總記錄數(shù)18. result=list.list;19. 20. returnresult;21. 4、混合框架界面整合Web API接口在整個Web API的平臺構(gòu)建以及在混合框架的整合過程中,我把各個模塊還是遵循相對獨(dú)立的方式進(jìn)行開發(fā)和整合,它們實現(xiàn)了從直接訪問數(shù)據(jù)庫、以WCF服務(wù)獲取數(shù)據(jù),以及通過WebAPI調(diào)用方式獲取數(shù)據(jù)幾種方式的統(tǒng)一,從而實現(xiàn)了整個混合框架的高度整合。整個混合框架的核心是以相對獨(dú)立的方式,整合各個可重用的模塊,我們可以遵循一定的基礎(chǔ)上,快速構(gòu)建統(tǒng)一的應(yīng)用平臺。搭建完畢的整個WebAPI平臺,其中包括了服務(wù)端內(nèi)容,以API控制器的方式,發(fā)布了對應(yīng)的Web
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025屆新疆昌吉市第九中學(xué)高一化學(xué)第二學(xué)期期末學(xué)業(yè)水平測試試題含解析
- 中子星吸積現(xiàn)象-洞察及研究
- 桐廬退役警犬管理辦法
- 北京社區(qū)規(guī)約管理辦法
- 材料安裝合同管理辦法
- 全球防空反導(dǎo)領(lǐng)域的發(fā)展動態(tài)與啟示
- 村民小組賬目管理辦法
- 利川項目資金管理辦法
- 電商營銷策略:中小企業(yè)數(shù)字化營銷創(chuàng)新研究
- 綠色建筑與可持續(xù)發(fā)展技術(shù)應(yīng)用影響分析
- 大連農(nóng)商銀行2024年招聘172人管理單位遴選500模擬題附帶答案詳解
- (完整)雙溪課程評量表
- 第四章-康復(fù)心理學(xué)-心理評估
- 中醫(yī)外治技術(shù)排版稿
- GB/T 41421-2022數(shù)字化試衣虛擬服裝用術(shù)語和定義
- GB/T 4074.21-2018繞組線試驗方法第21部分:耐高頻脈沖電壓性能
- GB/T 26323-2010色漆和清漆鋁及鋁合金表面涂膜的耐絲狀腐蝕試驗
- 逆向工程技術(shù)-課件
- 基于PLC交流變頻調(diào)速系統(tǒng)的設(shè)計 畢業(yè)設(shè)計(論文)
- 齊魯醫(yī)學(xué)健康知識-遠(yuǎn)離“三高”
- 安徽省工傷職工停工留薪期分類目錄
評論
0/150
提交評論