Java:对接外部系统
大家最常用的接口调用形式,应该是在前后端分离中,前端调后端controller接口。但有时业务需要,需要开发去对接第三方接口,即外部系统的接口
本人对接不多,但也有点小感受,分享给大家。
第三方是否有提供SDK
SDK是开发工具包的意思,对所有语言来说的一个泛称。如果只针对Java来说,就是第三方有没有提供依赖(jar包)
有提供SDK
本人看过多个第三方提供的SDK,调用时类和参数的代码形式五花八门,但都有一些共同参数(参数一般都是以post请求json形式):
- 调用的URL地址
- 公共参数
- 业务参数(俗称报文)
调用的URL地址
调用的URL很好理解,调用别人接口,你要知道地址吧
公共参数
公共参数是第三方对外暴露的所有api中,都需要提供的参数。比如appKey、appId、timestamp等等
业务参数
业务参数其实就是本次调用接口的业务报文,比如说调用A平台给其推送用户信息,则用户信息就是业务报文
我们要怎么做(开发)
- 去官网下载他们提供的SDK
- 把SDK放到公司的私服上,一般交给开发经理就行
- 在pom.xml引入依赖
- 去官网看下他们提供的调用示例代码,根据示例代码自己写个方法方便调用
- 一般公共参数比如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为业务报文,其他第一层参数均为公共参数