[代码规范]接口设计规范
一个优雅的接口要如何设计?有哪些设计规范可以遵循?
下面抛砖引玉,分享一些规范。
目录
1、RESTful API 设计最佳实践
2、Shneiderman 的 8 条黄金法则
3、Nielsen 的 10 条启发式规则
1、RESTful API 设计最佳实践
一共18条,参考了网上流传的18条规范并加以整理,基于 RESTful 规范源自微服务经验和企业实践。
包括了安全性、稳定性、可靠性、可拓展性、一致性、可维护型、高性能设计等方面。
适用于日常API开发,但要值得注意的是,通常接口开发的“快且正确的完成业务”优先级最高。
一个小的设计哲学口号:快速、可靠、优质
- 签名
- 指通过签名(如 HMAC-SHA256)验证请求的完整性和来源,常见于安全设计。
- 来源:API 安全最佳实践。
- 加密
- 数据传输使用 HTTPS,或对敏感字段加密(如 AES)。
- 来源:网络安全规范。
- IP 白名单
- 限制接口访问仅允许特定 IP,提升安全性。
- 来源:服务端安全策略。
- 限流
- 通过令牌桶或漏桶算法限制请求频率,防止接口被滥用。
- 来源:系统稳定性设计(如 Rate Limiting)。
- 参数校验
- 对输入参数进行验证(如非空、格式),避免非法请求。
- 来源:《阿里巴巴 Java 开发手册》或其他开发规范。
- 统一返回值
- 返回格式一致(如 JSON,含 code、message、data),便于调用方解析。
- 来源:RESTful API 设计准则。
- 统一封装异常
- 通过全局异常处理器返回标准错误响应。
- 来源:Java 开发最佳实践。
- 请求日志
- 记录请求信息(如时间、参数、IP),便于追踪和调试。
- 来源:运维和日志管理规范。
- 幂等设计
- 确保重复请求不产生副作用(如使用唯一标识)。
- 来源:RESTful API 设计原则。
- 限制记录条数
- 分页接口限制返回条数(如默认 20 条),避免性能问题。
- 来源:数据库查询优化。
- 压测
- 接口上线前进行压力测试,确保性能和稳定性。
- 来源:软件测试规范。
- 异步处理
- 耗时操作使用异步(如消息队列),提升响应速度。
- 来源:高并发系统设计。
- 数据脱敏
- 对敏感数据(如手机号)脱敏显示,保护隐私。
- 来源:数据安全和合规性要求(如 GDPR)。
- 完整的接口文档
- 提供详细的 API 文档(如 Swagger),包括参数、示例等。
- 来源:API 开发规范。
- 请求方式
- 使用合适的 HTTP 方法(如 GET、POST、PUT、DELETE)。
- 来源:RESTful API 规范。
- 请求头
- 定义标准请求头(如 Content-Type、Authorization)。
- 来源:HTTP 协议和 API 设计。
- 批量操作
- 支持批量请求,减少网络开销。
- 来源:性能优化实践。
- 职责单一
- 接口功能单一,避免“大杂烩”设计。
- 来源:SOLID 原则(单一职责原则)。
2、Shneiderman 的 8 条黄金法则
源自《Designing the User Interface》,这些法则最初针对图形用户界面(GUI)设计,但也广泛适用于 API 接口、Web 页面、移动应用等。
- 保持一致性(Strive for Consistency)
- 界面风格、术语、布局、操作应在整个系统中保持一致。例如,按钮样式、颜色、命名等应统一,避免用户混淆。
- 示例:所有“保存”按钮都使用绿色,且位于右下角。
- 支持快捷操作(Enable Frequent Users to Use Shortcuts)
- 为熟练用户提供快捷方式(如键盘快捷键、命令行),提高效率。
- 示例:Ctrl+S 保存,Ctrl+C 复制。
- 提供信息反馈(Offer Informative Feedback)
- 对用户的每个操作提供及时、清晰的反馈,告知结果或状态。
- 示例:点击“提交”后显示“提交成功”或“正在处理”提示。
- 设计对话框以体现完成感(Design Dialogs to Yield Closure)
- 操作流程应有明确的开始、中间和结束,让用户感到任务已完成。
- 示例:表单提交后显示“感谢您的提交”并关闭窗口。
- 预防和处理错误(Offer Error Prevention and Simple Error Handling)
- 设计时尽量避免用户犯错;发生错误时,提供简单易懂的解决方法。
- 示例:输入框限制只能输入数字,或错误时提示“请输入有效邮箱”。
- 支持撤销和重做(Permit Easy Reversal of Actions)
- 用户应能轻松撤销误操作,降低操作压力。
- 示例:删除文件后提供“撤销”选项。
- 增强用户控制感(Support Internal Locus of Control)
- 让用户感觉自己在掌控系统,而不是被系统牵制。
- 示例:允许用户随时取消长时间运行的任务。
- 减少短期记忆负担(Reduce Short-Term Memory Load)
- 界面设计应避免用户记住过多信息,提供提示或默认值。
- 示例:表单自动填充常用选项,而不是让用户每次手动输入。
3、Nielsen 的 10 条启发式规则
源自 Nielsen Norman Group官网,这些规则广泛应用于 UI/UX 设计,包括网站、移动应用、软件界面等。虽然主要针对用户界面,但部分原则(如一致性、错误处理)也可启发 API 设计。
- 系统状态可见性(Visibility of System Status)
- 用户应随时知道系统当前状态,提供及时反馈。
- 示例:上传文件时显示进度条。
- 系统与现实匹配(Match Between System and the Real World)
- 使用用户熟悉的语言和概念,避免技术术语。
- 示例:购物车图标表示“添加购物车”。
- 用户控制与自由(User Control and Freedom)
- 提供撤销和重做功能,让用户能纠正错误。
- 示例:浏览器中的“后退”按钮。
- 一致性与标准(Consistency and Standards)
- 界面元素、术语和行为应保持一致,遵循行业标准。
- 示例:所有页面顶部都有导航栏。
- 错误预防(Error Prevention)
- 设计时避免用户犯错,提供约束或确认机制。
- 示例:提交表单前要求确认。
- 识别优于回忆(Recognition Rather than Recall)
- 减少用户记忆负担,提供可见的选项或提示。
- 示例:下拉菜单代替手动输入日期。
- 灵活性与效率(Flexibility and Efficiency of Use)
- 满足新手和专家需求,支持快捷方式。
- 示例:支持鼠标点击和键盘快捷键。
- 简洁美观的设计(Aesthetic and Minimalist Design)
- 只显示相关信息,避免无关内容干扰。
- 示例:登录页面只包含用户名和密码字段。
- 帮助用户识别、诊断和恢复错误(Help Users Recognize, Diagnose, and Recover from Errors)
- 错误信息应清晰易懂,并提供解决方案。
- 示例:“密码错误,请重试或点击‘忘记密码’”。
- 帮助与文档(Help and Documentation)
- 提供易于搜索和理解的帮助文档。
相关文章:
[代码规范]接口设计规范
一个优雅的接口要如何设计?有哪些设计规范可以遵循? 下面抛砖引玉,分享一些规范。 目录 1、RESTful API 设计最佳实践 2、Shneiderman 的 8 条黄金法则 3、Nielsen 的 10 条启发式规则 1、RESTful API 设计最佳实践 一共18条,参考…...
什么是最终一致性,它对后端系统的意义是什么
最终一致性(Eventual Consistency)是分布式系统中的一种一致性模型。与传统的强一致性模型不同,最终一致性并不要求系统在任何时刻都保持一致,而是保证在足够的时间后,所有节点的数据最终会达到一致的状态。换句话说,系统允许短时间内出现数据的不一致性,但最终会通过某…...
Unity学习笔记之——ugui的性能优化
在Unity中UI优化的核心问题就是重绘和批处理之间的平衡 一、Canvas优化要点 1.优化原因: (1)Unity为了性能优化,会合并Canvas下的所有元素; (2)如果把所有面板放到一个Canvas下,会…...
Python接口自动化中操作Excel文件的技术方法
在Python接口自动化测试中,操作Excel文件是一项常见且关键的技术需求。Excel作为数据存储和数据分析的重要工具,在自动化测试中通常用于存储测试用例、测试数据以及测试结果。通过Python操作Excel,可以大大提高测试的效率和灵活性。以下是一些…...
[Windows] 免费电脑控制手机软件 极限投屏_正式版_3.0.1 (QtScrcpy作者开发)
[Windows] 极限投屏_正式版 链接:https://pan.xunlei.com/s/VOKJf8Z1u5z-cHcTsRpSd89tA1?pwdu5ub# 新增功能(Future): 支持安卓14(Supports Android 14)提高投屏成功率(Improve the success rate of mirror)加快投屏速度(Accelerate screen mirrorin…...
游戏引擎学习第131天
仓库:https://gitee.com/mrxiao_com/2d_game_3 运行游戏并识别我们的小问题 今天的工作重点是对游戏引擎进行架构优化,特别是针对渲染和多线程的部分。目前,我们的目标是让地面块在独立线程上进行渲染,以提高性能。在此过程中,我…...
Visual Studio Code集成MarsCode AI
Visual Studio Code集成MarsCode AI 1、搜索MarsCode AI 安装包 2、点击install安装即可 小编这里已经安装过了 3、登录自己的账号 点击链接,注册账号 https://www.marscode.cn/events/s/i5DRGqqo/ 4、登录后可以自己切换模型...
partner‘127.0.0.1:3200‘ not reached
在SAP虚拟机中,如果LRPSAP 0显示黄色,通常表示服务启动异常或存在配置问题。以下是一些可能的处理方法: 检查主机文件配置 确保主机文件(hosts)中已正确配置SAP服务的域名解析。例如,添加以下内容到hosts文…...
蓝桥备赛(六)- C/C++输入输出
一、OJ题目输入情况汇总 OJ(online judge) 接下来会有例题 , 根据一下题目 , 对这些情况进行分析 1.1 单组测试用例 单在 --> 程序运行一次 , 就处理一组 练习一:计算 (ab)/c 的值 B2009 计算 (ab)/c …...
Flume
Flume安装配置 使用的三台主机名称分别为bigdata1,bigdata2,bigdata3。所使用的安装包名称按自己的修改,安装包可去各大官网上下载 1.解压 将Master节点Flume安装包解压到/opt/module目录下 tar -zxvf /opt/software/apache-flume-1.9.0-bi…...
Java 大视界 -- Java 大数据中的时间序列数据异常检测算法对比与实践(103)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
三次握手内部实现原理
socket()创建一个新的套接字 int socket(int domain, int type, int protocol); 参数: domain:地址族,如 AF_INET(IPv4),AF_INET6(IPv6) type:套接字类型&…...
ES from size聚合查询10000聚合查询,是每个分片先聚合,再统计。还是所有节点查询1万条后,再聚合
在 Elasticsearch 中,聚合查询 的执行过程是 分布式 的,Elasticsearch 会先在每个分片(shard)上执行本地聚合,然后再在协调节点(coordinating node)上对所有分片的聚合结果进行 全局汇总。具体过…...
JAVA实战开源项目:安康旅游网站(Vue+SpringBoot) 附源码
本文项目编号 T 098 ,文末自助获取源码 \color{red}{T098,文末自助获取源码} T098,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...
Redis详解(实战 + 面试)
目录 Redis 是单线程的!为什么 Redis-Key(操作redis的key命令) String 扩展字符串操作命令 数字增长命令 字符串范围range命令 设置过期时间命令 批量设置值 string设置对象,但最好使用hash来存储对象 组合命令getset,先get然后在set Hash hash命令: h…...
宝塔webhooks与码云实现自动部署
1. 宝塔面板配置Webhook 登录宝塔面板,进入「软件商店」→ 搜索「Webhook」并安装。添加Webhook: 名称:自定义(如 Gitee自动部署)脚本:编写部署脚本,示例如下:#!/bin/bash# 项目路径…...
什么是Agentic AI?(Doubao-1.5-pro-32k 大模型开启联网回答)
Agentic AI即代理式人工智能,也称为智能体AI、代理式AI、能动AI或自主AI(Autonomous AI),是人工智能领域的新兴概念。它是指被设计用来通过理解目标、导航复杂环境,并在最少的人工干预下执行任务的系统,能够…...
LSTM预测模型复现笔记和问题记录
LSTM复现笔记和问题记录 1 LSTM复现记录1.1 复现环境配置1.2 LSTM_Fly文件夹1.2.1 LSTM回归网络(1→1).py1.2.1.1 加载数据1.2.1.2 数据处理1.2.1.3 输入模型维度 1.2.2 移动窗口型回归(3→1).py1.2.2.1 数据处理1.2.2.2 输入模型维度 1.2.3 时间步长型回归(3→1).py1.2.3.1 数…...
开篇词 | Go 项目开发极速入门课介绍
欢迎加入我的训练营:云原生 AI 实战营,一个助力 Go 开发者在 AI 时代建立技术竞争力的实战营。实战营中包含大量 Go、云原生、AI Infra 相关的优质实战课程和项目。欢迎关注我的公众号:令飞编程,持续分享 Go、云原生、AI Infra 技…...
《论软件测试中缺陷管理及其应用》审题技巧 - 系统架构设计师
论软件测试中缺陷管理及其应用写作框架 一、考点概述 本论题“论软件测试中缺陷管理及其应用”主要考查的是软件测试领域中的缺陷管理相关知识与实践应用。论题涵盖了以下几个核心内容: 首先,需要理解软件缺陷的基本概念,即软件中存在的破坏正常运行能力的问题、错误或隐…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...
