如何开发一个轻量且高效的SDK(怎么开发sdk)

createh52个月前 (02-01)技术教程14

背景

相信大家都使用过Maven,我们平时要使用公共的API,只需要导入Maven依赖即可。然后就可以直接调用里面的方法了,非常的方便。

最近的项目有个需求,需要将业务系统与公司内部的OA系统做交互,比如业务系统的任务待办要发到OA系统的待办中,还要发送OA邮件等,还需要通过OA登录业务系统等。

其实上面的操作比较简单,我们只需要通过http远程调用OA的接口即可。将接口封装完毕后,调用,测试。一切顺利。

但是我们的系统实际上是由很多子系统构成的,今天我在这个系统里封装了OA接口,明天在另外一个系统可能还要需要使用,那么可能又要封装一次。

那么自己何不做成一个公共的SDK呢,这样只要有需要的系统引入依赖,即可实现轻松调用。

说干就干。

配置文件

首先需要建立一个工程,这里我建立一个SpringBoot的工程。

然后我们在pom.xml配置文件中配置编译、打包插件


        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                
                    ${java.version}
                    ${java.version}
                    ${project.build.sourceEncoding}
                
            
            
                org.apache.maven.plugins
                maven-source-plugin
                2.4
                
                    true
                
                
                    
                        compile
                        
                            jar
                        
                    
                
            
        

        
            
                src/main/resources
                
                    **/*
                
            
        

打包好的jar需要上传到maven仓库,这里还需要配置仓库地址。


        
            nexus-releases
            http://10.xx.xx.xxx/repository/maven-releases/
        
        
            nexus-snapshots
            http://10.xx.xx.xxx/repository/maven-snapshots/
        

pom.xml文件中配置好仓库地址,一个是releases的,一个试snapshots的。maven仓库图如下:

除了工程里面的配置,还需要到Maven的配置文件中添加配置

settings.xml

   
   
       nexus-releases
       admin
       adminxxx
    

  
       nexus-snapshots
       admin
       adminxxx
  

我们将打包的jar上传到的是私服,如果配置文件中配置了代理,需要将代理注释掉。

就上上图中 ... 的内容。

开发功能

一切准备就绪后就可以开发功能了。

我们以上图中的BacklogTaskClient为例,在这个类中,我们封装一个保存待办的功能:

/**
 * 保存待办
 *
 * @param param
 * @return
*/
public String addBacklogTask(AddBacklogTaskParam param) {
    String url = baseUrl + "/backlogTask/add";
    GenericApiRequest request = new GenericApiRequest.Builder()
        .requestUrl(url)
        .requestMethod(HttpMethod.POST)
        .requestData(param)
        .responseTypeReference(new TypeReference>() {
        })
        .build();
    IdParam idParam = request.waitResponse();
    return idParam.getId();
}

实际上就是远程调用远程待办功能,然后封装起来。

我们在类中添加了

@ConditionalOnProperty(name = "basic-service.backlogtask.provider", havingValue = "default")

@ConditionalOnProperty用于控制是否将该类注入到Spring的容器中,如果我们在业务工程的properties文件中配置

basic-service.backlogtask.provider=default

那么业务类启动的时候会将该类注入到容器中。这样实现按需注入,提高SDK的性能。

推送到仓库

运行idea的maven插件里面的deploy,即可将工程打包并发送到maven仓库中。

进入maven仓库,发现推送成功。

接下来我们就需要在业务系统中调用了。

业务系统调用

首先引入我们的maven依赖:


    com.xx.xx.common
    xx-xx-common-sdk
    1.0.5-SNAPSHOT

接着在启动类添加扫描路径

 @ComponentScan(value = {"com.xx.xx"})

然后配置文件中作需要的配置

#properties配置文件配置相关信息
basic-service.backlogtask.provider=default
basic-service.backlogtask.urlPrefix=http://10.xx.xx.xx:3x000

配置之后,业务系统启动时就能注入相关的类了。

最后使用Autowired取出需要的bean。

@Autowired
private BacklogTaskClient backlogTaskClient;

调用即可

String id = "1486154056300101632";
BacklogTask backlogTaskById = backlogTaskClient.getBacklogTaskById(id);
Console.log("test is over:{}", backlogTaskClient);

这样这个公共功能在各个系统中都可以引入使用了。

到此,我们的SDK就开发完成了。

相关文章

一篇文章,手把手教你运行百度离线人脸识别SDK-Java版

本篇文章为简单的讲解百度离线人脸识别SDK-Java版本的工程运行;01注册百度AI开放平台登录http://ai.baidu.com进入百度AI开放平台,进行注册;02找到人脸识别模块,下载离线SD...

字节码增强技术之 Java Agent 入门

前言分布式链路追踪中为了获取服务之间调用链信息,采集器通常需要在方法的前后做埋点。在 Java 生态中,常见的埋点方式有两种:依赖 SDK 手动埋点;利用 Java Agent 技术来做无侵入埋点。我...

Java 更新速递:WildFly 35、Jakarta EE 11 更新、Java Operator SDK

本周 2025 年 1 月 6 日的 Java 综述重点介绍了以下新闻:WildFly 35 的发布;Java Operator SDK 5.0-RC1;Spring Framework 2023.0...

微信开发最新Java SDK来了:WxJava3.9.0

引言【关注极客欣,每天看资讯】哈喽,各位小伙伴们,大家好!很高兴又跟大家见面了,今天是周一,继续为大家分享科技资讯。前言今天我们来说一说微信开发,随着微信生态圈的逐步建立和发展,如今,微信的活跃用户体...