首页 > 其他分享 >接口防腐层

接口防腐层

时间:2023-08-09 14:25:23浏览次数:37  
标签:调用 防腐 系统 接口 RPC 我们

网上也看到一些防腐层的优秀文章,在实际的开发项目中,不可避免的,我们也使用到了防腐层,对防腐层,简单总结一下:

1. 防腐层的意义是什么?

防腐层隔离上游的功能,防腐层通过已有接口和外部系统交互,在内部做己方和他方模型的转换。

简单来说,防腐层一般为了隔离两个系统之间的变化,防止一个系统的微小变化会影响到另外一个系统;还有一个场景,两个系统的技术栈不一致,所以需要一层代理来兼容。

2. 防腐层的职责

(1)异常降级:对RPC可能出现的异常进行捕获

(2)超时/重试:RPC接口的超时、重试统一管理;

(3)数据校验:对返回值的正确性、边界值进行校验,进行数据的基本防御,业务代码边界值的解耦;

(4)接口防腐:转换VO对象的时候,避免下游接口的修改,导致自身系统的修改;

3. 防腐层的目的

(1)代码复用:RPC的调用场景差异化比较小,proxy层调用,提高开发效率;

(2)提供便利性:调用方可以直接调用,对RPC的结果可以直接使用,不用考虑NPE、RPC等异常;

4. 思考

防腐层要做多少事情才是合适的,而又不显得防腐层很臃肿、很笨重?

我们平时代码利用防腐层主要做的一些事情,如解封装、接口检验、处理异常、打印日志等;很多时候处理的是一些防止过度开发的模板性代码。

这里说到过度开发,那就会有一个问题:我们在对接第三方的时候,使用到了第三方的接口与其对应的元数据,那么第三方接口返回的元数据我们是否可以直接使用?

如果直接使用,接口发生改动,返回元数据变化,我们其实也没能真正意义上做到解耦,除了防腐层的其他地方也还是要做改动。如果做了返回值的convert,对接接口过多的时候,这样的防腐层会显得很笨重,过度开发,这样的矛盾怎么去解决?这里就涉及防腐层的一个边界问题。

那就要说到防腐层出现的目的,最初是为了屏蔽其他系统的域模型,入参和出参是需要我们自己定义。但是每个接口都这样处理我们这样开发量很大,且存在不合理的地方。主要因为我们系统维护了别人域元数据的对等。

这个边界,可以这么理解:

如果依赖的下游经常有数据变动,或者说域模型和我们自己域的域模型没有关联,那我们防腐层就需要进行这样的convert,自己定义一份;如果依赖的下游比较稳定,我们直接使用也是可以的。

标签:调用,防腐,系统,接口,RPC,我们
From: https://www.cnblogs.com/cytc/p/17616734.html

相关文章

  • PHP写一个 Api接口需要注意哪些?考虑哪些?
    随着互联网的飞速发展,前后端分离的开发模式越来越流行。编写一个稳定、可靠和易于使用的API接口是现代互联网应用程序的关键。本文将介绍在使用thinkphp6框架开发API接口时需要注意的要点和考虑的问题,并提供详细的逻辑步骤和代码案例。1.设计请求与响应数据结构在开始编......
  • 如何用PHP写接口
    当用PHP编写API接口时,可以使用PHP中的框架(如Laravel、Symfony、CodeIgniter等)来简化开发过程。接下来,以使用Laravel框架为例,提供一个简单的示例代码:首先,确保已经安装了Laravel框架,并在命令行中进入项目目录,执行以下命令创建一个新的API控制器和路由:phpartisanmake:controller......
  • 在最新更新的 Windows 系统中使用 .net 程序调用一些 https 接口时出现错误:请求被中止
    这是因为出于安全原因,新更新的系统中会默认禁用一些已经过时不安全的加密协议如:SSL3.0、TLS1.0、TLS1.1等但并不是所有接口服务器都已经更新支持了更新的协议所以在确认安全的情况下,可以将这些旧的协议再次启用,以达到兼容旧接口调用的目的方法1:注意:这个修改会在系统全局......
  • soso地图api接口地理解析geocoder检索示例----并在信息框显示经纬度
    api官网:http://api.map.soso.com/doc_v2/example.html?sample-geocoding-simple#8map示例代码如下(保存为html打开可见效果):<!DOCTYPEhtml><html><head><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><title>......
  • HandlerSocket的perl接口操作方法
    实例化:/*   *String $host:MySQLip;  *String $port:handlersocket插件的监听端口,它有两个端口可选:一个用于读、一个用于写   */ $hs=newHandlerSocket($host,$port);运用例子:#9998为读取端口详见上一篇handlersocket的安装my$args={host=>'loca......
  • 百度地图api接口poi检索示例----并在信息框显示经纬度
    api官网http://developer.baidu.com/map/jshome.htm例子代码(保存为静态页面html可见效果如下):<html><head><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><metaname="viewport"content="initial-scale=......
  • soso地图api接口poi检索示例----并在信息框显示经纬度
    api官网:http://api.map.soso.com/doc_v2/example.html?sample-search-simple#7map示例代码如下(保存为html打开可见效果如下图):<!DOCTYPEhtml><html><head><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><title>......
  • 高德地图api接口poi检索示例----并在信息框显示经纬度
    api官网链接:http://api.amap.com/Javascript/example#http://api.amap.com/Javascript/plugin_detail/id/0代码示例如下(保存为html打开可见效果如下图):<!DOCTYPEhtml><html><head><metahttp-equiv="Content-Type"content="text/html;charset=utf-8&qu......
  • RTSP/Onvif视频服务器LntonNVR(源码版)视频平台获取录像接口返回精确的录像文件的具体操
    LntonNVR视频平台可实现RTSP/Onvif协议接入设备、实时直播、录像、检索与回放、存储、视频分发等视频能力。在录像功能上,LntonNVR支持7*24小时不间断录像,也可以设定录像计划,对指定时间进行录像,并且支持录像的检索与回放、支持本地录像回放。有用户需要获取LntonNVR平台录像视频指定......
  • 使用$.ajax 来调取后台接口,一定要用try/catch包起来
    1、因为如果不用try/catch包起来,如果遇到连不上接口的情况,就会只在控制台输出信息,前台收不到报错信息try{varresponse=await$.ajax({type:'POST',url:url,data:null,contentType:"application/json;charset=UTF-8",dataType:"json"})if(response.c......