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

来源:http://www.cnblogs.com/wuqian1/archive/2017/04/22/6747465.html
-Advertisement-
Play Games

小分享:我有幾張阿裡雲優惠券,用券購買或者升級阿裡雲相應產品最多可以優惠五折!領券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 這幾天沒更新主要是因為沒有一款合適的後端框架 ...


小分享:我有幾張阿裡雲優惠券,用券購買或者升級阿裡雲相應產品最多可以優惠五折!領券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03


這幾天沒更新主要是因為沒有一款合適的後端框架來支持我們的Web API項目Demo, 所以耽誤了幾天, 目前最新的代碼已經通過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://qingqingquege.cnblogs.com/p/5933752.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks; using System.Net;using System.Manageme ...
  • 小分享:我有幾張阿裡雲優惠券,用券購買或者升級阿裡雲相應產品最多可以優惠五折!領券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 在使用EF的過程中,導航屬性的lazy lo ...
  • 小分享:我有幾張阿裡雲優惠券,用券購買或者升級阿裡雲相應產品最多可以優惠五折!領券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 什麼是數組?數組是一種數據結構,包含同一個類 ...
  • 小分享:我有幾張阿裡雲優惠券,用券購買或者升級阿裡雲相應產品最多可以優惠五折!領券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 在上一篇中,我們從理論和概念上詳細的瞭解了L ...
  • 小分享:我有幾張阿裡雲優惠券,用券購買或者升級阿裡雲相應產品最多可以優惠五折!領券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 C# 截取帶路徑的文件名字,擴展名,等等 的 ...
  • 小分享:我有幾張阿裡雲優惠券,用券購買或者升級阿裡雲相應產品最多可以優惠五折!領券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 在SOA的世界中,最重要的一個概念就是契約( ...
  • 小分享:我有幾張阿裡雲優惠券,用券購買或者升級阿裡雲相應產品最多可以優惠五折!領券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 ASP.NET Core WebAPI 開發 ...
  • 小分享:我有幾張阿裡雲優惠券,用券購買或者升級阿裡雲相應產品最多可以優惠五折!領券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 在做增刪改查先,先介紹幾個知識點: 1.代理 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...