后端接口设计
一、基本规范
1.URL设计
应遵循RESTful风格,使用动词+名词的方式描述接口的功能。应简洁明了,易于理解和记忆。
2.请求协议及方法
使用HTTPS协议进行数据传输,保证数据在传输过程中的安全性。如无特殊情况,统一使用post方法。
3.参数设计
参数命名应规范,具有描述性。参数类型、长度、范围等应明确。避免使用过多的嵌套参数,保持参数结构的简洁性。
4.响应格式
应统一返回格式,包括状态码、消息提示和数据体等。数据体中的字段命名、类型等应与请求参数保持一致。
二、安全性
1.身份验证
根据实际需要,通过token等方式进行身份验证。
2.权限控制
根据用户的角色和权限进行接口访问控制,防止未授权操作。
3.数据加密
对敏感数据进行加密传输,如密码、身份证号等。
4.数据脱敏
根据实际需要,对敏感数据(如身份证号)进行脱敏处理,防止数据泄露。
5.参数校验
对输入参数进行严格的校验和过滤,防止SQL注入攻击。
6.接口幂等性
同一个请求被发送多次时,对服务器资源的改变应是一致的。通常是在表单提交、创建订单、支付操作、数据同步等场景。为每次请求生成一个唯一的标识,并在服务器端进行校验。在执行操作前,先检查目标资源的状态。如果资源已经处于期望的状态,则不再执行操作。例如,在支付场景中,可以先检查订单是否已经支付成功,如果已经支付,则直接返回成功结果。在数据库层面或应用层面实现去重逻辑,确保相同的请求不会重复影响资源状态。例如,在插入数据时,可以使用数据库的唯一约束来防止重复插入。更新资源时,使用乐观锁机制(如版本号、时间戳等)来确保更新操作的原子性和一致性。当检测到版本冲突时,可以拒绝更新请求或提示用户重试。
7.IP白名单/黑名单
根据实际需要,限制特定IP地址的访问,提高安全性。
三、性能方面
1.缓存策略
使用缓存(如Redis)可以减少对数据库或其他资源的访问,提高接口响应速度。
2.限流控制
对接口进行限流,防止恶意攻击或突发流量导致系统崩溃。常用的限流算法有令牌桶、漏桶等。
3.异步处理
对于耗时较长的操作,如文件上传、数据计算等,可采用异步处理方式,提高接口的并发处理能力。
4.线程池隔离
核心接口和普通接口要进行线程池隔离。避免普通接口出现bug把线程池打满了,导致主业务受到影响。
5.控制锁粒度
在高并发场景下,为了防止超卖等情况,我们会对共享资源进行加锁的操作来保证线程安全的问题,但是如果加锁的粒度过大,是会影响到接口性能的。只需要在共享临界资源加锁即可,不涉及共享资源的,就不必要加锁。
6.避免长事务
长事务可能会占用数据库连接池资源,导致其他请求无法获取连接,同时还会锁定大量数据,造成阻塞和锁超时等问题。将大事务拆分为小事务,将非事务性操作与事务性操作分开,可以使用编程式事务(如TransactionTemplate)来手动控制事务的范围和提交时机。尽量避免在事务中进行远程接口调用(如RPC调用),因为这些调用可能会引入额外的延迟和不确定性。
四、可扩展性和兼容性
1.版本控制
通过请求头等方式进行接口版本控制,确保新旧版本接口的兼容性以及平滑过渡。
2.接口单一职责
每个接口应只负责一个功能点,保持接口的简洁性和可维护性。
3.可扩展性
在设计接口时,要考虑到未来的扩展需求,预留一定的扩展空间。
五、日志和错误处理
1.日志记录
记录接口请求日志,包括请求时间、请求参数、响应结果等,便于问题排查和性能分析。
2.统一错误码
定义清晰、统一的错误码,方便客户端识别和处理错误。
3.超时及重试机制
根据实际需要,设置合理的超时时间可以避免用户长时间等待,提高用户体验,也有助于防止服务端因处理超时请求而耗尽资源,导致服务瘫痪。接口重试机制是指在接口请求失败时,按照一定的策略和次数重新发起请求的过程。在重试过程中,需要记录每次重试的日志信息,以便后续分析和排查问题。如果接口操作不具有幂等性,则需要谨慎使用重试机制,以避免产生副作用。
相关文章:
后端接口设计
一、基本规范 1.URL设计 应遵循RESTful风格,使用动词名词的方式描述接口的功能。应简洁明了,易于理解和记忆。 2.请求协议及方法 使用HTTPS协议进行数据传输,保证数据在传输过程中的安全性。如无特殊情况,统一使用post方法。 …...
Docker部署Sentinel
一、简介 是什么:面向分布式、多语言异构化服务架构的流量治理组件 能干嘛:从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性 官网地址:https://sentinelguard.io/zh-c…...
真实环境下实车运行,新能源汽车锂离子电池数据集
引言 锂离子电池(Lithium-ion Batteries,LiBs)已经作为电动汽车核心动力源,其性能直接关系到系统的性能和使用安全。为确保锂电池的安全使用,需要对锂电池的状态进行精确的估计,包括荷电状态(State of Charge, soC)、健康状态(St…...
【求职面试】驾照的种类
大型客车 A1 大型载客汽车 A3、B1、B2、C1、C2、C3、C4、M 牵引车 A2 重型、中型全挂、半挂汽车列车 B1、B2、C1、C2、C3、C4、M 城市公交车 A3 核载10人以上的城市公共汽车 C1、C2、C3、C4 中型客车 B1 中型载客汽车(10人以上、19人以下) C1、C2、C3…...
centos权限大集合,覆盖多种权限类型,解惑权限后有“. + t s”问题!
在 CentOS 系统中,权限管理是操作系统的核心功能之一,确保不同用户和进程对文件、目录以及设备的访问被合理控制。 权限系统主要包括传统的 Unix 权限模型、特殊权限(SetUID、SetGID、Sticky 位)和更精细的访问控制列表ÿ…...
AI Agent案例全解析:百度营销智能体(8/30)
引言:在当今这个科技飞速发展的时代,AI技术呈现出爆发式的增长,正以前所未有的态势改变着众多行业的发展轨迹,营销领域也不例外。随着市场竞争的日益激烈,传统营销模式逐渐显露出疲态,对于变革的需求愈发迫…...
hive常用函数有哪些
Hive是一个基于Hadoop的数据仓库工具,它提供了类似于SQL的接口,用于数据查询和分析。Hive提供了许多内置函数,这些函数可以分为几种类型,包括: • 字符串函数:用于处理字符串数据。 • concat()࿱…...
【Python高级353】python实现多线程版本的TCP服务器
前面学了了套接字编程、tcp服务端客户端开发、面向对象版的服务端客户端、带有端口复用的服务端。 这里使用多线程开发多任务版的服务端 多任务版本的TCP服务器 来一个客户,就为其创建一个线程 import socket import threadingclass WebServer:# 3、定义一个__ini…...
分布式调度框架学习笔记
一、分布式调度框架的基本设计 二、线程池线程数量设置的基本逻辑 cpu是分时复用的方法,线程是cpu调度的最小单元 如果当前cpu核数是n,计算密集型线程数一般设为n,io密集型(包括磁盘io和网络io)线程数一般设置为2n. 计算密集型线程数一般设…...
SpringCloudAlibaba技术栈-Nacos
1、什么是Nacos? Nacos是个服务中心,就是你项目每个功能模块都会有个名字,比如支付模块,我们先给这个模块起个名字就叫paymentService,然后将这个名字和这个模块的配置放到Nacos中,其他模块也是这样的。好处是这样能更好地管理项…...
Redis篇--常见问题篇4--大Key(Big Key,什么是大Key,影响及使用建议)
1、概述 大Key:通常是指值(Value)的长度非常大,实际上键(Key)长度很大也算。通常来说,键本身不会很长,占用的内存较少,因此判断一个键是否为bigKey主要看它对应的值的大…...
谷歌浏览器 Chrome 提示:此扩展程序可能很快将不再受支持
问题现象 在Chrome 高版本上的扩展管理页面(地址栏输入chrome://extensions/或者从界面进入): , 可以查看到扩展的情况。 问题现象大致如图: 问题原因 出现此问题的根本原因在于:谷歌浏览器本身的扩展机制发生了…...
WebRTC服务质量(10)- Pacer机制(02) RoundRobinPacketQueue
WebRTC服务质量(01)- Qos概述 WebRTC服务质量(02)- RTP协议 WebRTC服务质量(03)- RTCP协议 WebRTC服务质量(04)- 重传机制(01) RTX NACK概述 WebRTC服务质量(…...
数据库的数据被清除了,该如何恢复?
当数据库的数据被清除时,恢复数据的难度和可能性取决于多种因素,包括数据清除的方式、数据库的类型、是否有备份等。以下是一些常见的数据库数据恢复方法: 一、基于备份的恢复 使用备份文件: 如果数据库有定期的备份,…...
【西安电子科技大学考研】25官方复试专业课参考书目汇总
初试已经顺利考完啦、成绩已经公布,现在已经有很多同学来问学长学姐,复试参考书有哪些,复试应该做好哪些准备。故此学长学姐给大家整理好了西安电子科技大学各个学院的复试参考书目录,有需要的同学可以参考一下哈。大家可以结合本…...
【理解机器学习中的过拟合与欠拟合】
在机器学习中,模型的表现很大程度上取决于我们如何平衡“过拟合”和“欠拟合”。本文通过理论介绍和代码演示,详细解析过拟合与欠拟合现象,并提出应对策略。主要内容如下: 什么是过拟合和欠拟合? 如何防止过拟合和欠拟…...
fastjson诡异报错
1、环境以及报错描述 1.1 环境 操作系统为中标麒麟、cpu 为国产鲲鹏服务器。 jdk为openjdk version 1.8.0._242 1.2 错误 com.alibaba.fastjson2.JSONException: syntax error : f at com.alibaba.fastjson2.JSONReaderUTF16.readBoolValue(JSONReaderUTF16.java:6424) at c…...
面经zhenyq
如何去实现分层的动画效果? 在Unity中实现分层的动画效果,可以通过Animator的 Layer 功能实现。以下是详细步骤: 1. 什么是分层动画? 分层动画允许在同一个角色的不同部分同时播放独立的动画。例如: 上半身可以播放…...
GoFrame框架介绍
GoFrame是一款功能强大、设计精良且易用的Go语言开发框架,以下为你详细介绍它的相关特点和内容: ### 框架概述 GoFrame是为了提升Go语言开发者的编码效率以及项目的整体可维护性、可扩展性等而打造的开发框架,它涵盖了从基础的网络通信、数据…...
MapReduce工作流程+Shuffle机制
一、Mapreduce工作流程 (1)数据切片Split。数据切片数决定maptask并行度,默认情况下,一个切片大小块大小。切片不是针对整体数据集,而是针对每一个文件单独切片,所以会有小文件问题(CombineTex…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
