API开放平台项目全过程总结

项目整体流程介绍:

该项目是一个api的调用平台,类似于百度开发者中心,使用者可以访问然后调用自己需要的接口来实现自己的功能

该项目的简单模拟了这个流程

该系统有三个子后端系统,分别是传统的用户管理系统,API网关系统,还有接口系统。

整体的流程如下图:

用户在前端页面发出请求,可以请求管理系统,里面就是对用户和接口的一些基本的crud, 

当用户想要调用接口的时候,这个时候API网关就会对请求进行一个统一的拦截,先对用户和请求的接口进行校验(在里面包括用到了API签名认证的技术对用户的身份进行了一个严格的校验,

还有接口的剩余调用次数是否为0,或者接口是否存在这写简单需要也进行了校验)

然后这个网关就会做一个路由的重定向,将你请求转发到后端的真是接口地址上。

这样做也是为了更好的保护后端接口。

同时调用接口的时候,不需要用户自己去发送请求,客户端调用SDK调用接口获取返回数据即可。

技术选型:

 我是个主后端的,就单纯记录后端技术就行

1:springboot主流的开发框架

2:huTools接口请求的工具

3:自定义springbootstarter(SDK)

4:API签名认证

5:springcloudgateway网关(路由转发,限流,鉴权)

6:Dubbo框架实现远程调用(RPC),用nacos注册中心

数据库分析: 

项目刚开始的时候只有两张表

user:用户信息表

interface_info:接口信息表

create table user
(
    id           bigint auto_increment comment 'id'
        primary key,
    userName     varchar(256)                           null comment '用户昵称',
    userAccount  varchar(256)                           not null comment '账号',
    userAvatar   varchar(1024)                          null comment '用户头像',
    gender       tinyint                                null comment '性别',
    userRole     varchar(256) default 'user'            not null comment '用户角色:user / admin',
    userPassword varchar(512)                           not null comment '密码',
    createTime   datetime     default CURRENT_TIMESTAMP not null comment '创建时间',
    updateTime   datetime     default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间',
    isDelete     tinyint      default 0                 not null comment '是否删除',
    accessKey    varchar(512)                           null,
    secretKey    varchar(512)                           null,
    constraint uni_userAccount
        unique (userAccount)
)
    comment '用户';

基本的用户信息

还有一个AK和SK进行后面的API签名认证

create table interface_info
(
    id             bigint 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 '响应头',
    userId         bigint                             null,
    status         int      default 0                 not null comment '接口状态(0 - 关闭, 1 - 开启))',
    method         varchar(256)                       not null comment '请求类型',
    createTime     datetime default CURRENT_TIMESTAMP not null comment '创建时间',
    updateTime     datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间',
    isDelete       tinyint  default 0                 not null comment '是否删除(0-未删, 1-已删)',
    requestParams  varchar(255)                       null,
    version        int      default 1                 null
)
    comment '接口信息表';

接口信息表

保护接口地址,请求头,响应头,请求方式,请求参数

还有一张用户接口关联表

这一张是后面才加上去的。

主要的用处就是用户对应的接口调用了几次,还有几次的剩余调用次数

这张表也是多对多的表

一个用户可以调用多个接口

一个接口也可以被多个用户调用

create table user_interface_info
(
    id              bigint auto_increment comment '主键'
        primary key,
    userId          bigint                             not null comment '调用用户 id',
    interfaceInfoId bigint                             not null comment '接口 id',
    totalNum        int      default 0                 not null comment '总调用次数',
    leftNum         int      default 0                 not null comment '剩余调用次数',
    status          int      default 0                 not null comment '0-正常,1-禁用',
    createTime      datetime default CURRENT_TIMESTAMP not null comment '创建时间',
    updateTime      datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间',
    isDelete        tinyint  default 0                 not null comment '是否删除(0-未删, 1-已删)',
    version         int      default 1                 null
)
    comment '用户调用接口关系';

API签名认证:

思考了一下这个整体流程来说,基本的用户和接口的crud写完。

下面的流程应该是

先自己模拟调用接口(用HuTool工具来模拟调用)

接口再写自定义的starter

然后再使用API签名认证的技术来进行接口调用的校验

但是我那个时候对这个流程没有想那么清楚,我把模拟调用接口和API签名认证的技术写在一篇文章里了。

凑合着记录

API签名认证-CSDN博客

后面这一篇是自定义starter,里面配置了阿里云OSS文件上传的starter,整体流程差不多

springboot自动装配原理(源码分析)及自定义starter-CSDN博客

 springcloudgateway网关:

API网关理解-CSDN博客

远程调用

Dubbo框架实现RPC远程调用-CSDN博客

已经完成的扩展点:

阿里云OSS头像上传

剩余接口次数的统计(就是看你的接口的剩余次数还有没有,没有就不允许调用)

接口统计数据的乐观锁实现

获取登录用户信息优化(两种方式:传统会话技术和jwt技术)

剩余扩展点:

SDK优化:

这个项目中的一个SDK调用了所有的接口,耦合度太高,优化点就是根据接口的业务进行分类写sdk

系统重构成微服务:

这个项目的整体接口比较适合改造成微服务

等我学完黑马的springcloud再回来改

接口的分配机制:

主要的需求:用户的接口分配次数

那这个接口分配次数怎么分配呢?

很好理解,你买了多少,我就给你分多少

手机短信接口限流

在一定时间内,给一个特定的手机号发送验证码或者短信之类的东西

请求太多次服务器需要拒绝

用简单的令牌桶算法进行限流

网关限流

接口数据一致性:

调用接口剩余次数,调用接口和统计接口三个操作具体一致性

什么意思呢,就是这三个操作时绑定在一起的,结合MySql的事务理解。


这些扩展点是看星球的一位同学写的,等我自己真正去做的时候,应该还会有其它的想法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值