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

這幾天沒更新主要是由於沒有一款合適的後端框架來支持咱們的Web API項目Demo, 因此耽誤了幾天, 目前最新的代碼已經經過Sqlite + NHibernate + Autofac知足了咱們基本的Demo需求.web

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

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

image

 

基本的HTTP傳輸

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

 

APIClient

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

image

 

Get/Post

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

 

Execute

是Get,Post使用的基礎方法, Get/Post的操做都是經過他完成的操做.框架

參數說明:post

apiUrl: api的host地址this

methodName: api的方法路徑url

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項目實戰乾貨系列】教你一步步教你解決方案.

相關文章
相關標籤/搜索