省市区项目架构之api的调用

  1. 首先,我们在坐省市区项目时会遇见 比如区县的平台上需要查询某些表,但是这些表只有在省级平台有,我们此时有以下几种办法(我只说我见过的)
    (PSSSSSSS:演示图为单位项目)
    (1) 在省级平台创建asmx项目实现webservice(或webapi以及一般处理程序);
    (2) 在数据库做视图或者触发器 通过 第三方的软件(我原来知道一款现在连名字都忘了)进行定时任务

首先我们来分析这两种方法的不足(说实话,优势我也没看到),数据库的呢一种首先我们要依赖第三方,如果第三方改版更新或者我们更改第三方的来源,对于开发和实施压力都是极大的,都需要一个熟悉的过程,而且对于数据库负载也重,(PS:我们单位运营没有实现读写分离,所以不可能给每个字段都加上一般索引,这样的数据库写入负荷太大)
然后我们说的第一个放法。。。em……怎么说呢是可以用的但是这对于省级平台的服务器,来说也是种负担啊,因此我们说的下个办法就是把接口从省级平台独立出来

首先我们要在我们要建一个独立的web项目起名叫WJH.api (可以挂靠到省级平台的解决方案上,特别是你需要获取省级平台的程序集情况下),以及两个类库项目wjh.RemoteServices和WJH.FrameworkBLL
省市区项目架构之api的调用省市区项目架构之api的调用
2.接下来我们先来实现接口
2.1 api 项目内结构,我们不用像下图建这么多文件夹,就建localization和wService两个就好了,一个用来做handlers接口,一个用来做webservice接口
省市区项目架构之api的调用

2.1.1 api项目webconfig配置:我们要在webconfig中配置这样一句省市区项目架构之api的调用
当访问.json文件的时候调用IAPI的handler
2.1.2同时再创建一个类库项目WJH.Core(用来创建各个项目的handler实例和接口,这里不多做表述,不懂的小伙伴自己去百度IHttpHandler实现,但其中需实现IHandlerFactory接口,和IApiHandler类)
省市区项目架构之api的调用
2.1.3
在IApiHandler需实例化IHandlerFactory接口并调用page_load方法
2.1.4 在API建立接口调用类如图
省市区项目架构之api的调用
到此,api接口创建完成
3.调用api
我们在区县项目中创建的两个类库项目(wjh.RemoteServices,WJH.FrameworkBLL)分别作用是,http请求与响应封装类,分层处理操作类
3.1 首先我们来封装FrameworkBLL,分别创建四个文件夹命名如下,和一个名为serviceContext的类,
省市区项目架构之api的调用
3.1.2 srviceContext是调用的入口类 实现以下几个方法
省市区项目架构之api的调用
省市区项目架构之api的调用
其中主要调用的是Resolve()方法:首先获取参数T的TYPE (传入的是FrameworkBLL下Interface接口类) ,获取当前成员名称并删除前头的I,拼接命名空间加去I后的名称 ,其中命名空间中间部分 调用CurrentInstance的get,set方法,里面判断了当前项目是省,市,区哪个平台 如果是区县平台则调用命名空间PhysicsProvider(既刚建的其中文件夹一个)其余平台调用其余三个文件夹的命名空间以此类推
通过Assembly.Load(CurrentNameSpace).GetType(typeName, true)加载wjh. FrameworkBLL程序集并获取要调取的接口实体类Type(就是PhysicsProvider文件夹中你要用的呢个类,在此我们先随便命名一个,就叫DATAcenter.cs)
Activator.CreateInstance(type);通过这个方法传入刚获取到DATAcenter实体类Type,实例化该类并返回,我们便可在操作类里调用返回的实例化类中的方法

下面我们说实例化的这个DATAcenter中方法 怎么去调用我们封装好的api 这个就要用到我们建的第三个类库项目HengQian.RemoteServices

4.RemoteServices实现HTTP封装请求与参数解析返回

首先让我们看一眼FrameworkBLL. PhysicsProvider.DATAcenter中的方法
省市区项目架构之api的调用
可以看到在区县接口的DATAcenter实现类里面 我们用到了RemoteServices提供的DATAcenter(其余的平台就通过,其余三个文件中的类直接访问底层区县数据库)

4.2我们接下来分析RemoteServices的代码
省市区项目架构之api的调用
首先在RemoteServices 中一定要实现一个Config.cs
他的作用是声明api的调用路径 ,当然我们也可以写配置XML 但是个人不建议这样,因为这样就把接口位置暴露出来了
省市区项目架构之api的调用
我们在里面写好DATAcenter api的调用路径就成了

之后我们就要封装RemoteServices.RestApi_v1.Apps.DataCenter()了
这里不多余解释 直接粘贴代码吧
省市区项目架构之api的调用
到此api调用就形成闭环了