什么是SDK
通常在分布式项目中,类和方法是不能跨模块使用的。为了方便开发者的调用,我们需要开发一个简单易用的SDK,使开发者只需关注调用哪些接口、传递哪些参数,就像调用自己编写的代码一样简单。实际上,RPC(远程过程调用)就是为了实现这一目的而设计的。RPC就是追求简单化调用的理想情况。类似的例子是小程序开发或者调用第三方 API,如腾讯云的 API,它们都提供了相应的 SDK。
为什么使用SDK
在此分布式项目中SDK客户端封装了对各API接口的调用方法,通过引入 Starter 的方式直接使用客户端,为用户生成一个可以使用的客户端对象,实现跨模块的对象创建和方法调用,降低了使用成本。
项目实战
SDK结构
1)编写 SDK 版本号:
2)为了使客户端不用手动创建而可直接使用,这里 Starter 采用配置类的形式
//告诉Spring这是一个配置类
@Configuration
//读取application.yml配置类,并且给配置类加上前缀"myapi.client"
@ConfigurationProperties("myapi.client")
//Lombok注解,用于生成get、set方法
@Data
//用于自动扫描组件,自动注入Bean
@ComponentScan
public class YuApiClientConfig {
private String accessKey;
private String secretKey;
@Bean
public MyApiClient myApiClient(){
return new MyApiClient(accessKey,secretKey);
}
}
3)resource文件下新建META-INF和spring.factories
4)在spring.factories文件下写入配置内容(配置类根路径)
# spring boot starter
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.example.myapiclientsdk.YuApiClientConfig
5)上传jar包到Maven中央仓库,具体教程可见【教程】如何上传依赖到maven中央仓库并且引入至pom文件-CSDN博客
6)引入依赖
7)注入客户端对象,调用其方法:
添加配置类:
注入对象:
调用 API 接口方法:
User user = userService.getLoginUser(request);
String accessKey = user.getAccessKey();
String secretKey = user.getSecretKey();
MyApiClient myApiClient1 = new MyApiClient(accessKey,secretKey);
Gson gson = new Gson();
com.example.myapiclientsdk.model.User currentUser = gson.fromJson(userrequestParams, com.example.myapiclientsdk.model.User.class);
String userNameByPost = myApiClient1.getUserNameByPost(currentUser);
return ResultUtils.success(userNameByPost);
这样一来,用户就可以通过引入依赖像使用本地方法一样调用SDK中的接口了。