[代码规范]接口设计规范
一个优雅的接口要如何设计?有哪些设计规范可以遵循?
下面抛砖引玉,分享一些规范。
目录
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 技…...
《论软件测试中缺陷管理及其应用》审题技巧 - 系统架构设计师
论软件测试中缺陷管理及其应用写作框架 一、考点概述 本论题“论软件测试中缺陷管理及其应用”主要考查的是软件测试领域中的缺陷管理相关知识与实践应用。论题涵盖了以下几个核心内容: 首先,需要理解软件缺陷的基本概念,即软件中存在的破坏正常运行能力的问题、错误或隐…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
libfmt: 现代C++的格式化工具库介绍与酷炫功能
libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全:…...
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...
链式法则中 复合函数的推导路径 多变量“信息传递路径”
非常好,我们将之前关于偏导数链式法则中不能“约掉”偏导符号的问题,统一使用 二重复合函数: z f ( u ( x , y ) , v ( x , y ) ) \boxed{z f(u(x,y),\ v(x,y))} zf(u(x,y), v(x,y)) 来全面说明。我们会展示其全微分形式(偏导…...
数据结构:泰勒展开式:霍纳法则(Horner‘s Rule)
目录 🔍 若用递归计算每一项,会发生什么? Horners Rule(霍纳法则) 第一步:我们从最原始的泰勒公式出发 第二步:从形式上重新观察展开式 🌟 第三步:引出霍纳法则&…...
