API访问客户端
API访问客户端(WebApiClient适用于MVC/WebForms/WinForm)
这几天没更新主要是因为没有一款合适的后端框架来支持我们的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项目实战干货系列】教你一步步教你解决方案.
API访问客户端的更多相关文章
- 【WEB API项目实战干货系列】- API访问客户端(WebApiClient适用于MVC/WebForms/WinForm)(四)
这几天没更新主要是因为没有一款合适的后端框架来支持我们的Web API项目Demo, 所以耽误了几天, 目前最新的代码已经通过Sqlite + NHibernate + Autofac满足了我们基本的 ...
- 大数据实操2 - hadoop集群访问——Hadoop客户端访问、Java API访问
上一篇中介绍了hadoop集群搭建方式,本文介绍集群的访问.集群的访问方式有两种:hadoop客户端访问,Java API访问. 一.集群客户端访问 Hadoop采用C/S架构,可以通过客户端对集群进 ...
- IdentityServer4[3]:使用客户端认证控制API访问(客户端授权模式)
使用客户端认证控制API访问(客户端授权模式) 场景描述 使用IdentityServer保护API的最基本场景. 我们定义一个API和要访问API的客户端.客户端从IdentityServer请求A ...
- Entity Framework 6 Recipes 2nd Edition(9-4)译->Web API 的客户端实现修改跟踪
9-4. Web API 的客户端实现修改跟踪 问题 我们想通过客户端更新实体类,调用基于REST的Web API 服务实现把一个对象图的插入.删除和修改等数据库操作.此外, 我们想通过EF6的Cod ...
- asp.net core系列 57 IS4 使用混合流(OIDC+OAuth2.0)添加API访问
一.概述 在上篇中,探讨了交互式用户身份验证,使用的是OIDC协议. 在之前篇中对API访问使用的是OAuth2.0协议.这篇把这两个部分放在一起,OpenID Connect和OAuth 2.0组合 ...
- 第13章 切换到混合流并添加API访问 - Identity Server 4 中文文档(v1.0.0)
在之前的快速入门中,我们探讨了API访问和用户身份验证.现在我们想把这两个部分放在一起. OpenID Connect和OAuth 2.0组合的优点在于,您可以使用单个协议和使用令牌服务进行单次交换来 ...
- IdentityServer4 中文文档 -13- (快速入门)切换到混合流并添加 API 访问
IdentityServer4 中文文档 -13- (快速入门)切换到混合流并添加 API 访问 原文:http://docs.identityserver.io/en/release/quickst ...
- IdentityServer4【QuickStart】之切换到混合流并且添加API访问
切换到混合流并且添加API访问 前面的示例中我们开发了API访问和用户认证,现在我们要将两个合并到一起. OpenID Connect&OAuth 2.0组合的美妙之处是,你可以使用单一协议和 ...
- 5 weekend01、02、03、04、05、06、07的分布式集群的HA测试 + hdfs--动态增加节点和副本数量管理 + HA的java api访问要点
weekend01.02.03.04.05.06.07的分布式集群的HA测试 1) weekend01.02的hdfs的HA测试 2) weekend03.04的yarn的HA测试 1) wee ...
随机推荐
- js检测浏览器中是否安装了flash播放插件
这两天工作中需要在网页中嵌入flash小游戏,我使用的是swfobject.js version:1.5.其他方面都很好,唯独版本检测这里一直没有搞通,后来实在无奈之下,改用js来检测浏览器的flas ...
- 两个div在同一行,两个div不换行
方法一: <div style="display:inline"> <div id="div1" style="float:left ...
- Hive综合HBase——经Hive阅读/书写 HBase桌子
社论: 本文将Hive与HBase整合在一起,使Hive能够读取HBase中的数据,让Hadoop生态系统中最为经常使用的两大框架互相结合.相得益彰. watermark/2/text/aHR0cDo ...
- ImageButton消除使用setImageDrawable造成的边框问题。
使用ImageButton的时候,如果使用setBackgroundDrawable设置图片,会对可点击范围有影响,使用setImageDrawable方法设置图片,图片小的话,可以会有,这种有白色边 ...
- NodeJS - Express4.0错误:Cannot read property &#39;Store&#39; of undefined
Express在使用mongodb的时候app配置出错 //settings.js module.exports={ cookieSecret:"xxxx", db:"d ...
- SQL Server :理解DCM页
原文:SQL Server :理解DCM页 我们已经讨论了各种不同的页,包括数据页.GAM与SGAM页.PFS页,还有IAM页.今天我们来看下差异变更页(Differential Change Map ...
- Windows Phone开发(21):做一个简单的绘图板
原文:Windows Phone开发(21):做一个简单的绘图板 其实我们今天要说的就是一个控件--InkPresenter,这个控件并不是十分强大,没办法和WPF中的InkCanvas相比,估计在实 ...
- oracle转mysql总结(转)
ares-sdk初始开发测试使用的是oracle数据库,由于宁波通商的特殊需要,必须把数据库环境从oracle转向mysql. 现对转换过程中出现的问题及经验总结如下: 主键生成策略 创建一个专门记录 ...
- 【小白的java成长系列】——顶级类Object源代码分析
首先来说一下api文档使用,api这个词对有一定开发经验的java编程人员来说是非常喜爱的~ java当然也提供了api开发文档,下载地址:http://www.oracle.com/technetw ...
- pthread_t定义结构
linux下被定义为: 在linux履行pthread_t它被定义为 "unsigned long int",参考这里 Windows下这样定义: /* * Generic han ...