java后台调用第三方api接口

api接口

API,英文全称Application Programming Interface。是一些预先编写好的代码,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,
而又无需访问源码,或理解内部工作机制的细节。

简单的说,就是开发人员将一些写好的代码放在服务器上,像调用内部方法一样,我们在网页上发起请求传递参数就可以达到我们想要的功能,而不用我们自己去
写代码,或者是下载别人写好的代码。例如:我们可以写一个排序的方法,参数是一个数组,然后我们写好后放在服务器上,允许别人访问这个请求,然后别人就
可以发起请求,并且带上他们的数组,而通过我们的方法返回给他排好序的数组。那个请求路径就是api接口路径。

高德地图api接口

我在编写自己的一个项目时,需要一个定位用户地理信息的功能,而网页我们可以用js代码找到用户的ip的地理位置信息,但却是一对经纬度,我需要的是一个详
细的省市的名字,这样我们就需要通过这个经纬度进行计算所在位置,编写很麻烦,所以我就想用一下别人的api接口。

高德地图开发者api里面提供了一个ip地址找到地理位置信息的接口,而且免费,就是限制次数,不过没关系,反正我调用也不多。

调用步骤

首先需要在高德地图开发者网站里面申请一个开发者账号,然后我们添加一个应用,在里面添加一个key信息,这个key信息是必须要用的,不然直接调用的会报错。

然后在开发者文档里面找到接口路径,根据文档的参数表进行编写参数。返回的是一个json数据格式,如果想要其他格式的数据,可以修改参数信息来获取。

java后端代码

这是java后台代码实现方式,其实有很多种,也有其他的包,例如httpclient等方式,前端获取更加容易,不过我这里就用原生的来写,让自己加深印象。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
 /**
* 将功能封装成一个方法,以get方式发送请求
* @param url:发送请求的URL
* @param param:请求参数,就是get方式?后面跟着的一串字符串。
* @return String:返回的结果,是字符串形式
*/

public String sendGet(String url, String param) {
String result = "";
BufferedReader in = null;
try {
//拼接url路径字符串
String urlNameString = url + "?" + param;
URL realUrl = new URL(urlNameString);

// 打开和URL之间的连接
URLConnection connection = realUrl.openConnection();

// 设置通用的请求属性
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("connection", "Keep-Alive");
connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");

// 建立实际的连接
connection.connect();

// 获取所有响应头字段
Map<String, List<String>> map = connection.getHeaderFields();

// 遍历所有的响应头字段
for (String key : map.keySet()) {
System.out.println(key + "--->" + map.get(key));
}

// 定义 BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
System.out.println("发送GET请求出现异常!" + e);
e.printStackTrace();
}

// 使用finally块来关闭输入流
finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
return result;
}

返回的是字符串,显然不是我们想要的结果,所以我们通过

1
JSONObject json = JSONObject.fromObject(result);

代码去转换格式,然后我们就可以调用了。

参考链接 https://blog.csdn.net/qq_41970025/article/details/90647295