当前位置: 首页 > news >正文

后端接口设计

一、基本规范

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 位)和更精细的访问控制列表&#xff…...

AI Agent案例全解析:百度营销智能体(8/30)

引言:在当今这个科技飞速发展的时代,AI技术呈现出爆发式的增长,正以前所未有的态势改变着众多行业的发展轨迹,营销领域也不例外。随着市场竞争的日益激烈,传统营销模式逐渐显露出疲态,对于变革的需求愈发迫…...

hive常用函数有哪些

Hive是一个基于Hadoop的数据仓库工具,它提供了类似于SQL的接口,用于数据查询和分析。Hive提供了许多内置函数,这些函数可以分为几种类型,包括: • 字符串函数:用于处理字符串数据。 • concat()&#xff1…...

【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服务质量(…...

数据库的数据被清除了,该如何恢复?

当数据库的数据被清除时,恢复数据的难度和可能性取决于多种因素,包括数据清除的方式、数据库的类型、是否有备份等。以下是一些常见的数据库数据恢复方法: 一、基于备份的恢复 使用备份文件: 如果数据库有定期的备份&#xff0c…...

【西安电子科技大学考研】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…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子&#xff08…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...

golang循环变量捕获问题​​

在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下: 问题背景 看这个代码片段: fo…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...