最近一直在整合WebAPI、Winform界面、手机短信、微信公众号、企业号等功能,希望把它构建成一个大的应用平台,把我所有的产品线完美连接起来,同时也在探索、攻克更多的技术问题,并抽空写写博客,把相应的技术心得和成果进行一定的介绍,留下开拓的印记。本文主要介绍混合框架整合Web API应用过程中,分析Winform界面如何一步步对Web API的调用处理的。

1、Winform界面的应用方向

在很多场合,分布式采用Web方式构建应用,不过相对Winform来说,Web界面的体验性没有那么好,界面呈现也相对单调 一些,而且涉及到和打印、摄像、读卡等硬件处理的时候,Winform的优势就更加明显了,Winform唯一被诟病的是其分布性的处理和安装发布的问题,分布性可以通过直接利用Web API的方式进行处理,从而逻辑集中在Web API层,而安装发布,则可以通过自动更新的模式进行处理,如目前很多桌面程序,都是自动更新的方式进行迭代更新。

因此Winform可以基于一个Web API的整体性平台,构建很多应用生态链。例如我们常见的微信应用(企业号,公众号,订阅号等)、以及Winform应用、原生APP、Web网站应用等等,如下图所示。

其中是把Web API作为核心层,可以在上面开发我们各种企业业务应用就可以了。

在前面介绍过相应的Web API的封装和调用规则,如下图所示,红色部分为Web API 的调用路线,从Winform客户端开始,经过统一门面结构Facade接口层,对Web API的服务层进行调用,下面这个图从大的方向来阐述了整个调用的路线,不过于调用细节的理解并不很准确,因为涉及到很多内容已经省略了。 下面我们将把整个调用的路线进行完整的阐述说明。

2、Winfrom界面调用WebAPI的过程

在前面的小节里面,我们说到了Winform调用Web API的过程,这个过程可以通过下面这个图示进行讲解。

1)首先我们在界面一般是通过定义一个Winform窗体,并在其中放置相应的控件来承载信息的,这个和普通的Winform是一样的,例如我们定义一个窗体对象FrmMember,以及FrmEditMember。

2)在主体界面里面,我们需要调用FrmMember这个窗体,可以通过对话框的方式,或者是多文档的方式进行调用显示。

            FrmEditMember dlg = new FrmEditMember();
dlg.ShowDialog();

或者多文档界面展示

ChildWinManagement.LoadMdiForm(this, typeof(FrmMember));

3)在界面里面,我们需要调用接口对象(Web API的客户端包装类)进行获取对应的信息,这里使用到了接口工厂CallerFactory<T>这种方式进行调用。

MemberInfo info = CallerFactory<IMemberService>.Instance.FindByID(ID);

4)上面这个工厂类CallerFactory<T>是负责获取到对应的接口实现类并创建对象,方便我们进行调用处理。它的逻辑主要是通过IMemberService接口所在的程序集(例如WHC.CloudMember.WebApiCaller),然后获取对应接口的实现类,并构建一个这样的接口实例出来使用的。

例如字典模块,混合框架里面,他们的各个模块的实现类是放在程序集里面的,我们的目标就是根据接口的名称,从对应的部分获取相应的Web API接口调用包装类进行使用。

5)我们构建的Web API接口调用包装类(WebApiCaller里面的内容),为了实现更加方便的调用,我们为它进行了一定的封装,使它在基于泛型的基础上具有基础增删改查、分页等功能的调用处理。

从这个类的定义里面,我们可以看到Web API的调用包装类MemberCaller是继承自BaseApiService<MemberInfo>这样的泛型基类的。这个BaseApiService<MemberInfo>就具有对特定对象的增删改查、分页等基础调用功能了。

例如在基类BaseApiService里面的查找对应对象的接口代码如下所示

        /// <summary>
