微前端架构如何改变企业的开发模式与效率提升
1901
2022-10-23
使用Feign调用第三方http接口
目录Feign调用第三方http接口下面就来演示一下原生Feign调用第三方接口引入依赖写接口使用深入理解
Feign调用第三方http接口
我们平常在开发的时候,经常会碰http://到调用第三方的接口,这个时候我们可以使用httpClient或者restTemplate,但是这两种方式相比较与Feign调用,都会麻烦一点儿。
Feign是声明式服务调用客户端,既规范又简洁,帮我们屏蔽了http调用的复杂性,而且完美切入springcloud技术体系。
下面就来演示一下
使用Feign来调用第三方的客户端。
@FeignClient(name = "my-feign-client", url = "http://**")
public interface MyFeignClient{
@RequestMapping(value = "**", method = RequestMethod.GET)
ResponseEntity getMsg(@RequestParam("token") String token);
}
其中name不要和注册中心的服务名称相同,url就是我们要请求的地址。
通过上面就可以看出非常的简单,而且序列化啥的都帮我们做好了,不用我们关心,值得尝试
原生Feign调用第三方接口
最近做一个小项目,小到只有一个页面,和几个接口而已。
因为项目是自己一个人在做,所以所有的定义都可以自己做主。
项目的目的是为了推送给第三方页面收集到的数据,所以对接是重头戏。
之前对接过各种第三方短信接口,用的无非是httpClient的get/post,用多了就想换一个技术熟悉一下。
引入依赖
啥也不说,先引入一堆东西,不是每一个都有用,但是用到了就很方便。
core:是必须要引的,核心依赖。gson/jackson:gson我的代码中有用到,处理json数据。
写接口
下面这个接口是免费的,公开的,所以应该不会涉及到利益问题。
package com.geewise.ddsp.phonecollect.api;
import com.alibaba.fastjson.JSONObject;
import feign.Param;
import feign.RequestLine;
import java-.MalformedURLException;
/**
* 手机号查询地区
*/
public interface DetailPhoneClient {
/**
* http://mobsec-dianhua.baidu.com/dianhua_api/open/location?tel=13322222222&qq-pf-to=pcqq.c2c
* response:{"response":{"13322222222":{"detail":{"area":[{"city":"大连"}],"province":"辽宁","type":"domestic","operator":"电信"},"location":"辽宁大连电信"}},"responseHeader":{"status":200,"time":1539141421138,"version":"1.1.0"}}
* @param tel
* @return
*/
@RequestLine("GET /open/location?tel={tel}&qq-pf-to=pcqq.c2c")
JSONObject getDetailByPhone(@Param(value = "tel") String tel);
}
使用
在controller层中可以直接调用,直接上代码 。
最重要的地方就是Feign.builder()这一段,下面是判断,因为是第三方的,不是自己写的接口,判断的比较细了,有点啰嗦。
/**
* 用手机号查询所属地域
*
* @param phone 手机号
* @return 所属地域
*/
private String getCityByPhone(String phone) {
DetailPhoneClient detailPhoneClient = Feign.builder()
.decoder(new GsonDecoder())
.target(DetailPhoneClient.class, "http://mobsec-dianhua.baidu.com/dianhua_api");
JSONObject detailByPhone = detailPhoneClient.getDetailByPhone(phone);
logger.info("查询手机号所属地区:" + detailByPhone);
// 获取手机号信息的数据
if (!detailByPhone.containsKey("response")) {
return null;
}
JSONObject response = detailByPhone.getJSONObject("response");
if (!response.containsKey(phone)) {
return null;
}
JSONObject phoneDetail = response.getJSONObject(phone);
if (!phoneDetail.containsKey("detail")) {
return null;
}
JSONObject detail = phoneDetail.getJSONObject("detail");
if (!detail.containsKey("area")) {
return null;
}
JSONArray area = detail.getJSONArray("area");
if (area.size() == 0) {
return null;
}
JSONObject cityJsonObject = area.getJSONObject(0);
if (!cityJsonObject.containsKey("city")) {
return null;
}
return cityJsonObject.getString("city");
}
深入理解
会用了,再来了解一下。
权威的宝典:github-openfeign(由于这个写的比较通俗易懂,又比较权威,所以代码就不copy过来了,省时省力)
1、Gson/Jackson(处理json格式的数据)两者都包括一个编码器,一个解码器
2、Sax/JAXB(处理xml格式的数据,因为我还没有接触到这种格式的,毕竟现在json比较流行嘛,只能先写到这里,用到再说)
3、OkHttp,JAX-RS,Ribbon(负载均衡),Hystrix(熔断机制)。这几个都没有用到,等用到了 ,再上官网上查吧
4、可以在接口上添加header,具体的可以上githua上面查
@Headers("Content-Type: application/xml")
有时间写一下和cloud结合的怎么用
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~