【WEB API項目實戰干貨系列】- API訪問客戶端(WebApiClient適用于MVC/WebForms/WinForm)(四)

目前最新的代碼已經通過Sqlite + NHibernate + Autofac滿足了我們基本的Demo需求.

按照既定的要求,我們的API會提供給眾多的客戶端使用, 這些客戶端可以是各種Web站點, APP, 或者是WinForm, WPF, Silverlight等諸如此類的應用,將來還有可能是各種Iot等物聯網設備的應用,Restful API憑借其諸多優勢,已經在移動互聯網的時代火了一把,在接下來物聯網的時代會發展的更好。

下圖是一個簡單的示意圖,我們本章的ApiClient將提供一套固定的模式,輔助客戶端來訪問我們前面幾章建立的API.

image

?

基本的HTTP傳輸

我們在實際的項目中是定義了一個ApiClient的靜態類庫,其通過HttpClient 再配合 Microsoft.AspNet.WebApi.Client類庫,專門根據我們前面寫的API做了更進一步的封裝.

?

APIClient

我們先來看一下他提供的方法簽名

image

?

Get/Post

顧名思義,這兩個用來完成常見的HttpGet/HttpPost, 只是Post的方法中多了一個Object 的postData參數,這個就是用來發送我們要Post到API端的數據.

?

Execute

是Get,Post使用的基礎方法, Get/Post的操作都是通過他完成的操作.

參數說明:

apiUrl: api的host地址

methodName: api的方法路徑

query: 查詢條件的組合, 通常對應URL中queryString部分, 也就是URL中問號后面的部分

method: 要使用的httpMethod, 這里支持 Get,Post,Put,Delete四種,

postData: post/put時,要傳到api端的數據, 通常已一個object, 發送之前會通過Json.Net序列化為json.

useEndpointPrefix: 這個是指我們API的url 通常都有一個約定,就是在url的host部分后面加上api/作為開始,所以這是說url是否使用默認的這個習慣, 比如?http://xxx.com/api/xxxx

?

UploadFiles/DownloadFile

這兩個從名字也可以和容易的看出來,我們如何通過我們的api上傳跟下載文件,這個常用的場景有 通過app更新頭像,或者從api端導出某個文件.

?

下面示例URL說明了我們上面參數中所對應的URL的部分

image

Query對象介紹

上面除了Query對象之外,其他的都容易理解, 在沒有Query對象的時候,我們要拼出 URL的參數部分,我們通常會需要string來拼接,更好一點的辦法是定義一個Dictionary來做自動連接, 這里我們為了更方便,

我們定義了一個Query對象,說到這里大家應該明白Query對象就是為了幫我們自動處理url的參數部分, 其核心基類是CoreQuery。

這里我們看幾個內置的Query

LoginQuery

其提供了我們Login接口必要的參數, 在使用的時候我們可以直接new 一個loginQuery, 傳入api調用的方法.

image

?

SessionQuery

這個是我們需要授權的APi需要傳入sessionKey參數,通常我們的BaseController里面會設計一個SessionQuery, 當發起 Api Request請求的時候,都會附上這個SessionQuery, 他會自動在API的url中附加sessionKey=xxx的參數

復制代碼
public class SessionQuery : CoreQuery{[Query(Name = "sessionKey")]public string SessionKey { get; set; }public SessionQuery(){}public SessionQuery(SessionQuery query){this.SessionKey = query.SessionKey;}}
復制代碼

?

ListQuery:

可以從下面參數看到是用來處理分頁的請求的.

image

?

CoreQuery.ParmsObj屬性

除了常規的參數需要通過自定義單獨的Query對象之外,對于一些很簡單的APi, 如果我們需要對每個API接口都創建一個Query那豈不是很麻煩?

針對這個問題,我們想出了通過匿名對象來解決這個問題, CoreQuery下面有一個ParmsObj屬性, 在使用的時候可以通過

image

這種方式來動態的添加url參數,這樣會大大減少我們定義的Query類的數量.

?

來張WebApiClient的類庫全圖

image

這個WebApiClient可以很好的在Mvc, Winform等.NET項目中使用, 幫助你的客戶端應用快速接入你開發的API.

?

本章代碼:?https://code.csdn.net/ODotNet/odn-webapiclient/tree/master

同時已發布到 Nuget, 大家可以通過 Install-Package Odn.WebApiClient 來添加到項目中引用

