最近一直在整合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应用架构设计分析(1)

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

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

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

  3. ASP.NET Core与Dapper和VS 2017使用JWT身份验证WEB API并在Angular2客户端应用程序中使用它

    目录 介绍 背景 步骤1 创建ASP.NET Core Web API项目 Fitness.JWT.API项目说明 使用代码 startup.cs JwtIssuerOptions.cs JwtCon ...

  4. ASP.NET Web API 处理架构

    这篇文章主要是介绍ASP.NET Web API的处理架构:当一个HTTP请求到达直到产生一个请求的过程.ASP.NET Web API 的处理架构图如下,主要有三层组成:宿主(hosting),消息 ...

  5. web前端教程之如何在React框架中使用ECharts图库表制图?

    在前端开发过程中避免不会遇到需要进行数据可视化的操作,但单单通过html5的Canvas实现起来比较麻烦,所以才会用到ECharts,HighCharts,,Chart.js等,今天小千就来教大家如何 ...

  6. 【转】Web API项目中使用Area对业务进行分类管理

    在之前开发的很多Web API项目中,为了方便以及快速开发,往往把整个Web API的控制器放在基目录的Controllers目录中,但随着业务越来越复杂,这样Controllers目录中的文件就增加 ...

  7. 鸿蒙开发访问webapi,Web API接口

    #e# 3.集合和分页的处理 在很多接口里面,我们都需要用到分页的处理,Web API也不例外,这样可以提交数据检索效率,减少服务器数据处理的压力,同时也提交客户端的数据显示速度. 一般的集合接口定义 ...

  8. 使用ASP.NET Web API和Handlebars的Web模板

    目录 介绍 目标听众 期待什么 示例代码概述 总览 Handlebars和模板 使用代码 起步 第1步 从GitHub下载 介绍 Web应用程序的开发趋势不时发生变化.几年前我们用来构建的应用程序体系 ...

  9. ASP.NET Web API MediaTypeFormatter

    MediaTypeFormatter提供了HTTP Request body data与.Net类型之间的无缝转换. 什么是MediaType Media Type指的是HTTP header中的co ...

最新文章

  1. Problem A: 平面上的点——Point类 (I)
  2. python中matplotlib.pyplot的使用示例
  3. 如何在博客园的博客中添加可运行的JS(转载)
  4. 不用临时变量交换两个变量的值
  5. java细粒度锁_Java细粒度锁实现的3种方式
  6. leetcode461. 汉明距离
  7. cv2.error: OpenCV(4.5.2) : -1 : error: (-5:Bad argument) in function ‘rectangle‘
  8. python 将两幅图拼接_清华王教授典藏的python电子书,整整10个G拿去不谢
  9. 9 MM配置-主数据-维护物料管理的公司代码
  10. android 6.0 蓝牙进程,Android6.0-蓝牙权限问题
  11. Pytorch实现Seq2Seq(Attention)字符级机器翻译
  12. 计算机网络复习-运输层
  13. JavaScript的学习指南
  14. 流畅的Python(1)- 一摞Python风格的纸牌
  15. 在Ubuntu系统中安装字体(以安装华文行楷和方正舒体为例)
  16. 阿里云安装MySQL数据库全过程(适合小白)
  17. 各大IT公司校园招聘程序猿笔试、面试题集锦
  18. 怎样使用GetAsyncKeyState()
  19. Node-RED教程(十五):工业仪表盘开发
  20. 如何快速测试面试者办公软件水平,金山办公软件校园招聘面试经验_金山办公软件2022校园招聘求职经验_大街网...

热门文章

  1. 第二十四章:页面导航(六) 1
  2. 【php】使用phpdbg来调试php程序
  3. Elixir 1.7改进错误处理、日志和测试
  4. cisco查看模块是单模多模
  5. 求最大子数组(贪心算法)
  6. tomcat 访问本地C,D盘等文件配置
  7. [转载]触摸屏网站制作的小细节
  8. linux 防火墙 iptables的简单使用
  9. 清理net use的BAT
  10. 爬取人力资源社保局咨询问题