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

news2025/1/6 19:29:29

项目整体流程介绍:

该项目是一个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的事务理解。


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1987801.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在S/4HANA OP 1511中激活嵌入式分析的基本配置

大家好,在这篇博客中,我将讨论在 S/4HANA On-Premise 1511 版本中激活嵌入式分析的基本配置。本博客主要关注Fiori前端系统和S/4HANA后端系统的分离安装。让我们深入了解一下。 景观 前端系统 SAP Fiori for S/4HANA OP 1511 Bakend系统SAP S/4HANA后…

在Stable Diffusion中驱动Tesla P40

一、安装P40显卡 在前面我的“在win10电脑上搭建python环境下的本地AI绘画工具Stable Diffusion”博文中,Stable Diffusion的运行完全依赖CPU和内存,因此每生成一次图片,需几小时之多,我常是在临下班时开始生成,到第二…

CSS基础 - 基础

目录 一. 简介 二. 基本用法 三. 总结 一. 简介 CSS(Cascading Style Sheets,层叠样式表)是一种用于描述网页外观和布局的样式表语言。 一、基本作用 外观设计 CSS 可以控制网页中元素的颜色、字体、大小、粗细、样式(如斜体…

电子电气架构 --- 车辆模式管理

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

【开源】嵌入式Linux(IMX6U)应用层综合项目(4)--音乐播放器APP

1.简介 此文章并不是教程,只能当作笔者的学习分享,只会做一些简单的介绍,其他的各位结合着代码和运行现象自己分析吧,相信通过函数名和注释,基本上是不难看懂代码的,其中涉及到的一些技术栈,也…

springboot员工健康管理系统论文源码调试讲解

1系统成功运行案例 2 相关技术 2.1 springboot框架介绍 本课题程序开发使用到的框架技术,英文名称缩写是springboot,在JavaWeb开发中使用的流行框架有SSH、SSM、springboot、SpringMVC等,作为一个课题程序采用SSH框架也可以,SSM框…

2002年-至今阿拉斯加北部的北极地区测量数据集(气候、冰层、生态系统和人类活动)

Measurements in the Arctic region north of Alaska in 2002 2002年-至今阿拉斯加北部的北极地区测量数据集 简介 2002年阿拉斯加北部的北极地区测量数据集提供了关于该地区环境变化的重要信息,涵盖气候、冰层、生态系统和人类活动等多个方面。以下是该数据集的…

【socket编程】UDP网络通信 {简单的服务器echo程序;简单的远程控制程序;简单的网络聊天室程序}

今天我们通过以下的几个surver/client模型了解一下UDP网络通信 一、简单的服务器echo程序 以下部分内容转载自「网络编程」简单UDP网络通信程序的实现_socket udp-CSDN博客 1.1 服务端 首先明确,这个简单的UDP网络程序分客户端…

v2rayU 将对你的电脑造成伤害 弹窗问题

如果删除v2rayU软件了还是反复弹窗,网上其他方法都不行的话,不妨试试这个方法,亲测有效: 在系统搜索 登陆,找到登陆项: 将「允许在后台」关闭后,不再提示。

java -- SpringMVC表现层数据封装详解

表现层数据封装 介绍 1. ModelAndView ModelAndView是Spring MVC提供的一个对象,用于封装模型数据和视图信息。当Controller处理完用户请求后,会返回一个ModelAndView对象给DispatcherServlet,DispatcherServlet再解析这个对象&#xff0c…

河南建筑装饰资质延期资料准备步骤详解

河南建筑装饰资质延期资料的准备是一个细致且重要的过程,以下是详细的准备步骤: 一、前期准备与规划 了解政策与要求 访问河南省住房和城乡建设厅的官方网站、政务服务平台等权威渠道,获取最新的建筑装饰资质延期政策、要求、流程和时间节点…

从 Pandas 到 Polars 四十四:Polars 和 数据可视化库Seaborn

在我对Matplotlib感到沮丧并发表帖子时,我的朋友让我试试Seaborn库。近年来我一直在使用Altair,因此并没有过多考虑Seaborn。然而,Seaborn的新界面给我留下了深刻印象,并且我很高兴地发现,Seaborn将直接接受Polars的Da…

4.7.深层循环神经网络

深层循环网络 ​ 就是更深了,因为之前的网络都只有一层隐藏层,弄多一点 ​ 我们将多层循环神经网络堆叠在一起,通过对几个简单层的组合,产生了一个灵活的机制。上图展示了一个具有 L L L个隐藏层的深度循环神经网络,每…

滑动验证码的介绍!

一、什么是滑动验证? 滑动验证(通常也被称为滑块验证)是一种用户交互式的验证方法。它要求用户通过鼠标或触摸屏,将滑块按照指定的路径或方向滑动到正确的位置,以完成验证过程。这种验证方式不仅增加了自动化攻击的难…

mysql源码编译启动debug

对于没有C语言基础的同学来说,想看看源码,在搞定编辑器做debug的时候就被劝退了,发生点啥了,完全看不懂,不知道从哪里入手去做debug;我为了看看 mysql 的 insert buffer 到底存的是索引页还是数据页&#x…

Tik Tok账号被限流什么原因?怎么解决?

TikTok账号被限流,无疑是让众多内容创作者头疼的问题。浏览量骤减,账号活跃度下降,究竟是什么原因导致的限流?今天,我们将深入探讨TikTok限流的几大成因,大家运营的时候尽量避免这些问题,同时也…

极狐GitLab与无问芯穹达成战略合作,共探AI落地软件智能研发场景新机遇

极狐GitLab 是 GitLab 在中国的发行版,专门面向中国程序员和企业提供企业级一体化 DevOps 平台,用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规,而且所有的操作都是在一个平台上进行,省事省心省钱。可以一键安装极狐GitL…

教程 | USB-IF USBCV软件工具使用指南

一. 概述 CVTest 是基于 USBCV 软件工具的合规性测试,可以验证设备是否符合 USB 规范和标准。USBCV 则是 USB-IF 提供的一款免费 USB 装置测试软体,简要做 USB2.0 及 USB3.0 装置相关测试。本文将基于 NXP LPC5516 HID 类键盘简要讲解 USBCV 中公有 USB…

两个向量的余弦相似度如何计算

两个向量的余弦相似度是通过测量两个向量在方向上的相似性来计算的。它是向量空间中两个向量夹角的余弦值。如果两个向量的方向相同,它们的余弦相似度接近1;如果两个向量的方向完全相反,它们的余弦相似度接近-1;如果两个向量正交&…

求职Leetcode题目(5)

1.分割回文串 每一个结点表示剩余没有扫描到的字符串,产生分支是截取了剩余字符串的前缀;产生前缀字符串的时候,判断前缀字符串是否是回文。如果前缀字符串是回文,则可以产生分支和结点;如果前缀字符串不是回文&#…