RequestExecutor 接口与 ResponseHandler 设计:实现不同 HTTP 网络请求框架的对接

2024-10-07
来源:网络整理

这很简单。它提供了3种方法和泛型参数,将真正的HTTP请求框架分为泛型请求类型和泛型代理类型的设计。它还提供了枚举类,所以我们将来会将它们连接起来。使用不同的HTTP网络请求框架时都可以实现该接口。

界面设计:

含义是代表请求的执行者。例如,无论Get请求还是Post请求都由子类实现,或者定制的特殊请求处理也由子类实现。该类只负责定义请求执行器。公共抽象。

设计:

所表示的响应处理器可以使用自定义响应处理器来解析和处理请求结果的数据。

设计与实施:

它提供了一个抽象的Post请求执行器,负责不同HTTP请求框架的Post实现的路由选择。内部选择的类封装了本框架请求的核心业务逻辑,并将其封装到相应的方法中。 ,这样就可以统一调用了,代码如下:

3、项目中请求和响应模型的设计

对于一个SDK来说,很常见的一点就是对接口的请求和响应进行建模,封装相应的Java类,并让用户为这些类提供参数。很多SDK设计都以 或 结尾或结尾作为请求和响应模型的设计。这也是值得我们学习的。当你在网上看到一个开放的Open API时,如果它提供了SDK,你就可以很容易找到对应的请求和响应模型。目前的蓝兔支付SDK设计中也提供了该设计。代码结构如下:

这里,为订单创建API、订单查询API和订单退款API设计了请求和响应模型。参数与其提供的API文档一致。同时提供了一个公共请求父类:该类与这些子类集成在一起。在一个作品中,还有一组策略模式+模板方法模式的融合。截图1中的代码如下:

第一张截图中,了解了蓝兔API后,我们定义了三个属性:商户号、时间戳、签名。这三个参数是 所有API都需要传递的三个参数。所以我们对其进行了抽象,并使用注解来表示请求的参数名称。提供一个公共方法来检查类上是否有所需参数的验证。

定义方法来完成请求参数的检查和统一签名处理。继续看代码:

这里我们定义了ign方法,让子类提供哪些参数不涉及参数签名。对于蓝图支付的Open API,必填项的参数需要签名,非必填项的参数不需要签名。是的,这里提供了默认方法。

同时定义了一个方法来获取签名的内容,并提供了模板方法设计模式中的钩子方法,让不同的子类提供实现。该方法也是一个抽象方法,实现的子类必须重写该实现的方法。 。

以创建订单请求为例:

这样就设计了一套请求模型。对于新的API的接入和集成,只需要定义不同请求结构的实现类即可。不需要关注请求的调度,也实现了开闭原则。

对于HTTP响应,在了解了蓝图支付的响应内容后,我们设计了一个公共类,并结合泛型来接收不同的响应类:

那么不同响应实现类的设计如下:

对于用户来说,只需要将响应内容传入方法中,就可以解析出符合当前结构的响应数据。

本文仅分享于此。如果分享太多,似乎大家都会很容易忘记。有兴趣的话可以先看一下代码。我们将在下一篇文章中继续分享这个SDK的设计。

07高峰论坛

03

总结

今天简单分享了蓝兔支付平台SDK的部分设计。如果您有兴趣,可以一起参与开发。你可以开发尚未实现的点并使用好的和优秀的设计。同步它并改善您的设计体验。设计经验往往来源于无数小型设计项目的实践。如果您想在稍后的面试过程中添加一行描述,您可以编写与此类似的自定义包设计和实现。 ,我个人觉得也不错。我坚信,一旦你熟悉了这个第三方Open API请求的SDK设计,你就可以非常优雅地编写代码。

分享