前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何开发一个轻量且高效的SDK

如何开发一个轻量且高效的SDK

作者头像
Lvshen
发布2022-08-31 10:42:53
7570
发布2022-08-31 10:42:53
举报
文章被收录于专栏:Lvshen的技术小屋

背景

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

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

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

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

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

说干就干。

配置文件

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

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

代码语言:javascript
复制
<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <attach>true</attach>
                </configuration>
                <executions>
                    <execution>
                        <phase>compile</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>

        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*</include>
                </includes>
            </resource>
        </resources>
</build>

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

代码语言:javascript
复制
<distributionManagement>
        <repository>
            <id>nexus-releases</id>
            <url>http://10.xx.xx.xxx/repository/maven-releases/</url>
        </repository>
        <snapshotRepository>
            <id>nexus-snapshots</id>
            <url>http://10.xx.xx.xxx/repository/maven-snapshots/</url>
        </snapshotRepository>
</distributionManagement>

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

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

settings.xml

代码语言:javascript
复制
<servers>   
   <server>
       <id>nexus-releases</id>
       <username>admin</username>
       <password>adminxxx</password>
 </server>

  <server>
       <id>nexus-snapshots</id>
       <username>admin</username>
       <password>adminxxx</password>
  </server>
</servers>

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

就上上图中<proxies> ... </proxies>的内容。

开发功能

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

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

代码语言:javascript
复制
/**
 * 保存待办
 *
 * @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<IdParam<String>>() {
        })
        .build();
    IdParam<String> idParam = request.waitResponse();
    return idParam.getId();
}

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

我们在类中添加了

代码语言:javascript
复制
@ConditionalOnProperty(name = "basic-service.backlogtask.provider", havingValue = "default")

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

代码语言:javascript
复制
basic-service.backlogtask.provider=default

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

推送到仓库

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

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

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

业务系统调用

首先引入我们的maven依赖:

代码语言:javascript
复制
<dependency>
    <groupId>com.xx.xx.common</groupId>
    <artifactId>xx-xx-common-sdk</artifactId>
    <version>1.0.5-SNAPSHOT</version>
</dependency>

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

代码语言:javascript
复制
 @ComponentScan(value = {"com.xx.xx"})

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

代码语言:javascript
复制
#properties配置文件配置相关信息
basic-service.backlogtask.provider=default
basic-service.backlogtask.urlPrefix=http://10.xx.xx.xx:3x000

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

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

代码语言:javascript
复制
@Autowired
private BacklogTaskClient backlogTaskClient;

调用即可

代码语言:javascript
复制
String id = "1486154056300101632";
BacklogTask backlogTaskById = backlogTaskClient.getBacklogTaskById(id);
Console.log("test is over:{}", backlogTaskClient);

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Lvshen的技术小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 配置文件
  • 开发功能
  • 推送到仓库
  • 业务系统调用
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档