开发者社区> walb呀> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

简介:
+关注继续查看

最近一直在整合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的过程分解,如需转载请自行联系原博主。



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
《单页Web应用:JavaScript从前端到后端》——1.3 精心编写的单页应用的用户效益
所有这些好处意味着,你可能会想把下个应用做成单页应用。每次点击后都会重新渲染整张页面的笨拙网站,容易日益疏远富有经验的用户。精心编写的单页应用具有互动和快速响应的界面,还伴有访问网络的功能,这将帮助我们把客户留在属于他们的地方:使用我们的产品。
1066 0
使用delphi 开发 web(三)动态脚本里面使用数据库
在主程序里面把数据库访问控件设置并注册好,在脚本里面使用数据库就非常简单。 可以类似下面的脚本访问数据库。     要实现数据库访问,我们采用的是Devart 公司的数据库访问控件。该公司有单独访问 oracle,sql server,my sql,interbase 的控件,也有UniDac 控件可以同时访问包括以上数据库 的其他数据库,例如db2,access,sqllite 等。
912 0
使用delphi 开发 web(四)使用ajax 与extjs交互
随着现在各种js 框架(例如extjs,Jquery)的迅猛发展,很多网站都开始使用这些框架开始设计 web 页面,而且为了提高用户体验,大量使用了AJAX 技术,可以动态实现很多网页内容, 本文就以extjs 的grid 为例,介绍一下使用webbroke的服务器 与js 框架的交互。
1031 0
使用delphi 开发 web(二)动态脚本的实现
看了前面的文章同学,都会认为delphi 开发web比较麻烦,没有PHP 和ASP 方便。 因为每次要改动网页的内容,就要重新编译一次,重新发布一次,这样也太麻烦了。那么我们就 做一个类似PHP 的动态web 服务器吧,一次编译发布后,就不用再改了,网站内容需要变化时,只 需要修改脚本就可以了。
926 0
20个让Web Developer开发生涯更加轻松的工具
Typetester 一个在线对比字体的工具,可以很直观得看到不同字体的差异   pForm 创建HTML表单的工具,能在瞬间创建很美观的表单,并输出html代码   ColourLovers 在线的调色板工具,你能够搜索到很多配色方案或提交你的配色方案   Firebug 无所不能的firebug,不多介绍了   HTML Entity Character Lookup HTML 实体 查询工具   960 Grid System 960 是个神奇的数字,960 是横向尺寸,960 网格系统是能够让设计师快速创建网页原型的辅助系统。
884 0
现代浏览器客户端Web开发 Project Silk
MS Pattern & Practices http://www.microsoft.com/practices 团队发布了Silk项目和相关参考,为我们进入HTML5的开发世界提供了很好的参考。  Project Silk provides guidance for building mai...
749 0
搜狗室验室 -Web开发相关技术报告下载
Web开发相关技术报告下载 重要提示:所有技术报告版权属搜狐公司研发中心所有,严禁在未经获得允许的情况下以任何形式加以转载! C10K问题---epoll简介 简介:编写连接数巨大的高负载服务器程序时,经典的多线程模式和select模式都不再适用。
895 0
web开发利器bboss mvc结合ext 4 desktop开发的桌面应用程序效果分享
web开发利器bboss mvc结合ext 4 desktop开发的桌面应用程序效果分享 废话少说,看效果图: 整体效果 开始菜单效果区域: 任务栏效果图: 窗口打开效果图:
691 0
x3d
网络公司Web开发团队管理的小结
工作五年多了,在最近的这家公司的日子里,既有开心也有难过,主要是自己的技术团队和公司整个商务部并没有很好地融合在一起。当中,有我的责任,也有他人的责任。营销为主导的公司,商务部的人员比较强势,尤其在业绩好的时候。
639 0
+关注
1038
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载