一、使用场景
排除分布式环境中远程调用的需求,可能会出现跨产品跨机组的数据投放需求。
比如:
- A公司通过数据接口向B公司送传某些业务数据
- 某公司业务事业群向内容事业群投放相关数据
总结下来就是,通过访问既定接口,传递数据。类似Android请求后台接口的形式,在服务器和服务器之间进行数据交互。
二、技术选型
Java后台环境中,关于网络请求有很多种方式,比较常见的有:
- RestTemplate
- Okhttp
- HttpConnection
- HttpClient
- Retrofit
其中RestTemplate比较常见,后台植入的三方SDK使用HttpClient比较常见。Retrofit实际上是Android在http协议实践中比较常用的主流选型,目前后台在上述场景中也已经有了一些实践案例。
近期项目中,产品给内容中心以及合作渠道的数据回传,就使用了Retrofit,暂时没有遇到什么问题。
三、SpringBoot植入Retrofit的过程
3.1 配置依赖
SpringBoot依赖信息如下:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
Retrofit依赖信息如下:
<dependency>
<groupId>com.github.lianjiatech</groupId>
<artifactId>retrofit-spring-boot-starter</artifactId>
<version>2.0.2</version>
</dependency>
依赖相关细节和内部依赖关系可以通过mvnrepository了解细节。
在mvnrepository中,分别搜索Spring Boot
和retrofit start
。
需要注意的是Jcenter仓库目前已经停止维护了,所以建议相关资源在mvnrepository中检索。
3.2 基础资源和扫描
Retrofit中,主机地址和接口信息,入参出参都是在接口文件中描述的,演示内容如下:
@RetrofitClient(baseUrl = "http://xxxxx.com")
public interface FishComesBackApi {
@POST("/api/abc/def")
ResponseResult fishFreeComesBack(@Body InParameter parameter);
@POST("/api/abc/def/test")
ResponseResult fishFreeComesBackTest(@Body InFreeParameter parameter);
}
上述代码中,需要关注的点如下:
- 首先,内容以接口形式描述
- 其次,@RetrofitClient注解描述主机地址
- 其次,通过@Post描述请求方式
- 最后,通过@Body描述请求体信息
上述定义的接口,在Android环境下,内部通过动态代理进行对象构建,在Spring中,需要在入口位置,明确描述扫描,才可以触发其实例构建,配置信息如下:
@SpringBootApplication
@MapperScan("com.xxx.ddd")
@RetrofitScan("com.xxx.ddd")
public class BookBackApplication {
public static void main(String[] args) {
SpringApplication.run(BookBackApplication.class,args);
}
}
上述代码中,只需要关注一点即可,就是@RetrofitScan这个注解,指定的内容是定义的接口文件FishComesBackApi
所在的包的位置。
3.3 调用
在使用过程中,可能存在全局管控的一些策略,关于全局管控稍后详细描述,暂不做描述,接下来主要探讨使用。演示代码如下:
@Resource
private FishComesBackApi fishComesBackApi;
// 业务代码调用
public void m1(){
ResponseResult result = fishComesBackApi.fishFreeComesBackTest(parameter参数);
}
至此,在SpringBoot环境中使用Retrofit的基础操作就告一段落了。