精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Web API接口設計經驗總結

開發 前端
在Web API接口的開發過程中,我們可能會碰到各種各樣的問題,我在前面兩篇隨筆《Web API應用架構在Winform混合框架中的應用(1)》、《Web API應用架構在Winform混合框架中的應用(2)--自定義異常結果的處理》也進行了總的介紹,在經過我的大量模塊實踐并成功運行后,總結了這篇隨筆,希望對大家有所幫助。

在Web API接口的開發過程中,我們可能會碰到各種各樣的問題,我在前面兩篇隨筆《Web API應用架構在Winform混合框架中的應用(1)》、《Web API應用架構在Winform混合框架中的應用(2)--自定義異常結果的處理》也進行了總的介紹,在經過我的大量模塊實踐并成功運行后,總結了這篇隨筆,希望對大家有所幫助。

1、在接口定義中確定MVC的GET或者POST方式

由于我們整個Web API平臺是基于MVC的基礎上進行的API開發,因此整個Web API的接口,在定義的時候,一般需要顯示來聲明接口是[HttpGet]或者[HttpPost],雖然有些接口也可以不用聲明,但是避免出現類似下面 的錯誤信息,顯式聲明還是有好處的。

例如在基類定義的查找對象接口如下所示。

  1. /// <summary> 
  2.         /// 查詢數據庫,檢查是否存在指定ID的對象 
  3.         /// </summary> 
  4.         /// <param name="id">對象的ID值</param> 
  5.         /// <returns>存在則返回指定的對象,否則返回Null</returns> 
  6.         [HttpGet] 
  7.         public virtual T FindByID(string id, string token) 

如果是增刪改的接口,一般需要聲明為POST方式提交數據,而且基于安全性的考慮,需要攜帶更多的參數。

2、動態對象的接口定義

在一般的Web API接口里面,我們可能都會碰到很多簡單類型的參數,但是又想讓它們以POST方式提交數據,那么我們就可以有兩種方法來處理,一種是定義一個類來放置 這些參數,一種是采用動態的JObject參數,前者有很多不方便的地方,因為我們不可能為每個接口參數定義多一個實體類,這樣可能會有很多難以管理的類 定義。如下面是微信API的調用接口案例,我們也需要設置這樣的處理規則。

  1. 接口調用請求說明 
  2. http請求方式: POST(請使用https協議) 
  3. https://api.weixin.qq.com/cgi-bin/groups/update?access_token=ACCESS_TOKEN 
  4. POST數據格式:json 
  5. POST數據例子:{"group":{"id":108,"name":"test2_modify2"}} 

