桐原API 开放平台项目笔记

项目介绍

一个提供 API 接口供开发者调用的平台。

用户可以注册登录,开通接口调用权限。用户可以浏览接口并调用,且每次调用会进行统计。

管理员可以发布接口、下线接口、接入接口,以及可视化接口的调用情况、数据。

项目侧重于后端,包含较多的编程技巧和架构设计层面的知识。、

项目资料

⭐️ API 开放平台项目源码:源码链接(后端)

第 1 集

主要内容:

  1. 项目介绍、业务流程、项目计划、需求分析
  2. 数据库表设计
  3. 前后端项目初始化(包含 Ant Design Pro 框架最新版本的使用)
  4. 前后端代码自动生成(强烈推荐,提高 1000% 的开发效率)
  5. 登录页、接口信息页开发

需求分析

背景:

  1. 前端开发需要用到后台接口
  2. 使用现成的系统的功能(搏天api-免费api接口平台

做一个 API 接口平台:

  1. 管理员可以对接口信息进行增删改查
  2. 用户可以访问前台,查看接口信息

其他要求:

  1. 防止攻击(安全性)
  2. 不能随便调用(限制、开通)
  3. 统计调用次数
  4. 计费
  5. 流量保护
  6. API 接入

业务流程

技术选型

前端

  • Ant Design Pro
  • React
  • Ant Design Pro components
  • Umi
  • Umi Request(Axios 的封装)

后端

  • Spring Boot Starter(SDK 开发)
  • Dubbo(RPC)
  • Nacos
  • Spring Cloud Gateway(网关、限流、日志实现)
  • 数据库表设计

    接口信息表

    -- 接口信息
    create table if not exists api.`interface_info`
    (
        `id` bigint not null auto_increment comment '主键' primary key,
        `name` varchar(256) not null comment '名称',
        `description` varchar(256) null comment '描述',
        `url` varchar(512) not null comment '接口地址',
        `requestHeader` text null comment '请求头',
        `responseHeader` text null comment '响应头',
        `status` int default 0 not null comment '接口状态(0-关闭,1-开启)',
        `method` varchar(256) not null comment '请求类型',
        `userId` bigint not null comment '创建人',
        `createTime` datetime default CURRENT_TIMESTAMP not null comment '创建时间',
        `updateTime` datetime default CURRENT_TIMESTAMPnot null on update CURRENT_TIMESTAMP comment '更新时间',
        `isDelete` tinyint default 0 not null comment '是否删除(0-未删, 1-已删)'
        ) comment '接口信息';
     

    项目脚手架

    前端:ant design pro 脚手架(开箱即用的中台前端/设计解决方案 - Ant Design Pro

    后端:用的程序员鱼皮的后端模版代码

    基础功能开发

    增删改查、登录功能(通过复制粘贴完成)

    前端接口调用:后端使用遵循 openapi 的规范的 swagger 文档,使用前端 Ant Design Pro 框架集成的 oneapi 插件自动生成。

第 2 集

 

主要内容:

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

模拟接口项目

项目名称:yuapi-interface

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

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

调用接口

几种 HTTP 调用方式:

  1. HttpClient
  2. RestTemplate
  3. 第三方库(OKHTTP、Hutool)

Hutool:Hutool参考文档

Http 工具类:Hutool参考文档

API 签名认证

本质:

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

为什么需要?

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

签名认证实现

通过 http request header 头传递参数。

参数 1:accessKey:调用的标识 userA, userB(复杂、无序、无规律)

参数 2:secretKey:密钥(复杂、无序、无规律) 该参数不能放到请求头中

(类似用户名和密码,区别:ak、sk 是无状态的)

大家可以自己写代码来给用户生成 ak、sk

千万不能把密钥直接在服务器之间传递,有可能会被拦截

参数 3:用户请求参数

参数 4:sign

加密方式:对称加密、非对称加密、md5 签名(不可解密)

用户参数 + 密钥 => 签名生成算法(MD5、HMac、Sha1) => 不可解密的值

abc + abcdefgh => sajdgdioajdgioa

怎么知道这个签名对不对?

服务端用一模一样的参数和算法去生成签名,只要和用户传的的一致,就表示一致。

怎么防重放?

参数 5:加 nonce 随机数,只能用一次

服务端要保存用过的随机数

参数 6:加 timestamp 时间戳,校验时间戳是否过期。

API 签名认证是一个很灵活的设计,具体要有哪些参数、参数名如何一定要根据场景来。(比如 userId、appId、version、固定值等)

思考:难道开发者每次调用接口都要自己写签名算法?

开发简单易用的 SDK(简历加分项)

项目名:yuapi-client-sdk

为什么需要 Starter?

理想情况:开发者只需要关心调用哪些接口、传递哪些参数,就跟调用自己写的代码一样简单。

开发 starter 的好处:开发者引入之后,可以直接在 application.yml 中写配置,自动创建客户端

Starter 开发流程

初始化,环境依赖(一定要移除 build):

spring-boot-configuration-processor 的作用是自动生成配置的代码提示

<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>

编写配置类(启动类):

@Configuration
@ConfigurationProperties(prefix = "yuapi.client")
@Data
@ComponentScan
public class YuApiClientConfig {

    /**
     * appId
     */
    private String appId;

    /**
     * 秘钥
     */
    private String appSecret;

    /**
     * 用户 id
     */
    private String userId;

    @Bean
    public YuApiClient yuApiClient() {
        return new YuApiClient(appId, appSecret, userId);
    }
}

注册配置类,resources/META_INF/spring.factories 文件:

# spring boot starter
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.yupi.yuapiclientsdk.YuApiClientConfig

mvn install 打包代码为本地依赖包

创建新项目(复用 server 项目)、测试

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

鱼皮的Java学习路线是一条全面贴心的自学编程指南,旨在帮助程序员入门并通关大厂。这个学习路线包括了以下内容: 1. 基础框架:包括Java基础、JavaWeb、MySQL等基础知识。 2. 数据库:学习使用MySQL进行数据存储和管理。 3. 中间件:学习使用Maven/Gradle进行项目构建,以及使用Redis进行缓存。 4. 微服务:学习使用Spring Boot和Spring Cloud进行微服务开发。 5. 消息队列:学习使用RabbitMQ进行消息传递和处理。 6. 容器:学习使用Docker和Kubernetes进行容器化部署和管理。 7. 数据结构与算法:学习力扣算法题目,提升编程能力。 8. Linux:学习Linux操作系统的基本知识和使用方法。 9. 网关:学习使用Nginx作为网关进行负载均衡和反向代理。 10. CI/CD:学习使用持续集成/持续交付工具进行自动化部署。 11. 计算机网络和操作系统:学习计算机网络和操作系统的基本原理。 12. 接口文档和接口测试:学习使用Swagger生成接口文档,以及使用Postman进行接口测试。 13. 并发编程:学习并发编程的基本概念和技术。 14. 设计模式:学习常用的设计模式,提高代码的可维护性和可扩展性。 15. 网络编程:学习使用Netty进行网络编程。 16. 分布式和云原生:学习分布式系统的设计和云原生应用的开发。 这个学习路线涵盖了Java开发的各个方面,从基础知识到高级技术都有所涉及,是一个非常全面的学习指南。你可以关注程序员鱼皮并访问他的编程导航网站获取更详细的学习资源和指导。 [2<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [java学习路线](https://blog.csdn.net/weixin_49337333/article/details/121169853)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [java后端学习路线整理](https://blog.csdn.net/weixin_44897349/article/details/128434408)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值