[代码规范]接口设计规范

一个优雅的接口要如何设计?有哪些设计规范可以遵循?

下面抛砖引玉,分享一些规范。

目录

1、RESTful API 设计最佳实践

2、Shneiderman 的 8 条黄金法则

3、Nielsen 的 10 条启发式规则

1、RESTful API 设计最佳实践

一共18条,参考了网上流传的18条规范并加以整理,基于 RESTful 规范源自微服务经验和企业实践。

包括了安全性、稳定性、可靠性、可拓展性、一致性、可维护型、高性能设计等方面。

适用于日常API开发,但要值得注意的是,通常接口开发的“快且正确的完成业务”优先级最高。

一个小的设计哲学口号:快速、可靠、优质

  1. 签名
    • 指通过签名(如 HMAC-SHA256)验证请求的完整性和来源,常见于安全设计。
    • 来源:API 安全最佳实践。
  2. 加密
    • 数据传输使用 HTTPS,或对敏感字段加密(如 AES)。
    • 来源:网络安全规范。
  3. IP 白名单
    • 限制接口访问仅允许特定 IP,提升安全性。
    • 来源:服务端安全策略。
  4. 限流
    • 通过令牌桶或漏桶算法限制请求频率,防止接口被滥用。
    • 来源:系统稳定性设计(如 Rate Limiting)。
  5. 参数校验
    • 对输入参数进行验证(如非空、格式),避免非法请求。
    • 来源:《阿里巴巴 Java 开发手册》或其他开发规范。
  6. 统一返回值
    • 返回格式一致(如 JSON,含 code、message、data),便于调用方解析。
    • 来源:RESTful API 设计准则。
  7. 统一封装异常
    • 通过全局异常处理器返回标准错误响应。
    • 来源:Java 开发最佳实践。
  8. 请求日志
    • 记录请求信息(如时间、参数、IP),便于追踪和调试。
    • 来源:运维和日志管理规范。
  9. 幂等设计
    • 确保重复请求不产生副作用(如使用唯一标识)。
    • 来源:RESTful API 设计原则。
  10. 限制记录条数
    • 分页接口限制返回条数(如默认 20 条),避免性能问题。
    • 来源:数据库查询优化。
  11. 压测
    • 接口上线前进行压力测试,确保性能和稳定性。
    • 来源:软件测试规范。
  12. 异步处理
    • 耗时操作使用异步(如消息队列),提升响应速度。
    • 来源:高并发系统设计。
  13. 数据脱敏
    • 对敏感数据(如手机号)脱敏显示,保护隐私。
    • 来源:数据安全和合规性要求(如 GDPR)。
  14. 完整的接口文档
    • 提供详细的 API 文档(如 Swagger),包括参数、示例等。
    • 来源:API 开发规范。
  15. 请求方式
    • 使用合适的 HTTP 方法(如 GET、POST、PUT、DELETE)。
    • 来源:RESTful API 规范。
  16. 请求头
    • 定义标准请求头(如 Content-Type、Authorization)。
    • 来源:HTTP 协议和 API 设计。
  17. 批量操作
    • 支持批量请求,减少网络开销。
    • 来源:性能优化实践。
  18. 职责单一
    • 接口功能单一,避免“大杂烩”设计。
    • 来源:SOLID 原则(单一职责原则)。

2、Shneiderman 的 8 条黄金法则

源自《Designing the User Interface》,这些法则最初针对图形用户界面(GUI)设计,但也广泛适用于 API 接口、Web 页面、移动应用等。

  1. 保持一致性(Strive for Consistency)
    • 界面风格、术语、布局、操作应在整个系统中保持一致。例如,按钮样式、颜色、命名等应统一,避免用户混淆。
    • 示例:所有“保存”按钮都使用绿色,且位于右下角。
  2. 支持快捷操作(Enable Frequent Users to Use Shortcuts)
    • 为熟练用户提供快捷方式(如键盘快捷键、命令行),提高效率。
    • 示例:Ctrl+S 保存,Ctrl+C 复制。
  3. 提供信息反馈(Offer Informative Feedback)
    • 对用户的每个操作提供及时、清晰的反馈,告知结果或状态。
    • 示例:点击“提交”后显示“提交成功”或“正在处理”提示。
  4. 设计对话框以体现完成感(Design Dialogs to Yield Closure)
    • 操作流程应有明确的开始、中间和结束,让用户感到任务已完成。
    • 示例:表单提交后显示“感谢您的提交”并关闭窗口。
  5. 预防和处理错误(Offer Error Prevention and Simple Error Handling)
    • 设计时尽量避免用户犯错;发生错误时,提供简单易懂的解决方法。
    • 示例:输入框限制只能输入数字,或错误时提示“请输入有效邮箱”。
  6. 支持撤销和重做(Permit Easy Reversal of Actions)
    • 用户应能轻松撤销误操作,降低操作压力。
    • 示例:删除文件后提供“撤销”选项。
  7. 增强用户控制感(Support Internal Locus of Control)
    • 让用户感觉自己在掌控系统,而不是被系统牵制。
    • 示例:允许用户随时取消长时间运行的任务。
  8. 减少短期记忆负担(Reduce Short-Term Memory Load)
    • 界面设计应避免用户记住过多信息,提供提示或默认值。
    • 示例:表单自动填充常用选项,而不是让用户每次手动输入。

