沉梦手记 沉梦手记
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 数据库基础
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • 网络通信
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Axios入门
  • Vue Router入门
  • Pinia入门
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 运维与部署
  • 音视频处理
  • 随笔
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
Github (opens new window)

沉梦听雨

时间是最好的浸渍剂,而沉淀是最好的提纯器🚀
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 数据库基础
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • 网络通信
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Axios入门
  • Vue Router入门
  • Pinia入门
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 运维与部署
  • 音视频处理
  • 随笔
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
Github (opens new window)
  • 脚手架搭建
  • 瑞吉外卖

  • 黑马点评

  • vue-blog

  • 沉梦接口开放平台

    • 项目概述与设计
    • 接口管理与SDK开发
      • 第二阶段
        • 主要内容
        • 模拟接口项目
        • 调用接口
        • API 签名认证
        • 签名认证实现
        • 开发简单易用的 SDK(简历加分项)
        • 为什么需要 Starter?
        • Starter 开发流程
    • 接口发布与在线调用
    • 调用统计与API网关
    • RPC与Dubbo
    • 笔记
    • 项目技术亮点
  • 用户中心

  • 聚合搜索平台

  • 仿12306项目

  • 壁纸小程序项目

  • RuoYi-Vue

  • 项目笔记
  • 沉梦接口开放平台
沉梦听雨
2023-06-08
目录

接口管理与SDK开发

# 接口管理与 SDK 开发

# 第二阶段

# 主要内容

  1. 开发接口管理前端页面
  2. 开发模拟 API 接口
  3. 开发调用接口客户端
  4. 开发调用的安全性(API 签名认证)
  5. 客户端 SDK 的开发(SDK —— Spring Boot Starter 开发)

# 模拟接口项目

项目名称:myapi-interface

提供三个不同种类的模拟接口:

  1. GET 接口
  2. POST 接口(url 传参)
  3. POST 接口(Restful)

# 调用接口

几种 HTTP 调用方式:

  1. HttpClient
  2. RestTemplate
  3. 第三方库(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 签名认证

本质:

  1. 签发签名
  2. 使用签名(校验签名)

为什么需要?

  1. 保证安全性,不能随便一个人调用
  2. 适用于无需保存登录态的场景。只认签名,不关注用户登录态。

# 签名认证实现

通过 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. 编写配置类(启动类):

@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

3. 注册配置类,resources/META-INF/spring.factories 文件:

# spring boot starter
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.chenmeng.CmApiClientConfig
1
2

4. 打包与测试:

  • mvn install 打包代码为本地依赖包
  • 创建新项目(复用 server 项目)、测试

小作业:把打包好的包发送到 maven 仓库中。

上次更新: 2026/10/10 17:43:40
项目概述与设计
接口发布与在线调用

← 项目概述与设计 接口发布与在线调用→

Theme by Vdoing | Copyright © 2023-2026 沉梦听雨 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式