接口管理与SDK开发
# 接口管理与 SDK 开发
# 第二阶段
# 主要内容
- 开发接口管理前端页面
- 开发模拟
API接口 - 开发调用接口客户端
- 开发调用的安全性(
API签名认证) - 客户端
SDK的开发(SDK——Spring Boot Starter开发)
# 模拟接口项目
项目名称:myapi-interface
提供三个不同种类的模拟接口:
GET接口POST接口(url传参)POST接口(Restful)
# 调用接口
几种 HTTP 调用方式:
HttpClientRestTemplate- 第三方库(
OKHTTP、Hutool)
Hutool:https://hutool.cn/docs/#/HTTP客户端工具类:https://hutool.cn/docs/#/http/Http%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%B7%A5%E5%85%B7%E7%B1%BB-HttpUtil
# API 签名认证
本质:
- 签发签名
- 使用签名(校验签名)
为什么需要?
- 保证安全性,不能随便一个人调用
- 适用于无需保存登录态的场景。只认签名,不关注用户登录态。
# 签名认证实现
通过 http request header 头传递参数。
| 参数 | 说明 |
|---|---|
accessKey | 调用的标识 userA、userB(复杂、无序、无规律) |
secretKey | 密钥(复杂、无序、无规律),该参数不能放到请求头中(类似用户名和密码,区别:ak、sk 是无状态的) |
| 用户请求参数 | 业务参数 |
sign | 签名值 |
可以自己写代码来给用户生成
ak、sk。千万不能把密钥直接在服务器之间传递,有可能会被拦截。
签名生成算法:
- 加密方式:对称加密、非对称加密、
md5签名(不可解密) - 用户参数 + 密钥 => 签名生成算法(
MD5、HMAC、Sha1) => 不可解密的值
示例:
abc + abcdefgh => sajdgdioajdgioa
怎么知道这个签名对不对?
服务端用一模一样的参数和算法去生成签名,只要和用户传的一致,就表示一致。
怎么防重放?
| 参数 | 说明 |
|---|---|
nonce | 随机数,只能用一次。服务端要保存用过的随机数(缺点:增大了开销,所以要给随机数加个有效期) |
timestamp | 时间戳,校验时间戳是否过期 |
API签名认证是一个很灵活的设计,具体要有哪些参数、参数名如何一定要根据场景来。(比如userId、appId、version、固定值等)
思考:难道开发者每次调用接口都要自己写签名算法?
# 开发简单易用的 SDK(简历加分项)
项目名:myapi-client-sdk
# 为什么需要 Starter?
理想情况:开发者只需要关心调用哪些接口、传递哪些参数,就跟自己写的代码一样简单。
开发 starter 的好处:开发者引入之后,可以直接在 application.yml 中写配置,自动创建客户端。
# Starter 开发流程
1. 初始化,环境依赖(一定要移除 build):
spring-boot-configuration-processor 的作用是自动生成配置的代码提示(yml 文件里)。
<!-- 在 spring-boot-starter 依赖里包含了 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2. 编写配置类(启动类):
@Data
@ComponentScan
@Configuration
// 定义一个配置前缀
@ConfigurationProperties(prefix = "chenmeng.api.client")
public class CmApiClientConfig {
private String accessKey;
private String secretKey;
@Bean
public CmApiClient cmApiClient() {
return new CmApiClient(accessKey, secretKey);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
3. 注册配置类,resources/META-INF/spring.factories 文件:
# spring boot starter
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.chenmeng.CmApiClientConfig
1
2
2
4. 打包与测试:
mvn install打包代码为本地依赖包- 创建新项目(复用
server项目)、测试
小作业:把打包好的包发送到
maven仓库中。
上次更新: 2026/10/10 17:43:40