【WEB API项目实战干货系列】- API访问客户端(WebApiClient适用于MVC/WebForms/WinForm)(四)
目前最新的代码已经通过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://www.cnblogs.com/Flyear/p/4907323.html
【WEB API项目实战干货系列】- API访问客户端(WebApiClient适用于MVC/WebForms/WinForm)(四)相关推荐
- 【WEB API项目实战干货系列】- API登录与身份验证(三)
上一篇: [WEB API项目实战干货系列]- 接口文档与在线测试(二) 这篇我们主要来介绍我们如何在API项目中完成API的登录及身份认证. 所以这篇会分为两部分, 登录API, API身份验证. ...
- 【WEB API项目实战干货系列】- WEB API入门(一)
这篇做为这个系列的第一篇,做基本的介绍,有经验的人可以直接跳到第二部分创建 ProductController. 创建 Web API 项目 在这里我们使用VS2013, .NET 4.5.1创建一个 ...
- 【WEB API项目实战干货系列】- 接口文档与在线测试(二)
这一篇我们主要介绍如何做API帮助文档,给API的调用人员介绍各个 API的功能, 输入参数,输出参数, 以及在线测试 API功能(这个也是方便我们自己开发调试) 我们先来看看我们的API最终帮助文档 ...
- 视频教程-Ruby on Rails打造企业级RESTful API项目实战我的云音乐-Ruby/Rails
Ruby on Rails打造企业级RESTful API项目实战我的云音乐 任苹蜻,爱学啊创始人 & CEO,曾就职于某二车手公司担任Android工程师后离职创办爱学啊,我们的宗旨是:人生 ...
- 菜鸟级三层框架(EF+MVC)项目实战之 系列一 EF零基础创建领域模型
系列概述:全系列会详细介绍抽象工厂三层的搭建,以及EF高级应用和 ASP.NET MVC3.0简单应用,应用到的技术有Ef.Lambda.Linq.Interface.T4等. 由于网上对涉及到的技术 ...
- Selenium Web 自动化 - 项目实战(三)
Selenium Web 自动化 - 项目实战(三) 2016-08-10 目录 1 关键字驱动概述 2 框架更改总览 3 框架更改详解 3.1 解析新增页面目录 3.2 解析新增测试用例目录 ...
- WEB前端项目实战/酒仙网开发-李强强-专题视频课程
WEB前端项目实战/酒仙网开发-204人已学习 课程介绍 WEB前端项目实战/酒仙网开发 课程收益 WEB前端项目实战/酒仙网开发 讲师介绍 李强强 更多讲师课程 ...
- OAuth2.0项目实战干货(亚马逊平台对接)
消息队列的对比-Auth2.0项目实战-亚马逊平台对接 一 OAuth2.0介绍 二 开发背景 三 Auth2.0项目实战***干货 Auth2.0数据流 亚马逊平台: 作为外部第三方平台 内部应用平 ...
- 从0使用Ruby on Rails打造企业级RESTful API项目实战之我的云音乐
本节对我们项目实现的功能和知识点做一个简单的介绍,因为是RESTful API项目,所以对于后端来说基本上没有什么UI界面可展示,那我们就在关键的点,使用客户端(Android)实现的效果图. 课程简 ...
最新文章
- Vsftp 安装配置(转)
- Linux服务器上zsh和bash的对比
- 听说过代码洁癖,还没听说过有 Bug 洁癖的?
- android 设置Button或者ImageButton的背景透明 半透明 透明
- SPField的几种name的释疑
- 缓存机制 java_缓存机制:java中缓存的原理
- “约见”面试官系列之常见面试题第二十八篇之vue中的混合(minix)实例理解
- Python 的协程库 greenlet 和 gevent
- YOLOv5永不缺席 | YOLO-Pose带来实时性高且易部署的姿态估计模型!!!
- 打乱 数字_“142857”金字塔中的神秘数字,其中隐藏什么秘密?
- 2019全球IT行业薪酬报告:平均年薪超70万!最高薪职位竟是...
- A段架构设计_隽语集(Business Thinking _1201)
- 使用人性化的Linux防火墙CFW阻止DDOS攻击
- iOS Safari阅读模式分析过程
- 坦克大战Java版(文末附下载地址)
- c++中using的几种用法
- python 操作redis集群
- kestrel服务器性能,深入理解kestrel的应用
- 国外优秀JavaScript资源推荐
- 光线步进——RayMarching入门