【项目实战】如何在项目中基于 Spring Boot Starter 开发简单的 SDK

什么是SDK

通常在分布式项目中,类和方法是不能跨模块使用的。为了方便开发者的调用,我们需要开发一个简单易用的SDK,使开发者只需关注调用哪些接口、传递哪些参数,就像调用自己编写的代码一样简单。实际上,RPC(远程过程调用)就是为了实现这一目的而设计的。RPC就是追求简单化调用的理想情况。类似的例子是小程序开发或者调用第三方 API,如腾讯云的 API,它们都提供了相应的 SDK。

为什么使用SDK

在此分布式项目中SDK客户端封装了对各API接口的调用方法,通过引入 Starter 的方式直接使用客户端,为用户生成一个可以使用的客户端对象,实现跨模块的对象创建和方法调用,降低了使用成本。

项目实战

SDK结构

1)编写 SDK 版本号:

2)为了使客户端不用手动创建而可直接使用,这里 Starter 采用配置类的形式

java 复制代码
//告诉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文件下写入配置内容(配置类根路径)

java 复制代码
# spring boot starter
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.example.myapiclientsdk.YuApiClientConfig

5)上传jar包到Maven中央仓库,具体教程可见【教程】如何上传依赖到maven中央仓库并且引入至pom文件-CSDN博客

6)引入依赖

7)注入客户端对象,调用其方法:

添加配置类:

注入对象:

调用 API 接口方法:

java 复制代码
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中的接口了。

相关推荐
JAVA学习通20 小时前
北京明光云振铎数据科技Java面经
java·开发语言·科技
贫民窟的勇敢爷们1 天前
SpringBoot整合AOP切面编程实战,实现日志统一记录+接口权限校验
java·spring boot·spring
candyTong1 天前
Claude Code Agent Teams:多 Agent 协作的生命周期与实现机制
后端·架构
AC赳赳老秦1 天前
供应链专员提效:OpenClaw自动跟踪物流信息、更新库存数据,异常自动提醒
java·大数据·服务器·数据库·人工智能·自动化·openclaw
迈巴赫车主1 天前
Java基础:list、set、map一遍过
java·开发语言
灵犀学长1 天前
基于 Spring ThreadPoolTaskScheduler + CronTrigger 实现的动态定时任务调度系统
java·数据库·spring
好家伙VCC1 天前
【无标题】
java
小碗羊肉1 天前
【JavaWeb | 第十一篇】文件上传(本地&阿里云OSS)
java·阿里云·servlet
吾疾唯君医1 天前
Java SpringBoot集成积木报表实操记录
java·spring boot·spring·导出excel·积木报表·数据文件下载
Byron Loong1 天前
【c++】为什么有了dll和.h,还需要包含lib
java·开发语言·c++