背景
公司启动了一个紧急项目,需要与几个第三方系统对接。
虽然一开始约定好了系统间交互的接口文档,但随着版本的迭代、需求的变更各系统都做了不小的改动。
问题
1.第三方的接口参数JSON属性名称与文档不一致
2.第三方的接口入参JSON结构与文档不一致
3.同一个业务,不同系统的接口结构不一样
如何在不修改原有代码的基础上,对参数进行动态的转换解决上述问题?
解决思路
参数转换可配置化,在数据库中维护一套原有JSON 与 目标JSON 的映射关系,调用封装好的json转换方法即可获取到转换后的JSON。
效果如下图:
转换配置示例
JSONObject转换
1.梳理映射关系(为便于理解这里用json来展示,实际需在数据库中配置)
2.数据库配置
#注意事项#
- config_name必填,用来区分不同参数配置信息
- 配置信息实际上是个树状结构 ,parent表是父节点,config_key表是子节点。
- *每条配置信息的根节点均为root, 第一个子节点必须是配置信息名称,然后才是参数的结构*(此处有优化的空间,但懒得改了...)
- type的取值,如果当前节点的value是JSONObject 则填写object,如果是JSONArray则填写list,其他填string(目前只支持全String类型,懒得扩展了...)
- 如果type为list , config_value 的配置要分层,下面会有例子。
3.转换结果
{
"target":
{
"no": "originValue",
"phone": "15888888888"
}
}
JSONArray 转换
1.梳理映射关系
2.数据库配置
3.转换结果
{
"target": [
{
"no": "originValue",
"phone": "15888888888"
},
{
"no": "originValue2",
"phone": "18688888888"
}
]
}