/// 查询数据库,检查是否存在指定ID的对象(用于字符型主键)
/// </summary>
/// <param name="key">对象的ID值</param>
/// <returns>存在则返回指定的对象,否则返回Null</returns>
public virtual T FindByID(string key)
{
var action = "FindByID";
string url = GetTokenUrl(action) + string.Format("&id={0}", key); return JsonHelper<T>.ConvertJson(url);
}

这里面的逻辑就是构建一个带有token(用户身份标识)的连接字符串和参数字符串,从而获取HTML内容后把它转换为具体对象的处理了。

其中转换的代码就是利用了Newtonsoft.Json的对象的转换,具体代码如下所示。

        /// <summary>
/// 转换Json字符串到具体的对象
/// </summary>
/// <param name="url">返回Json数据的链接地址</param>
/// <returns></returns>
public static T ConvertJson(string url)
{
HttpHelper helper = new HttpHelper();
helper.ContentType = "application/json"; string content = helper.GetHtml(url);
VerifyErrorCode(content); T result = JsonConvert.DeserializeObject<T>(content);
return result;
}

6)用户的访问令牌(Token信息)

当然我们调用这个接口前,我们需要获取到对应的Token(用户令牌)然后才能进行API的调用了。这个Token的机制采用了JWT的令牌生成方式,具有很好的通用性。

例如我使用自己的Web API调试工具,获取到对应的token方式如下所示。下面的1-5的标识就是获取token所需要的签名数据,当然连接还带有几个账号认证所需要的信息了,如账号密码、所在公司等信息。

当然我们也可以使用浏览器进行测试获取Token的信息,只是没有那么方便而已。

系列文章如下所示:

Web API应用架构在Winform混合框架中的应用(1)

Web API应用架构在Winform混合框架中的应用(2)--自定义异常结果的处理

Web API接口设计经验总结

Web API应用架构在Winform混合框架中的应用(3)--Winfrom界面调用WebAPI的过程分解

Web API应用架构在Winform混合框架中的应用(4)--利用代码生成工具快速开发整套应用

Web API应用架构在Winform混合框架中的应用(5)--系统级别字典和公司级别字典并存的处理方式

Web API应用架构在Winform混合框架中的应用(3)--Winfrom界面调用WebAPI的过程分解的更多相关文章

  1. Web API应用架构在Winform混合框架中的应用(5)--系统级别字典和公司级别字典并存的处理方式

    在我这个系列中,我主要以我正在开发的云会员管理系统为例进行介绍Web API的应用,由于云会员的数据设计是支持多个商家公司,而每个公司又可以包含多个店铺的,因此一些字典型的数据需要考虑这方面的不同.如 ...

  2. Web API应用架构在Winform混合框架中的应用(4)--利用代码生成工具快速开发整套应用

    前面几篇介绍了Web API的基础信息,以及如何基于混合框架的方式在WInform界面里面整合了Web API的接入方式,虽然我们看似调用过程比较复杂,但是基于整个框架的支持和考虑,我们提供了代码生成 ...

  3. Web API应用架构在Winform混合框架中的应用(2)--自定义异常结果的处理

    在上篇随笔<Web API应用架构在Winform混合框架中的应用(1)>中我介绍了关于如何在Winfrom里面整合WebAPI,作为一个新型数据源的接入方式,从而形成了三种不同的数据提供 ...

  4. Web API应用架构在Winform混合框架中的应用(1)

    在<Web API应用架构设计分析(1)>和<Web API应用架构设计分析(2)>中对WebAPI的架构进行了一定的剖析,在当今移动优先的口号下,传统平台都纷纷开发了属于自己 ...

  5. Web API应用架构设计分析(1)

    Web API 是一种应用接口框架,它能够构建HTTP服务以支撑更广泛的客户端(包括浏览器,手机和平板电脑等移动设备)的框架, ASP.NET Web API 是一种用于在 .NET Framewor ...

  6. Web API应用架构设计分析(2)

    在上篇随笔<Web API应用架构设计分析(1)>,我对Web API的各种应用架构进行了概括性的分析和设计,Web API 是一种应用接口框架,它能够构建HTTP服务以支撑更广泛的客户端 ...

  7. 在Winform混合式框架中整合外部API接口的调用

    在我们常规的业务处理中,一般内部处理的接口多数都是以数据库相关的,基于混合式开发的Winform开发框架,虽然在客户端调用的时候,一般选择也是基于Web API的调用,不过后端我们可能不仅仅是针对我们 ...

  8. [angularjs] MVC + Web API + AngularJs 搭建简单的 CURD 框架

    MVC + Web API + AngularJs 搭建简单的 CURD 框架 GitHub 地址:https://github.com/liqingwen2015/Wen.MvcSinglePage ...

  9. 混合框架中Oracle数据库的还原处理操作

    在较早期的随笔<Oracle如何实现创建数据库.备份数据库及数据导出导入的一条龙操作>粗略介绍了Oracle数据库的备份还原操作,本文想从开发框架的基础上介绍Oracle数据库的脚本或者还 ...