PM> Install-Package Odn.WebApiClient

?

在今天移動互聯網的時代,作為攻城師的我們,誰不想著只寫一套API就可以讓我們的Web, Android APP, IOS APP, iPad APP, Hybired APP, H5 Web共用共同的邏輯呢? 【WEB API項目實戰干貨系列】教你一步步教你解決方案.


文章轉載出自 :? http://www.cnblogs.com/Flyear/p/4907323.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/286483.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/286483.shtml
英文地址,請注明出處:http://en.pswp.cn/news/286483.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于 Roslyn 實現代碼動態編譯

基于 Roslyn 實現代碼動態編譯Intro之前做的一個數據庫小工具可以支持根據 Model 代碼文件生成創建表的 sql 語句,原來是基于 CodeDom 實現的,后來改成使用基于 Roslyn 去做了。實現的原理在于編譯選擇的Model 文件生成一個程序集,再從這個程…

【GIS風暴】GIS拓撲關系原理詳解

目 錄 1. 拓撲關系的概念2. 拓撲元素3. 拓撲關系4. 拓撲關系的意義5. 拓撲在ArcGIS中實現1. 拓撲關系的概念 地圖上的拓撲關系是指圖形在保持連續狀態下的變形(縮放、旋轉和拉伸等),但圖形關系不變的性質。 2. 拓撲元素 對二維而言,矢量數據可抽象為點(節點)、線(鏈、…

Android之簡單的文件夾選擇器實現

1、效果爆照 2、代碼實現 前提需要保證app有讀寫權限 activity_select_folder.xml文件如下 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layo…

【iVX 初級工程師培訓教程 10篇文拿證】04 畫布及我和 iVX 合照

目錄 【iVX 初級工程師培訓教程 10篇文拿證】01 了解 iVX 完成新年賀卡 【iVX 初級工程師培訓教程 10篇文拿證】02 數值綁定及自適應網站制作 【iVX 初級工程師培訓教程 10篇文拿證】03 事件及猜數字小游戲 【iVX 初級工程師培訓教程 10篇文拿證】04 畫布及我和 iVX 合照 【iV…

360極速瀏覽器使用postman

步驟如下&#xff1a;1、將crx文件打包成zip文件2、解壓打包的zip文件&#xff0c;并將_metadata文件夾修改為metadata3、打開360瀏覽器的擴展4、360瀏覽器加載postman插件5、創建快捷方式6、雙擊快捷方式打開postman下載地址&#xff1a;http://pan.baidu.com/s/1c1ZX8XE如果網…

centos 下安裝man手冊

安裝centos minimal版本&#xff0c;發現沒有man手冊 需要安裝一下&#xff0c;yum install man-pages 本文轉自 XDATAPLUS 51CTO博客&#xff0c;原文鏈接:http://blog.51cto.com/xdataplus/1796126

# javascript 總結

# javascript 總結 ## 語法1. 區分大小寫2. 命名規范1. 首字母必須是 字母 _ $2. 其他字符可以是 數字 字母 下劃線 $3. 避開系統的關鍵字4. 單詞和單詞連接方式推薦駝峰命名3. 注釋1. 單行注釋 //注釋的內容2. 多行注釋 /*注釋內容*/4. 語句1. 要用;結尾(推薦做法)2. 如果不寫…

聊聊 C++ 和 C# 中的 lambda 玩法

這幾天在看 C 的 lambda 表達式&#xff0c;挺有意思&#xff0c;這個標準是在 C11標準 加進去的&#xff0c;也就是 2011 年&#xff0c;相比 C# 2007 還晚了個 4 年&#xff0c; Lambda 這東西非常好用&#xff0c;會上癮&#xff0c;今天我們簡單聊一聊。一&#xff1a;語法…

Android之網絡請求通過協程+okhttp的沒有做網絡異常處理導致程序奔潰問題

1 問題 app里面的網絡請求是通過協程+okhttp來實現的,但是沒有做網絡異常處理(域名無法解析、502錯誤等等一系列),導致程序奔潰 2 嘗試 因為app基本上做好了,外面有大幾十個地方調用,然后又有不同的作用域,調用的地方太多了,一開始修改在最外出的網絡請求地方直接加上…

Windows10系統重裝后必不可少的優化步驟

1. 查看系統的激活狀態 Win+R,打開運行,輸入slmgr.vbs -xpr,回車! 可以看到,該系統沒有永久激活,即將過期,過期后部分功能會不可使用,需要重新激活。 2. 徹底關掉Windows Defender 方法一: 打開“命令提示符(管理員)”,然后輸入: reg add "HKEY_LOCAL_MA…

【iVX 初級工程師培訓教程 10篇文拿證】03 事件及猜數字小游戲

目錄 【iVX 初級工程師培訓教程 10篇文拿證】01 了解 iVX 完成新年賀卡 【iVX 初級工程師培訓教程 10篇文拿證】02 數值綁定及自適應網站制作 【iVX 初級工程師培訓教程 10篇文拿證】03 事件及猜數字小游戲 【iVX 初級工程師培訓教程 10篇文拿證】04 畫布及我和 iVX 合照 【iV…

visual studio系列(vs)啟動調試網站使用ip+端口局域網訪問

vs系列工具創建web應用時會自動創建一些配置文件&#xff0c;本文章講的是如何修改配置文件&#xff0c;使vs在啟動運行調試情況下 使用ip端口形式在局域網訪問。本文章使用的是vs2015&#xff0c;.net 4.5。步驟如下&#xff1a;1.使用vs創建好你的web應用&#xff0c;打開項目…

Android studio之編譯提示Could not find :umeng-asms-v1.2.1:.

1 、問題 Could not determine the dependencies of task :app:compileDebugJavaWithJavac. > Could not resolve all task dependencies for configuration :app:debugCompileClasspath.> Could not find :umeng-asms-v1.2.1:.Required by:project :app> Could not …

1-100之間的奇數

#include "stdio.h" int main() {int i0;for(i1;i<100;i){if(i%21){printf("%d ",i);}}return 0; }轉載于:https://blog.51cto.com/zhangxinbei/1718010

計算機與操作系統基礎小結

計算機基礎概念 1946年二月美國&#xff0c;世界上第一臺電子計算機ENIAC誕生&#xff0c;似乎從這一年開始世界便逐漸變得不一樣了。隨著半個世紀的時間&#xff0c;計算機技術蓬勃發展&#xff0c;推動人類進入信息社會。 計算機操作界面&#xff1a; ①圖形用戶界面 ②命令行…

WPF效果第一百八十九篇之又玩Expander+ListBox

上一篇文章已經提前預告了今天要分享的效果,今天接著上一篇的效果接著去實現,還是先來看最終實現的效果:1、關于簡單的布局設計:總結&#xff1a;①③是Expander②④⑤⑥是ListBox2、把上一篇的②這一塊用ListBox替換:<Expander Grid.Column"1" ExpandDirection&q…

作為一個甘肅天水人,我對罐罐茶有一種特殊的情懷

作為一個出生在罐罐茶世家的80后鄉土人&#xff0c;經歷了罐罐茶的發展演變歷史&#xff0c;與罐罐茶結下了不解情緣&#xff0c;下面我就跟大家分享一下劉一哥與罐罐茶的故事吧。 久違的罐罐茶.mp4美麗邂逅 我最早接觸罐罐茶應該是90年代&#xff0c;那個年代家里條件很不好&…

【iVX 初級工程師培訓教程 10篇文拿證】02 數值綁定及自適應網站制作

目錄 【iVX 初級工程師培訓教程 10篇文拿證】01 了解 iVX 完成新年賀卡 【iVX 初級工程師培訓教程 10篇文拿證】02 數值綁定及自適應網站制作 【iVX 初級工程師培訓教程 10篇文拿證】03 事件及猜數字小游戲 【iVX 初級工程師培訓教程 10篇文拿證】04 畫布及我和 iVX 合照 【iV…

將WebApiTestClient添加到ASP.NET Web API幫助頁面

ASP.NET Web API幫助頁面是一種有用的擴展&#xff0c;可為您的Web API自動生成基于Web的文檔。它使調試變得更容易&#xff0c;因為您可以將幫助頁面中的信息復制/粘貼到Fiddler等工具中&#xff0c;以調用Web API服務并檢查響應。現在&#xff0c;如果您可以直接在幫助頁面上…

【LeetCode】3. Longest Substring Without Repeating Characters

題目&#xff1a; Given a string, find the length of the longest substring without repeating characters. Examples: Given "abcabcbb", the answer is "abc", which the length is 3. Given "bbbbb", the answer is "b", with t…