【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项目实战干货系列】教你一步步教你解决方案.

相关文章
相关标签/搜索