随机推荐

  1. 备忘: Install MODI for use with Microsoft Office 201x

    简介 Microsoft Office 2010 中删除了 Microsoft Office Document Imaging (MODI).本文提供了在计算机上安装 MODI 的步骤,还说明了重新获 ...

  2. SQL SERVER--DBA 常用到的一些脚本

    自己整理了一些常用到的脚本,希望对各位有用 下载地址 --================================== 妹子不能少,是吧 BTW, 妹子是我辛苦百度来的,请不要求种求介绍各种求 ...

  3. Ubuntu环境搭建系列—WPS/LAMP/Python篇

    由于篇幅不宜太长,所以就将此文分成了两部分,在第一部分中我们讲解了google-chrome(谷歌浏览器)的安装,jdk的环境配置,android开发的环境搭建.那么在第二部分中,位们将讲解的是金山W ...

  4. SharePoint—用REST方式访问列表

    REST的定义与作用 在SharePoint 2010中,基本上有如下几种数据访问方式: 服务器端对象模型 LINQ to SharePoint Web Service 客户端对象模型 ADO.NET ...

  5. 扩展GridView控件——为内容项添加拖放及分组功能

    引言 相信大家对GridView都不陌生,是非常有用的控件,用于平铺有序的显示多个内容项.打开任何WinRT应用或者是微软合作商的网站,都会在APP中发现GridView的使用.“Tiles”提供了一 ...

  6. redis系列-redis的持久化

    redis对数据的持久化有两种方式:RDB(快照保存)和AOF(命令日志). RDB 介绍:将内存快照保存到磁盘,dump.rdb二进制文件 触发:满足“N 秒内数据集至少有 M 个改动”,或使用sa ...

  7. Git学习笔记(4)——添加远程仓库,克隆远程库,以及库的推送

    本文记录了远程库的连接和库的克隆和推送. 远程仓库简介 Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上.有一台机器有一个原始版本库,此后,别的机器可以“克隆”这个原始版本库,而且 ...

  8. DIY一个前端模板引擎.(一)

    前端MVVM 模式有点很多,完全摆脱了意大利面条式的代码.个人认为,所有MVVM 的框架基础就是一个高性能的JS模板引擎,它极大简化了 DOM 操作, 使页面渲染和业务逻辑彻底分离.为了理解模板引擎原 ...

  9. CSS3与页面布局学习总结(四)——页面布局大全BFC、定位、浮动、7种垂直居中方法

    目录 一.BFC与IFC 1.1.BFC与IFC概要 1.2.如何产生BFC 1.3.BFC的作用与特点 二.定位 2.2.relative 2.3.absolute 2.4.fixed 2.5.z- ...

  10. EF架构~为EF DbContext生成的实体添加注释(T5模板应用)

    回到目录 相关文章系列 第八回 EF架构~将数据库注释添加导入到模型实体类中 第二十一回  EF架构~为EF DbContext生成的实体添加注释(T4模板应用) 第二十二回EF架构~为EF DbCo ...