日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

【WEB API项目实战干货系列】- API访问客户端(WebApiClient适用于MVC/WebForms/WinForm)(四)

發(fā)布時(shí)間:2023/12/4 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【WEB API项目实战干货系列】- API访问客户端(WebApiClient适用于MVC/WebForms/WinForm)(四) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
目前最新的代碼已經(jīng)通過Sqlite + NHibernate + Autofac滿足了我們基本的Demo需求.

按照既定的要求,我們的API會(huì)提供給眾多的客戶端使用, 這些客戶端可以是各種Web站點(diǎn), APP, 或者是WinForm, WPF, Silverlight等諸如此類的應(yīng)用,將來還有可能是各種Iot等物聯(lián)網(wǎng)設(shè)備的應(yīng)用,Restful API憑借其諸多優(yōu)勢(shì),已經(jīng)在移動(dòng)互聯(lián)網(wǎng)的時(shí)代火了一把,在接下來物聯(lián)網(wǎng)的時(shí)代會(huì)發(fā)展的更好。

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

?

基本的HTTP傳輸

我們?cè)趯?shí)際的項(xiàng)目中是定義了一個(gè)ApiClient的靜態(tài)類庫(kù),其通過HttpClient 再配合 Microsoft.AspNet.WebApi.Client類庫(kù),專門根據(jù)我們前面寫的API做了更進(jìn)一步的封裝.

?

APIClient

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

?

Get/Post

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

?

Execute

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

參數(shù)說明:

apiUrl: api的host地址

methodName: api的方法路徑

query: 查詢條件的組合, 通常對(duì)應(yīng)URL中queryString部分, 也就是URL中問號(hào)后面的部分

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

postData: post/put時(shí),要傳到api端的數(shù)據(jù), 通常已一個(gè)object, 發(fā)送之前會(huì)通過Json.Net序列化為json.

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

?

UploadFiles/DownloadFile

這兩個(gè)從名字也可以和容易的看出來,我們?nèi)绾瓮ㄟ^我們的api上傳跟下載文件,這個(gè)常用的場(chǎng)景有 通過app更新頭像,或者從api端導(dǎo)出某個(gè)文件.

?

下面示例URL說明了我們上面參數(shù)中所對(duì)應(yīng)的URL的部分

Query對(duì)象介紹

上面除了Query對(duì)象之外,其他的都容易理解, 在沒有Query對(duì)象的時(shí)候,我們要拼出 URL的參數(shù)部分,我們通常會(huì)需要string來拼接,更好一點(diǎn)的辦法是定義一個(gè)Dictionary來做自動(dòng)連接, 這里我們?yōu)榱烁奖?#xff0c;

我們定義了一個(gè)Query對(duì)象,說到這里大家應(yīng)該明白Query對(duì)象就是為了幫我們自動(dòng)處理url的參數(shù)部分, 其核心基類是CoreQuery。

這里我們看幾個(gè)內(nèi)置的Query

LoginQuery

其提供了我們Login接口必要的參數(shù), 在使用的時(shí)候我們可以直接new 一個(gè)loginQuery, 傳入api調(diào)用的方法.

?

SessionQuery

這個(gè)是我們需要授權(quán)的APi需要傳入sessionKey參數(shù),通常我們的BaseController里面會(huì)設(shè)計(jì)一個(gè)SessionQuery, 當(dāng)發(fā)起 Api Request請(qǐng)求的時(shí)候,都會(huì)附上這個(gè)SessionQuery, 他會(huì)自動(dòng)在API的url中附加sessionKey=xxx的參數(shù)

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

?

ListQuery:

可以從下面參數(shù)看到是用來處理分頁的請(qǐng)求的.

?

CoreQuery.ParmsObj屬性

除了常規(guī)的參數(shù)需要通過自定義單獨(dú)的Query對(duì)象之外,對(duì)于一些很簡(jiǎn)單的APi, 如果我們需要對(duì)每個(gè)API接口都創(chuàng)建一個(gè)Query那豈不是很麻煩?

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

這種方式來動(dòng)態(tài)的添加url參數(shù),這樣會(huì)大大減少我們定義的Query類的數(shù)量.

?

來張WebApiClient的類庫(kù)全圖

這個(gè)WebApiClient可以很好的在Mvc, Winform等.NET項(xiàng)目中使用, 幫助你的客戶端應(yīng)用快速接入你開發(fā)的API.

?

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

同時(shí)已發(fā)布到 Nuget, 大家可以通過 Install-Package Odn.WebApiClient 來添加到項(xiàng)目中引用

PM> Install-Package Odn.WebApiClient

?

在今天移動(dòng)互聯(lián)網(wǎng)的時(shí)代,作為攻城師的我們,誰不想著只寫一套API就可以讓我們的Web, Android APP, IOS APP, iPad APP, Hybired APP, H5 Web共用共同的邏輯呢? 【W(wǎng)EB API項(xiàng)目實(shí)戰(zhàn)干貨系列】教你一步步教你解決方案.


文章轉(zhuǎn)載出自 :? http://www.cnblogs.com/Flyear/p/4907323.html

總結(jié)

以上是生活随笔為你收集整理的【WEB API项目实战干货系列】- API访问客户端(WebApiClient适用于MVC/WebForms/WinForm)(四)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。