大家最常用的接口调用形式,应该是在前后端分离中,前端调后端controller接口。但有时业务需要,需要开发去对接第三方接口,即外部系统的接口

本人对接不多,但也有点小感受,分享给大家。

第三方是否有提供SDK

SDK是开发工具包的意思,对所有语言来说的一个泛称。如果只针对Java来说,就是第三方有没有提供依赖(jar包)

有提供SDK

本人看过多个第三方提供的SDK,调用时类和参数的代码形式五花八门,但都有一些共同参数(参数一般都是以post请求json形式):

  1. 调用的URL地址
  2. 公共参数
  3. 业务参数(俗称报文)

调用的URL地址

调用的URL很好理解,调用别人接口,你要知道地址吧

公共参数

公共参数是第三方对外暴露的所有api中,都需要提供的参数。比如appKey、appId、timestamp等等

业务参数

业务参数其实就是本次调用接口的业务报文,比如说调用A平台给其推送用户信息,则用户信息就是业务报文

我们要怎么做(开发)

  1. 去官网下载他们提供的SDK
  2. 把SDK放到公司的私服上,一般交给开发经理就行
  3. 在pom.xml引入依赖
  4. 去官网看下他们提供的调用示例代码,根据示例代码自己写个方法方便调用
  5. 一般公共参数比如appKey、appId,如果是固定值,就配置到applicaiton-dev.yml、applicaiton-pro.yml中

无提供SDK

绝大部分情况下,都是会有SDK的,如果没有SDK提供,这第三方比较low。但没办法,low也要对接。
共同点还是和上面一样,URL、共同参数、业务参数

不同的是自己找http客户端调用工具,比如httpClient。然后编写自己的调用类和方法,下面示例可参考下:

    public static String doPost(String postUrl ,String body){
        HttpPost httpPost = new HttpPost(postUrl);
        StringEntity stringEntity = new StringEntity(body, "utf-8");
        httpPost.setEntity(stringEntity);
        httpPost.setHeader("Content-Type", "application/json; charset=utf-8");
        HttpClient httpClient = HttpClientBuilder.create().build();
        HttpResponse response = null;
        try {
            response = httpClient.execute(httpPost);
            String result = EntityUtils.toString(response.getEntity());
            return result;
        } catch (IOException var8) {
            var8.printStackTrace();
            return null;
        }
    }

公共参数和业务参数示例

为了方便理解大家理解参数形式,给个常见的请求参数形式:

{
    "appKey": "xxxx",
    "appApi": "xx.xx.getUserInfo",
    "timestamp": 1256125363,
    "data":{
	   "userName":"zhangsan",
	   "age": 15
	 ...
     }
    ....
}

data为业务报文,其他第一层参数均为公共参数