首页 > 代码库 > 【WEB API项目实战干货系列】- API访问客户端(WebApiClient适用于MVC/WebFor

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

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址: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.

技术分享

 

基本的HTTP传输

我们在实际的项目中是定义了一个ApiClient的静态类库,其通过HttpClient 再配合 Microsoft.AspNet.WebApi.Client类库,专门根据我们前面写的API做了更进一步的封装.

 

APIClient

我们先来看一下他提供的方法签名

技术分享

 

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的部分

技术分享

 

Query对象介绍

上面除了Query对象之外,其他的都容易理解, 在没有Query对象的时候,我们要拼出 URL的参数部分,我们通常会需要string来拼接,更好一点的办法是定义一个Dictionary来做自动连接, 这里我们为了更方便,

我们定义了一个Query对象,说到这里大家应该明白Query对象就是为了帮我们自动处理url的参数部分, 其核心基类是CoreQuery。

这里我们看几个内置的Query

LoginQuery

其提供了我们Login接口必要的参数, 在使用的时候我们可以直接new 一个loginQuery, 传入api调用的方法.

技术分享

 

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:

可以从下面参数看到是用来处理分页的请求的.

技术分享

 

CoreQuery.ParmsObj属性

除了常规的参数需要通过自定义单独的Query对象之外,对于一些很简单的APi, 如果我们需要对每个API接口都创建一个Query那岂不是很麻烦?

针对这个问题,我们想出了通过匿名对象来解决这个问题, CoreQuery下面有一个ParmsObj属性, 在使用的时候可以通过

技术分享

这种方式来动态的添加url参数,这样会大大减少我们定义的Query类的数量.

 

来张WebApiClient的类库全图

技术分享

这个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

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