java对接外部api
- 需求提出
- 解决思路
- 编码
- 测试
- 总结
差不多有一个多月没有更新blog,也是出于工作原因以及最近搬家在看合适的窝点导致断更。今天有一个小学妹来问我可以将我其他项目的api接入到我现在的项目中吗?我回答“可以”!我今天就写一篇关于对接api的博客来帮助她吧!
需求提出
那么拿到一个需求首先话不多说先分析这个需求的整体思路!需求上面大概有介绍,这里我更深入化的说明一下。对接外部api接口就是说我在A项目写了一个接口时我的B项目需要到A这个接口的数据,那么在A项目上线的基础上使用B项目去调用A项目的这个所需的接口,如下图:
其实对接外部api就是这么一个过程,当然我们拿到外部数据后面的操作都是由自己去自由发挥了,比如将读取到的数据来显示在这个项目中去给前端显示。或者存入数据库等等。
解决思路
上面已经理解了调用的的思路,有了思路就好解决,现在很多的外部api接口可以给开发时带来便利,当然,调用的方式可能也会有稍些不同,比如手机号查询归属地、邮箱等等。像这种的一般都是有官方文档可以给我们,很方便。但是我们去调用自己的api又不是在一个项目中的那就要想想怎么实现了。话不多说我就拿我之前写了一个DEMO中的数据吧,刚好项目还在线上。
编码
package edu.controller;import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.oss.HttpMethod;
import edu.entity.EventVo;
import org.springframework.http.ResponseEntity;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** @Author Fujii* @Date 2021-10-11 23:12* @Version SpringBoot 2.2.2* @projectName 调用外部api接口*/
@RestController
public class BackEndApiDemo {@GetMapping("apiList")public Map<String,Object> getByApiList(){//这里先创建一个map用于返回api格式Map<String,Object> mapList = new HashMap<>();//1.我们是要去调用外部api,那么肯定要有一个外部api的地址,这里我是拿我的DEMO作为数据传输String apiURL = "这里直接放入你的api接口即可,我的api就不展示了,请谅解!";//2.这里有几种方式,你们去试了过后会发现不只有GET,这里因为我们是去获取数据,所以是用GETHttpMethod method = HttpMethod.GET;//用于接口返回的JSONObject()LinkedMultiValueMap map = new LinkedMultiValueMap();//json接收数据JSONObject urlMethod = client(apiURL,method,map);JSONObject jsonObject = JSONObject.parseObject(urlMethod.toJSONString());JSONArray object = JSONObject.parseArray(jsonObject.get("data").toString());if (jsonObject!=null){List<EventVo> list = JSONArray.parseArray(object.toJSONString(), EventVo.class);mapList.put("list",list);mapList.put("code",200);mapList.put("msg", "获取成功!");}else{mapList.put("code",500);mapList.put("msg", "获取失败!");return mapList;}return mapList;}//注意:因为是测试,所有我所有内容全部写在一个文件内方便展示清晰,正规写法应写在服务层private JSONObject client(String url, HttpMethod method, LinkedMultiValueMap params) {RestTemplate template = new RestTemplate();ResponseEntity<JSONObject> response = template.getForEntity(url, JSONObject.class);return response.getBody();}
}
测试
总结
如果不甘于现状,请用行动来改变自己!