那么我們采用JObject是這么樣的呢,我們來看接口的定義和處理代碼。JObject是Newtonsoft.Json.Linq命名空間下的一個對象。

 
  1. /// <summary> 
  2.         /// 修改用戶密碼 
  3.         /// </summary> 
  4.         /// <param name="param">包含userName和userPassword的復合對象</param> 
  5.         /// <param name="token">用戶訪問令牌</param> 
  6.         /// <returns></returns> 
  7.         [HttpPost] 
  8.         public CommonResult ModifyPassword(JObject param,  string token) 
  9.         { 
  10.             //令牌檢查,不通過則拋出異常 
  11.             CheckResult checkResult = CheckToken(token); 
  12.             dynamic obj = param; 
  13.             if (obj != null
  14.             { 
  15.                 string userName = obj.userName; 
  16.                 string userPassword = obj.userPassword; 
  17.  
  18.                 bool success = BLLFactory<User>.Instance.ModifyPassword(userName, userPassword); 
  19.                 return new CommonResult(success); 
  20.             } 
  21.             else 
  22.             { 
  23.                 throw new MyApiException("傳遞參數出現錯誤"); 
  24.             } 
  25.         } 
 

其中我們把JObject對象轉換為我們所需要的對象的時候,因為我們沒有定義具體的實體類,因此采用了dynamic語法,聲明這是一個動態對象,由運行時獲取對應的屬性。

dynamic obj = param;

這樣我們就可以在調用的時候,動態POST對應的JSON對象給Web API接口,而不需要預先定義各種接口參數的類了。

 
  1. /// <summary> 
  2.         /// 調用Web API接口,修改用戶密碼 
  3.         /// </summary> 
  4.         /// <param name="userName">用戶名稱</param> 
  5.         /// <param name="userPassword">修改的密碼</param> 
  6.         /// <returns>如果修改成功返回true,否則返回false</returns> 
  7.         public bool ModifyPassword(string userName, string userPassword) 
  8.         { 
  9.             var action = "ModifyPassword"
  10.             var postData = new 
  11.             { 
  12.                 userName = userName, 
  13.                 userPassword = userPassword 
  14.             }.ToJson(); 
  15.  
  16.             string url = GetTokenUrl(action); 
  17.  
  18.             CommonResult result = JsonHelper<CommonResult>.ConvertJson(url, postData); 
  19.             return (result != null) ? result.Success : false
  20.         } 
 

其中GetTokenUrl是根據token和API的地址等參數,構建一個完整的提交地址。我們在上面代碼通過

            var postData = new             {                 userName = userName,                 userPassword = userPassword             }.ToJson();

就可以動態創建一個對象,并生成它的JSON字符串,把數據POST提交到對應的API接口里面即可,然后對結果進行對象的轉換就算完成了。

3、集合和分頁的處理

在很多接口里面,我們都需要用到分頁的處理,Web API也不例外,這樣可以提交數據檢索效率,減少服務器數據處理的壓力,同時也提交客戶端的數據顯示速度。

一般的集合接口定義如下所示(通用性基類接口)。

  1. /// <summary> 
  2.         /// 返回數據庫所有的對象集合 
  3.         /// </summary> 
  4.         /// <returns>指定對象的集合</returns> 
  5.         [HttpGet] 
  6.         public virtual List<T> GetAll(string token) 
  7.         { 
  8.             //檢查用戶是否有權限,否則拋出MyDenyAccessException異常 
  9.             base.CheckAuthorized(AuthorizeKey.ListKey, token); 
  10.  
  11.             List<T> list = baseBLL.GetAll(); 
  12.             return list; 
  13.         } 

但是這樣的返回記錄會比較多,一般情況下需要分頁,那么分頁的處理接口定義如下所示。

 
  1. /// <summary> 
  2.         /// 根據條件查詢數據庫,并返回對象集合(用于分頁數據顯示) 
  3.         /// </summary> 
  4.         /// <returns>指定對象的集合</returns> 
  5.         [HttpPost] 
  6.         public virtual PagedList<T> FindWithPager(string condition, PagerInfo pagerInfo, string token) 
 

分頁接口,在這里返回的結果里面,用了一個PageList的泛型類,這個方便我們獲取當前的記錄及總數,它的定義如下所示。 

  1. /// <summary> 
  2.     /// 分頁集合 
  3.     /// </summary> 
  4.     /// <typeparam name="T">對象</typeparam> 
  5.     public class PagedList<T> 
  6.     { 
  7.         /// <summary> 
  8.         /// 返回記錄的總數 
  9.         /// </summary> 
  10.         public int total_count { get; set; } 
  11.  
  12.         /// <summary> 
  13.         /// 列表集合 
  14.         /// </summary> 
  15.         public List<T> list { get; set; } 
  16.     } 

***整個分頁的處理Web API接口實現如下所示。

 
  1. /// <summary> 
  2.         /// 根據條件查詢數據庫,并返回對象集合(用于分頁數據顯示) 
  3.         /// </summary> 
  4.         /// <returns>指定對象的集合</returns> 
  5.         [HttpPost] 
  6.         public virtual PagedList<T> FindWithPager(string condition, PagerInfo pagerInfo, string token) 
  7.         { 
  8.             //檢查用戶是否有權限,否則拋出MyDenyAccessException異常 
  9.             base.CheckAuthorized(AuthorizeKey.ListKey, token); 
  10.  
  11.             List<T> list = baseBLL.FindWithPager(condition, pagerInfo); 
  12.  
  13.             //構造成Json的格式傳遞 
  14.             var result = new PagedList<T>() { total_count = pagerInfo.RecordCount, list = list }; 
  15.             return result; 
  16.         } 
 

***客戶端調用分頁的Web API代碼如下所示。

 
  1. /// <summary> 
  2.         /// 根據條件查詢數據庫,并返回對象集合(用于分頁數據顯示) 
  3.         /// </summary> 
  4.         /// <param name="condition">查詢的條件</param> 
  5.         /// <param name="pagerInfo">分頁實體</param> 
  6.         /// <returns>指定對象的集合</returns> 
  7.         public virtual List<T> FindWithPager(string condition, ref PagerInfo pagerInfo) 
  8.         { 
  9.             var action = "FindWithPager"
  10.             string url = GetTokenUrl(action) + string.Format("&condition={0}", condition); 
  11.             var postData = pagerInfo.ToJson(); 
  12.  
  13.             List<T> result = new List<T>(); 
  14.             PagedList<T> list = JsonHelper<PagedList<T>>.ConvertJson(url, postData); 
  15.             if (list != null
  16.             { 
  17.                 pagerInfo.RecordCount = list.total_count;//修改總記錄數 
  18.                 result = list.list; 
  19.             } 
  20.             return result; 
  21.         } 

4、混合框架界面整合Web API接口

在整個Web API的平臺構建以及在混合框架的整合過程中,我把各個模塊還是遵循相對獨立的方式進行開發和整合,它們實現了從直接訪問數據庫、以WCF服務獲取數據,以及通過WebAPI調用方式獲取數據幾種方式的統一,從而實現了整個混合框架的高度整合。

整個混合框架的核心是以相對獨立的方式,整合各個可重用的模塊,我們可以遵循一定的基礎上,快速構建統一的應用平臺。

搭建完畢的整個WebAPI平臺,其中包括了服務端內容,以API控制器的方式,發布了對應的Web API接口。

在每個混合框架的獨立模塊里面,我們封裝了對應的Web API客戶端調用處理,從而實現了Web API的調用方式。

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

獨立模塊權限管理系統界面如下所示。

<

 
責任編輯:王雪燕 來源: 博客園
相關推薦

2009-08-21 17:42:36

C#調用API

2009-09-02 14:14:44

C# COM接口轉換

2009-10-15 09:27:00

2015-10-16 14:35:05

SaaSCRM架構設計

2009-10-16 18:01:06

VB.NET調用Win

2009-09-16 17:13:54

學習Linq

2009-09-29 16:32:11

OJB Hiberna

2009-08-19 09:24:43

AJAX引擎經驗總結

2011-07-08 13:15:52

JSP

2009-08-20 17:35:47

Servlet和JSP

2009-10-22 15:07:12

綜合布線工程

2009-09-08 10:57:55

LINQ查詢操作

2009-09-16 17:44:54

LINQ to SQL

2009-09-11 13:29:31

LINQ查詢操作

2009-11-17 11:24:00

PHP應用技巧

2010-06-12 17:37:18

UML實踐指南

2009-09-08 16:02:47

Linq使用Group

2010-01-14 16:14:15

VB.NET界面設計

2009-09-25 17:26:55

使用Hibernate

2010-01-27 18:12:14

Android dia
點贊
收藏

51CTO技術棧公眾號

国产一区高清在线| 亚洲成人av| 欧美中文字幕一区| 小说区视频区图片区| 亚洲xxxx天美| 欧美资源在线| 久久天天躁狠狠躁夜夜爽蜜月 | 台湾佬中文娱乐久久久| 国产精品人人做人人爽人人添| 69堂成人精品视频免费| 欧美特黄aaaaaa| 亚洲精品电影| 亚洲香蕉伊综合在人在线视看| 午夜视频在线观| 日韩脚交footjobhdboots| 亚洲国产高清aⅴ视频| 操人视频欧美| 在线视频欧美亚洲| 成人综合专区| 欧美精品一区二区三区一线天视频 | 手机在线成人免费视频| 麻豆av在线免费观看| 国产欧美一区二区精品秋霞影院| 亚洲精品欧美日韩专区| 狠狠狠狠狠狠狠| 国产精品国码视频| 久久国内精品一国内精品| 自拍视频一区二区| 日本一区二区三区播放| 欧美视频一二三区| 欧美v在线观看| 香蕉成人app免费看片| 国产欧美日韩三级| 免费久久久一本精品久久区| 亚洲国产精品久久久久久6q| 久久精品国产久精国产爱| 欧洲一区二区视频| 日韩视频免费观看高清| 99国产**精品****| 有码中文亚洲精品| brazzers精品成人一区| 久久精品凹凸全集| 精品国内片67194| 男生和女生一起差差差视频| 日韩有码欧美| 欧美日韩在线精品一区二区三区激情| 少妇性饥渴无码a区免费| 欧美黑人猛交| 一区二区三区高清| 欧美极品少妇无套实战| 超碰最新在线| 亚洲精品成a人| 九一免费在线观看| 在线中文字幕第一页| 亚洲欧美日韩综合aⅴ视频| 亚洲国产午夜伦理片大全在线观看网站 | 欧美日韩一区二区电影| 黄色片久久久久| 免费亚洲电影| 色婷婷狠狠综合| av免费网站观看| 免费电影日韩网站| 在线观看亚洲专区| 人人干人人干人人| 亚洲国产91视频| 欧美日韩电影在线播放| 日韩爱爱小视频| 91视频亚洲| 欧美成人午夜电影| 国产大学生视频| 红杏一区二区三区| 精品亚洲一区二区三区四区五区| 亚洲精品一线二线三线无人区| 人妻少妇精品无码专区二区| xxxx在线视频| 欧美性猛交xxxxx水多| 久久免费视频3| 欧美影视资讯| 欧美日韩高清一区| 美国黄色一级视频| 最新国产精品视频| 日韩最新中文字幕电影免费看| 国产免费一区二区三区四区| 欧美二区视频| 日本sm极度另类视频| 久久这里只有精品9| 国产一区二区在线看| 成人欧美一区二区三区在线观看 | 国产精品二区在线观看| 色婷婷综合视频| 91精品人妻一区二区三区四区| 亚洲精品一二三**| 亚洲美女自拍视频| 成人黄色短视频| 一区久久精品| 国产精品激情av在线播放| 国产人妖一区二区| 91在线国内视频| 国产免费色视频| 午夜裸体女人视频网站在线观看| 欧美中文字幕一区二区三区| 国产精品99精品无码视亚| 妖精一区二区三区精品视频| 日韩中文字幕不卡视频| 69精品久久久| 久久国产精品露脸对白| 国产三级精品在线不卡| 自拍视频在线播放| 偷拍亚洲欧洲综合| 午夜免费福利网站| 国产精品午夜一区二区三区| 美女999久久久精品视频| 亚洲av中文无码乱人伦在线视色| 国产美女一区二区| 色噜噜一区二区| а√天堂中文资源在线bt| 欧美精选在线播放| 亚洲激情视频小说| 亚洲黄色一区| 亚洲a在线观看| 91社区在线高清| 精品动漫一区二区三区| 五月天国产视频| 欧美综合另类| 欧美一级片一区| 午夜精品一区二区三| 国产精品色在线观看| 久草青青在线观看| 精品久久97| 欧美日韩国产999| 91麻豆视频在线观看| 久久综合九色综合97婷婷女人 | 亚洲伊人久久大香线蕉av| 九色视频在线观看免费播放| 亚洲一区二区四区蜜桃| 亚洲一区二区中文字幕在线观看| 国产成人av| 欧美一区二区三区四区在线| 黄色小视频免费观看| 亚洲乱码国产乱码精品精98午夜| 日韩欧美国产片| 成人激情免费视频| 国产精品91久久久| 欧洲一区av| 色哟哟精品一区| 久操视频免费看| 久久亚洲美女| 日韩国产一区久久| 一区在线影院| 日韩在线观看免费高清完整版| 国产成人a v| 欧美国产禁国产网站cc| 四季av一区二区| 日韩精品免费一区二区三区| 国产精品久久久久久久久久久久久| 久蕉在线视频| 欧美午夜电影网| 日韩精品电影一区二区三区| 蜜臀av性久久久久av蜜臀妖精| 色播亚洲婷婷| 图片一区二区| 欧美成在线视频| 亚洲精选一区二区三区| 亚洲国产综合在线| 亚洲观看黄色网| 葵司免费一区二区三区四区五区| 日本精品一区二区三区不卡无字幕| 欧美专区福利免费| 色青青草原桃花久久综合| 国产精品无码在线播放| 亚洲久草在线视频| 精品人妻在线视频| 亚洲欧美视频一区二区三区| 日本日本精品二区免费| 久久精品国产福利| 欧美黑人性猛交| 无码精品视频一区二区三区| 91激情在线视频| 三级黄色录像视频| 成熟亚洲日本毛茸茸凸凹| 日本在线xxx| 精品一区二区三区在线| 成人精品网站在线观看| av美女在线观看| 亚洲人a成www在线影院| 国产精品九九九九| 亚洲一二三级电影| 免费观看a级片| 国产精品一二一区| 国产xxxxx在线观看| 大片网站久久| 国产伦精品一区二区三毛| 另类激情视频| 欧美大尺度激情区在线播放| 四虎精品在线| 91精品国产色综合久久久蜜香臀| 日韩精品在线不卡| 亚洲国产精品成人久久综合一区 | 成人av免费在线播放| 久久国产色av免费观看| 亚洲综合色站| 日本在线播放不卡| theporn国产在线精品| 国产成人精品最新| av伦理在线| 久久精品久久久久电影| 日本在线丨区| 日韩精品一区二区三区老鸭窝| 无码人妻aⅴ一区二区三区有奶水| 国产精品成人免费在线| 国产精品揄拍100视频| 国产精品18久久久久久久久久久久 | 日本精品视频一区二区三区| 精品一区在线观看视频| 国产亚洲欧美激情| 亚洲色偷偷色噜噜狠狠99网| 日韩和欧美一区二区| 欧美日韩不卡在线视频| 99久久.com| 视频二区一区| 校园春色另类视频| 成人av中文| 99热这里有精品| 国产精品激情av电影在线观看| 成人影院在线视频| 久久6免费高清热精品| 香蕉视频网站在线观看| 亚洲欧美精品一区| 天堂网av2014| 精品国产乱码久久久久久图片| 亚洲视频在线观看免费视频| 91国产福利在线| 五月天激情国产综合婷婷婷| 亚洲一区免费观看| 高h视频免费观看| 日韩美女视频一区二区 | 欧洲成人性视频| 免费在线国产视频| 精品中文字幕在线2019| 成人欧美在线| 麻豆成人在线看| 成人影欧美片| 欧美精品少妇videofree| 青青影院在线观看| 久久精品免费电影| 成人在线观看免费网站| 九九热精品视频| 四虎影院观看视频在线观看| 欧美日本亚洲视频| 福利成人导航| 97久久国产精品| 黄色aa久久| 欧美中文字幕视频| 婷婷综合六月| 国产精品高潮呻吟久久av黑人| 国产综合色区在线观看| 国产精品91免费在线| 亚洲日本在线观看视频| 国产精品黄页免费高清在线观看| 日韩高清不卡| 91精品久久久久久久久青青| 四虎影视国产精品| 99国产在线| 精品三级av在线导航| 久久综合一区| 成人短片线上看| 日本黄xxxxxxxxx100| 欧美 日韩 国产一区二区在线视频 | 欧美残忍xxxx极端| 香蕉视频在线网址| 国产精品videosex极品| 男女超爽视频免费播放| 另类激情亚洲| 色91精品久久久久久久久| 黄一区二区三区| 国产无套精品一区二区三区| a亚洲天堂av| 丁香花五月婷婷| 亚洲欧美视频一区| 国产污污视频在线观看| 欧洲激情一区二区| 国内毛片毛片毛片毛片| 日韩电影在线观看中文字幕 | 夜夜躁很很躁日日躁麻豆| 91精品国产欧美一区二区18| 国产成人手机在线| 亚洲社区在线观看| 午夜伦理在线视频| 国产精欧美一区二区三区| 91精品一久久香蕉国产线看观看 | 97在线免费观看| 黄色精品视频网站| 国产一区免费观看| 久久电影院7| 香港三级韩国三级日本三级| 免费人成在线不卡| 国产伦理在线观看| 久久精品一区二区| 久久一二三四区| 欧美婷婷六月丁香综合色| 国产浮力第一页| 亚洲一区av在线播放| 色yeye免费人成网站在线观看| 欧美专区第一页| 欧美中文高清| 日本福利一区二区三区| 国产精品www994| 特级丰满少妇一级| 99久久精品国产导航| 丝袜美腿小色网| 91福利社在线观看| 少妇高潮一区二区三区69| 久久天堂电影网| 91在线亚洲| 美乳视频一区二区| 黄色一区二区三区四区| www.日本一区| 久久午夜色播影院免费高清| 久久久久亚洲AV| 91精品国产aⅴ一区二区| 国产三级在线| 欧美一区第一页| 久久综合五月婷婷| 菠萝蜜视频在线观看入口| 久久99国产精品成人| 中字幕一区二区三区乱码| 欧美日韩国产一中文字不卡| 超碰免费在线97| 成人97在线观看视频| 九七影院97影院理论片久久| 日本一区免费看| 久久久噜噜噜| 精品久久久久久中文字幕人妻最新| 亚洲国产一二三| 精品国产伦一区二区三| xxx一区二区| 亚洲人成网站在线在线观看| 日韩中文不卡| 日本大胆欧美人术艺术动态| 国产精品无码久久久久久| 欧美日韩国产丝袜另类| 色久视频在线播放| 97国产真实伦对白精彩视频8| 6080亚洲理论片在线观看| 黄色小视频大全| 国产精品一二三在| 国产在线观看成人| 精品电影一区二区三区| 丁香花视频在线观看| 国产精品我不卡| 9国产精品视频| 成年人网站免费看| 色综合久久久久久久| 国产在线一二| 91精品久久久久久久久久另类| 久久一区二区三区喷水| 成人亚洲精品777777大片| 国产精品午夜在线观看| 国产精品污视频| 欧美成人手机在线| 91免费精品国偷自产在线在线| 国产免费裸体视频| 91首页免费视频| 亚洲毛片一区二区三区| 中文字幕欧美日韩精品| 999精品嫩草久久久久久99| 日韩精品久久一区二区| 成人高清在线视频| 天天爽夜夜爽人人爽| 深夜福利91大全| aiss精品大尺度系列| 成人午夜免费在线| 国产亚洲人成网站| 国产精品无码在线播放| 国外成人在线播放| 精品国产一区探花在线观看| 午夜一级免费视频| 亚洲成人综合在线| 国产高清美女一级毛片久久| 成人性生交xxxxx网站| 亚洲国产mv| 国产综合精品在线| 日韩一区二区免费在线电影| rebdb初裸写真在线观看| 日韩国产欧美一区| 成人性生交大片免费看视频在线| 天堂中文在线网| 日韩视频欧美视频| 精品国产导航| 想看黄色一级片| 五月婷婷另类国产| 夜级特黄日本大片_在线| 国产伦精品一区二区三区四区视频| 久久精品国语| 久久精品黄色片| 国产亚洲精品高潮| 国产精品对白| 日本不卡一区在线| 午夜精品国产更新| av在线下载|