接口设计

接口要求:

1、对外提供一个服务

2、可扩展

3、安全性

4、针对不同系统返回不同字段

 

 

1、对外提供一个服务

以前的webservice方式是针对不同的功能提供不同的url。比如以下2个市场经营提供的接口:

1)A系统查询待办数量接口

http://ip:port/services/ServiceForMOA

2)A系统创建工单接口

http://ip:port/services/BusinessInterfaceService

 

咱们现在的系统比较大,如果说针对不同的功能,都创建一个接口,那么试想我得维护多少接口文档,接口文档内容越多,就越难维护越容易出错。

 

那么要实现统一的对外服务接口,比如只有一个url

http://ip:port/zjmarket/BOMCJK

同时,客户端能获取调用到不同功能的方法,那么我们想到的解决办法就是通过参数告诉我,需要调用哪个方法,在代码实现上可以是通过反射,也可以是通过工厂模式。

 

2、可扩展可维护

其实上面第一点要求提供对外提供一个服务,就要求了接口的可扩展性。

可扩展性的定义是,客户有了一个新的功能要求,那么我不需要修改以前的代码,可以很好的发布一个接口。

可以发现以上第一点的解决方案就可以实现可扩展的要求。

当我有一个新的功能时,我新建一个类,写上几个方法即可。完全不需要修改以前的任何代码。

 

3、安全性

       说到安全性,第一个想到的就是密钥了。

       两个系统间商定一个密钥,在调用接口时是必须携带该密钥经加密后的md5参数签名。

       

4、针对不同系统返回不同字段

维护一张字段表(接口方法名、字段名),维护一张字段与系统的映射表(字段名、系统名)

在调用接口时,需传参系统名。在接口实现上,可以通过表关联查询系统与字段的映射数据,或者程序初始化时将这些数据缓存入redis,再从redis高效获取。

在系统初期,映射表数据不多的情况下,性能的优势或许不大,但是到后面会怎样,大家都知道了。。。很多系统越跑越慢,大都是因为在很多可以优化性能的地方,没有优化


结论:

接口参数:Map<String,String> 分为公共参数和业务参数2部分,前者包含系统名、签名参数、方法名,后者根据不同业务分别有不同的参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值