如何做一个简单的开放接口(2)-核心引擎(上)

本文主要介绍了如何构建一个简单的开放接口平台的核心引擎,包括功能需求、选择Filter而非装饰模式的原因、Handler接口定义、配置方式、Handler执行过程、消息格式的参考实现以及异常处理策略。重点讨论了Handler的线程安全、可配置性以及异常在inWay、业务逻辑和outWay过程中的处理机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、要实现的功能

书接上回,本回书我们要完成开放接口平台核心引擎的多Handler支持机制。

如图1所示。

开放接口服务器端架构
图1 开放接口服务器端架构

2、Filter还是装饰模式

装饰者模式貌似是一个实现的候选,类似Java的I/O实现。
多“装饰”一层,就获得了新的功能,原来的功能还在。

对我现在的应用场景来说,这种实现方式过于复杂了。
相对而言,Filter更简洁。

当前的应用场景对性能是有极高要求的,不适合使用哪怕稍微复杂的模式。

3、Handler接口定义

我的Handler接口定义如下。

public interface Handler {
   
    public void inWay(HttpServletRequest request,HttpServletResponse response); 
    public void outWay(HttpServletRequest request,HttpServletResponse response);
}

更有节操的童鞋会自己定义Request、Response0,甚至Context对象。以便脱离Web容器的限制,进一步实现自己的底层通信协议。

我这里先偷个懒,等有时间了慢慢来。

Handler接口中,inWay方法对应图1左侧的向下箭头,outWay对应右侧的向上箭头。

这样,在同一个Handler定义的逻辑。
对于实现序列化功能的Handler,inWay中实现反序列化,outWay中实现序列化。
对于实现加密功能的Handler,inWay中实现解密,outWay中实现加密。
对于实现压缩功能的Handler,inWay中实现解压缩的逻辑,outWay中实现压缩的逻辑。

这样,当不需要某个Handler的时候,直接去掉就好了。

当然,outWay中可以do nothing。

另外,非常重要的,Handler实现类不可以有自己的属性。Handler实例不能有“状态”。
我们需要Handler是线程安全的。

3、可配置

多个Handler是可配置的,每个Handler链可以服务于一个或多个接口。

在Handler无状态、线程安全的基础上,我们可以采用在每个JVM中Handler单例的方式,避免频繁创建、回收Handler对象的损失。

配置信息可以保存在properties文件中,可以保存在xml中,可以保存在数据中,范例如下:

openapi.handler.keys=surface,encrypt,auth
openapi.handler.surface=cn.hailong.common.openapi.handler.SurfaceHandler
openapi.handler.encrypt=cn.hailong.common.openapi.handler.EncryptHandler
openapi.handler.auth=cn.hailong.common.openapi.handler.AuthHandler

配置系统中可能用到的所有Handler,并在系统启动时加载。

在上面的配置中,配置了每个Handler的类名,加载的时候

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值