第三方接口对接规范

本文分享了第三方接口对接的实践经验,包括自定义异常分类、请求流程、结果处理及日志建议。强调了接口入参校验、异常捕获与转换、结果校验的重要性,并提倡保持接口纯净,便于问题定位和复用。同时,提出了日志记录的策略,以助于快速排查问题。

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

如果项目是属于那种集成项目,那么对接各种第三方平台在所难免。根据亲身经历,暂定如下对接规范。

1 自定义异常

针对第三方的异常,大致可以分为第三方内部异常、第三方传入参数异常、自身调用异常、登录异常。

  • 第三方内部异常:按接口文档正确录入参数,但第三方平台未返回预想结果
  • 第三方传入参数异常:主要是说自身参数未校验完全,第三方抛出的参数建议,比如图片模糊
  • 自身调用异常:本身在调用第三方接口时出现超时等异常,可以归于第三方内部异常
  • 登录异常:其实可以归于内部异常,但为了保活方便,建议单独定义异常

2 常用请求流程

2.1 入参校验

针对入参进行空值校验、设置默认值等

2.2 拼接参数

通常会有json和xml两种形式,此过程建议使用main函数进行初步检验,不要等到部署再测试。

2.3 请求过程

建议使用如下形式:

   private List<StaticPeopleDto> searchRequest(String xml) {
        String staticPeoples = "";
        // 当出现异常时,可以快速定位是哪个接口出错
        try {
            staticPeoples = client.getStaticPeoples(xml);
        }catch (Exception e) {
            throw new HuaWeiSysException("获取静态人员信息失败");
        }
        StaticPeopleRspDto rspDto = JaXmlBeanUtil.converyToJavaBean(staticPeoples, StaticPeopleRspDto.class);
        // 当正常拿到返回结果后,对返回结果进行校验
        HuaWeiAssert.isOk(rspDto);
        List<StaticPeopleDto> peoples = rspDto.getPeoples();
        return CollectionUtils.isEmpty(peoples) ? Collections.emptyList() : peoples;
    }

校验工具类:


    public static void isOk(ResponseDto responseDto) {
    	//对参数进行校验
        if(responseDto==null){
            throw new HuaWeiSysException("响应无可用数据");
        }
		//获取错误码和返回信息:resultDto也可能出现空值,小伙伴在这里也可以加空值校验
        String code = responseDto.getResultDto().getCode();
        String msg=responseDto.getResultDto().getErrmsg();

		//成功响应码,直接返回
        if (HuaWeiStatusEnum.SUCCESS.getCode().equals(code)) {
            return ;
        }

		//登录失败响应码:直接抛出登录异常
        if (HuaWeiStatusEnum.LOGIN_FAILED.getCode().equals(code)) {
            throw new HuaWeiLoginException();
        }

		//参数错误信息
        for (HuaweiArgEnum huaweiArgEnum : HuaweiArgEnum.values()) {
            if (huaweiArgEnum.getCode().equals(code)) {
                throw new HuaWeiArgException(huaweiArgEnum.getMsg());
            }
        }
		
		//内部异常处理
        for (HuaWeiStatusEnum huaWeiStatusEnum : HuaWeiStatusEnum.values()) {
            if (huaWeiStatusEnum.getCode().equals(code)) {
                throw new HuaWeiSysException(huaWeiStatusEnum.getMsg());
            }
        }
       throw new HuaWeiSysException(msg);
    }
2.4 结果处理

将结果拼接为己方所需的格式,特别注意连续调用时需要层层判空,可以使用Optional简化过程

2.5 建议
2.5.1 多打日志

多打日志,而且一定要注意日志级别。日志打得好,排查起来就轻松很多。

  1. 定义logback-spring.xml将各种日志分类输出
  2. catch内的异常日志级别通常打成两种:warn 允许程序继续运行 ,error 无法恢复的异常
  3. 详细过程信息:打为debug级别,方便排查
  4. 普通过程信息:打成info即可
2.5.2 原接口参数接入

无论本身业务逻辑如何,接入第三方接口时,首先应完整而纯净地接入接口,尽可能少的混入自身业务逻辑.写自身业务时,再去调已经写好校验逻辑的接口方法.这样做的好处在于:如果出现问题可以快速定位问题,而且保持接口的纯净性,也方便复用.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值