3、Nielsen 的 10 条启发式规则

源自 Nielsen Norman Group官网,这些规则广泛应用于 UI/UX 设计,包括网站、移动应用、软件界面等。虽然主要针对用户界面,但部分原则(如一致性、错误处理)也可启发 API 设计。

  1. 系统状态可见性(Visibility of System Status)
    • 用户应随时知道系统当前状态,提供及时反馈。
    • 示例:上传文件时显示进度条。
  2. 系统与现实匹配(Match Between System and the Real World)
    • 使用用户熟悉的语言和概念,避免技术术语。
    • 示例:购物车图标表示“添加购物车”。
  3. 用户控制与自由(User Control and Freedom)
    • 提供撤销和重做功能,让用户能纠正错误。
    • 示例:浏览器中的“后退”按钮。
  4. 一致性与标准(Consistency and Standards)
    • 界面元素、术语和行为应保持一致,遵循行业标准。
    • 示例:所有页面顶部都有导航栏。
  5. 错误预防(Error Prevention)
    • 设计时避免用户犯错,提供约束或确认机制。
    • 示例:提交表单前要求确认。
  6. 识别优于回忆(Recognition Rather than Recall)
    • 减少用户记忆负担,提供可见的选项或提示。
    • 示例:下拉菜单代替手动输入日期。
  7. 灵活性与效率(Flexibility and Efficiency of Use)
    • 满足新手和专家需求,支持快捷方式。
    • 示例:支持鼠标点击和键盘快捷键。
  8. 简洁美观的设计(Aesthetic and Minimalist Design)
    • 只显示相关信息,避免无关内容干扰。
    • 示例:登录页面只包含用户名和密码字段。
  9. 帮助用户识别、诊断和恢复错误(Help Users Recognize, Diagnose, and Recover from Errors)
    • 错误信息应清晰易懂,并提供解决方案。
    • 示例:“密码错误,请重试或点击‘忘记密码’”。
  10. 帮助与文档(Help and Documentation)
    • 提供易于搜索和理解的帮助文档。

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

    如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

    相关文章

    计算机视觉(opencv-python)入门之图像的读取,显示,与保存

    在计算机视觉领域,Python的cv2库是一个不可或缺的工具,它提供了丰富的图像处理功能。作为OpenCV的Python接口,cv2使得图像处理的实现变得简单而高效。 示例图片 目录 opencv获取方式 图像基本知识 颜色空间 RGB HSV 图像格式 BMP格式 …

    鸿蒙5.0实战案例:基于原生能力获取视频缩略图

    往期推文全新看点(文中附带全新鸿蒙5.0全栈学习笔录) ✏️ 鸿蒙(HarmonyOS)北向开发知识点记录~ ✏️ 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~ ✏️ 鸿蒙应用开发与鸿蒙系统开发哪个更有前景&#…

    【问题记录】Go项目Docker中的consul访问主机8080端口被拒绝

    【问题记录】Go项目Docker中的consul访问主机8080端口被拒绝 问题展示解决办法 问题展示 在使用docker中的consul服务的时候,通过命令行注册相应的服务(比如cloudwego项目的demo_proto以及user服务)失败。 解决办法 经过分析,是…

    随机树算法 自动驾驶汽车的路径规划 静态障碍物(Matlab)

    随着自动驾驶技术的蓬勃发展,安全、高效的路径规划成为核心挑战之一。快速探索随机树(RRT)算法作为一种强大的路径搜索策略,为自动驾驶汽车在复杂环境下绕过静态障碍物规划合理路径提供了有效解决方案。 RRT 算法基于随机采样思想…

    数据集笔记:新加坡停车费

    data.gov.sg 该数据集包含 新加坡各停车场的停车费,具体信息包括: 停车场名称(Carpark):如 Toa Payoh Lorong 8、Ang Mo Kio Hub、Bras Basah Complex 等。停车区域类别(Category)&#xff1a…

    netty如何处理粘包半包

    文章目录 NIO中存在问题粘包半包滑动窗口MSS 限制Nagle 算法 解决方案 NIO中存在问题 粘包 现象,发送 abc def,接收 abcdef原因 应用层:接收方 ByteBuf 设置太大(Netty 默认 1024)滑动窗口:假设发送方 25…

    设计模式之责任链模式

    引言 在职场中,请假流程大家都再熟悉不过:申请 1 至 2 天的假期,只需直属主管审批即可;若要请假 3 至 5 天,就需部门负责人进行复核;而超过 5 天的假期申请,则必须由总经理最终定夺。要是遇到超…

    【漫话机器学习系列】112.逻辑回归(Logistic Regression)

    逻辑回归(Logistic Regression)详解 1. 逻辑回归简介 逻辑回归(Logistic Regression)是一种广泛用于二分类任务的统计和机器学习方法,尽管它的名字中带有“回归”,但它实际上是一种分类算法。 在逻辑回归…

    大模型function calling:让AI函数调用更智能、更高效

    大模型function calling:让AI函数调用更智能、更高效 随着大语言模型(LLM)的快速发展,其在实际应用中的能力越来越受到关注。Function Calling 是一种新兴的技术,允许大模型与外部工具或API进行交互,从而扩…

    通过 PromptTemplate 生成干净的 SQL 查询语句并执行SQL查询语句

    问题描述 在使用 LangChain 和 Llama 模型生成 SQL 查询时,遇到了 sqlite3.OperationalError 错误。错误信息如下: OperationalError: (sqlite3.OperationalError) near "sql SELECT Name FROM MediaType LIMIT 5; ": syntax error [SQL: …

    计算机毕业设计SpringBoot+Vue.js企业资产管理系统(源码+文档+PPT+讲解)

    温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

    从零开始:H20服务器上DeepSeek R1 671B大模型部署与压力测试全攻略

    前言 最近,我有幸在工作中接触到了DeepSeek R1 671B模型,这是目前中文开源领域参数量最大的高质量模型之一。DeepSeek团队在2024年推出的这款模型,以其惊人的6710亿参数量和出色的推理性能,引起了业界广泛关注。 作为一名AI基础…

    Qt 文件操作+多线程+网络

    文章目录 1. 文件操作1.1 API1.2 例子1,简单记事本1.3 例子2,输出文件的属性 2. Qt 多线程2.1 常用API2.2 例子1,自定义定时器 3. 线程安全3.1 互斥锁3.2 条件变量 4. 网络编程4.1 UDP Socket4.2 UDP Server4.3 UDP Client4.4 TCP Socket4.5 …

    计算机毕业设计SpringBoot+Vue.js公司日常考勤系统(源码+文档+PPT+讲解)

    温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

    基于单片机的智能宿舍管理系统(论文+源码)

    2.1总体方案设计 本课题为智能宿舍的设计,整个系统架构如图2.1所示,整个系统在器件上包括了主控制器STM32单片机,LD3320语音识别模块,按键模块,串口通信模块,照明模块,窗帘控制模块家电控制模块…

    弱监督语义分割学习计划(2)-使用CoT进行Open Vocabulary Label简单实现类激活图

    零: 项目说明 是这样的一个事情,经过与deepseek的一番讨论和交流,DeepSeek为我设计了一个30天高强度学习计划,重点聚焦弱监督/无监督语义分割在野外场景的应用,结合理论与实践,并最终导向可落地的开源项目。目前开始了…

    RabbitMQ操作实战

    1.RabbitMQ安装 RabbitMQ Windows 安装、配置、使用 - 小白教程-腾讯云开发者社区-腾讯云下载erlang:http://www.erlang.org/downloads/https://cloud.tencent.com/developer/article/2192340 Windows 10安装RabbitMQ及延时消息插件rabbitmq_delayed_message_exch…

    力扣27.移除元素(双指针)

    题目看起来很乱&#xff0c;实际上意思是&#xff1a;把数组中值不等于val的元素放在下标为0,1,2,3......&#xff0c;并且返回数组中值不等于val的元素的个数 方法一&#xff1a;直接判断覆盖 class Solution { public:int removeElement(vector<int>& nums, int…

    【弹性计算】弹性裸金属服务器和神龙虚拟化(二):适用场景

    弹性裸金属服务器和神龙虚拟化&#xff08;二&#xff09;&#xff1a;适用场景 1.混合云和第三方虚拟化软件部署2.高隔离容器部署3.高质量计算服务4.高速低时延 RDMA 网络支持场景5.RISC CPU 支持6.GPU 性能无损输出 公共云服务提供商推出 弹性裸金属服务器&#xff0c;很显然…

    深入解析 Spring WebFlux:原理与应用

    优质博文&#xff1a;IT-BLOG-CN WebFlux 是 Spring Framework 5 引入的一种响应式编程框架&#xff0c;和Spring MVC同级&#xff0c;旨在处理高并发和低延迟的非阻塞应用。这是一个支持反应式编程模型的新Web框架体系。 顺便一提&#xff0c;Spring Cloud Gateway在实现上是…