zoukankan      html  css  js  c++  java
  • 第三方接口调用框架

    最近给公司写了一套第三方接口调用的框架,为了规范并帮助业务稳定的允许,特写了这个框架。

    ###框架结构
    Invoker.invoking	门面
    	-BizService	业务接口
    	-BizAOPService	业务切面
    	+invoking	业务接口调用
    		BizService.check	参数检查
    		BizService.pre	业务前置调用
    		BizAOPService.pre 业务切面前置调用
    		BizService.execute	业务调用
    		BizAOPService.after	业务切面后置调用
    		BizService.after	业务后只调用
    		BizService.handlerException	异常处理
    

      框架结构实际很简单,只是将相同的东西模板化,不明确的东西抽象化,不能主导的东西桥接出去。

    参数适配器

    import java.io.Serializable;
    
    public interface RequestAdaptor<T> extends Serializable {
    
    	/**
    	 * 参数适配
    	 */
    	PayRequest<T> adapt();
    
    	/**
    	 * 参数检查
    	 */
    	void check();
    	
    }
    

      

    实际这里我完全可以将 BizAOPService 放入一个集合形成类似拦截器一样的存在,这里看具体的需求了。

    public interface Invoker<M,N> {
    
    	void invoking(BizService<M,N> bizService, BizAOPService<M,N> bizAOPService, M m, N n) throws Exception ;
    	
    }
    

     

    public interface BizService<M,N> {
    	
    	/**参数校验*/
    	void check(M request, N response);
    	/**调用前处理 如内置参数组装,更新业务状态*/
    	void pre(M request, N response);
    	/**接口调用*/
    	void execute(M request, N response);
    	/**调用后处理 更新业务状态*/
    	void after(M request, N response);
    	/**参数校验异常处理 */
    	void checkException(M request, N response, Exception e) throws Exception ;
    	/**调用前异常处理*/
    	void preException(M request, N response, Exception e) throws Exception ;
    	/**调用异常处理*/
    	void executeException(M request, N response, Exception e) throws Exception ;
    	/**调用后异常处理*/
    	void afterException(M request, N response, Exception e) throws Exception ;
    	
    }
    

      

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    public abstract class AbstractBizService<M,N> implements BizService<M,N>{
    	
    	private static final Logger LOGGER = LoggerFactory.getLogger(AbstractBizService.class);
    
    	@Override
    	public void check(M request, N response) {
    		LOGGER.info("接口调用参数检查:{},{}", request, response);
    	}
    
    	@Override
    	public void pre(M request, N response) {
    		LOGGER.info("调用前处理:{},{}", request, response);
    	}
    
    	@Override
    	public void after(M request, N response) {
    		LOGGER.info("调用后处理:{},{}", request, response);
    	}
    
    	@Override
    	public void checkException(M request, N response, Exception e) throws Exception {
    		LOGGER.info("接口调用参数检查异常处理:{},{}", request, response, e);
    		throw e;
    	}
    
    	@Override
    	public void preException(M request, N response, Exception e)  throws Exception {
    		LOGGER.info("调用前异常处理:{},{}", request, response, e);
    		throw e;
    	}
    
    	@Override
    	public void executeException(M request, N response, Exception e)  throws Exception {
    		LOGGER.info("接口调用异常处理:{},{}", request, response, e);
    		throw e;
    	}
    
    	@Override
    	public void afterException(M request, N response, Exception e)  throws Exception {
    		LOGGER.info("调用后异常处理:{},{}", request, response, e);
    		throw e;
    	}
    
    
    }
    
    public interface BizAOPService<M,N> {
    
    	void pre(M request, N response);
    	
    	void after(M request, N response);
    	
    	String getBizNo(M request);
    	
    }
    

      

  • 相关阅读:
    什么是TCP, UDP, HTTP, HTTPS协议?
    Django 自定义分页器
    PHP7.3安装event扩展
    深入浅出 PHP SPL(PHP 标准库)(转)
    Centos7安装redis5.0.7
    useradd命令详解(转)
    centos7.5下安装rabbitmq服务端以及php扩展
    php-fpm启动,重启,退出
    深度好文:PHP写时拷贝与垃圾回收机制(转)
    非对称加密openssl协议在php7实践
  • 原文地址:https://www.cnblogs.com/yun965861480/p/11511920.html
Copyright © 2011-2022 走看看