带你学习如何编写一篇API详设文档以及给新人提点建议

news2025/1/14 12:39:33

文章目录

    • 前言
    • 先认清一个问题
    • 详设文档如何写
      • 先看文档脉络
      • 详设文档分析
        • 需求背景
        • 方案概述
        • API定义
        • 安全设计
        • 性能设计
        • 缓存与数据库
    • 总结

前言

  这篇文章带读者了解软件开发项目中一个需求的开发详设文档主要包括哪些内容,其中重点会给读者分析API设计的规范,相信这篇文章看完对你绝对是有收获的。因为对于程序员来说,只会按着API设计文档做代码实现的话那只是属于初级程序员的水平,更有价值的能力是自己有将需求转化为实现方案详细设计的能力,成为有设计能力的程序员对团队来说你的性价比更高,更有升职加薪的价值,尤其对于后端程序员来说一定要培养设计能力,因为在开发团队中,详设文档的输出主要由架构或者后端成长起来的设计角色主导。

先认清一个问题

  对于初入后端开发的人来说,往往认为后端的设计就是接口调用的设计,请求方式、URL、返回值、错误码这些,事实上在一个严谨重设计的团队中,你要输出的详设文档中远不止这些,即使是接口本身的定义设计也没你想得那么简单,是有一套经验总结出的规范需要遵循的。只不过在一些小公司,前后端就几个人的团队里,大家沟通方便,口口相传,几个人把事情说明白了就能开发了,规范啥的全凭自觉,心想管它呢,好不好维护那是以后的事儿。但是我还是建议后端开发朋友们即使是在小公司,即使是不要求开发规范以及不要求输出详设文档的团队,也要养成规范的习惯,或者说至少要知道怎样才是规范的,太随意的话保不齐哪天埋个坑给自己坑到了,简单说就是,文档可以不写,但是自己写接口的时候还是要注意规范。

详设文档如何写

先看文档脉络

  我用word自己编写一个主脉络大家先看看一篇详设文档必须要有的内容有哪些:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

详设文档分析

  首先,大家要知道详设文档主要目的不是写给自己看的,详设文档产生的背景是成熟规范的开发团队中有方案评审的流程,设计人员写的详设文档是要给对接你的其他开发、测试讲解的,大家一起讨论你的方案,并且存档后未来新人接手维护的时候你可以把文档给新人看(虽然实际中一般是看代码,但是如果你文档中流程图和设计思路写得够细,对新人来说帮助还是很大的)。接下来我们来细看详设文档的每个部分写什么,怎么写。

需求背景

  需求背景的意义主要是方案评审时参会的开发和测试中可能有人是不知道需求背景的,比如有的测试是测试组长安排他来测这个需求,但是测试组长也没给他细说过背景,而是上会来听。所以需求背景主要是讲清楚需求的主要内容是什么(不用特别细,不是需求评审,只是给啥也不清楚的人一个背景提示)?以及为什么要做这个需求?

方案概述

  方案概述是要写清楚开发方案涉及到哪些端(比如后端、web端、APP、三方平台之类的),以及这些端之间需要做哪些交互,相当于需求整体的一个方案设计脉络,并且输出一个交互流程图,毕竟开会听一遍不一定别人马上能吸收,你说的东西在文档上要有详细的体现。

API定义

  这是文档中最核心的一部分,对于后端设计来说,最起码客户端调用你的请求与传参、收参需要你有明确的接口定义,这部分内容需要你提供API名称、具体定义(请求方式、鉴权方式、URL、请求和返回参数定义、错误码)等详细具体的内容。说起来都是很简单的东西,但其中其实需要你做很多规范的思考。特别是后端属于微服务架构的情况来说,规范尤为重要,举两个例子:
  比如你的接口是外部接口提供给客户端调用的还是说是后端服务之间调用的内部接口?两种情况URL规范当然需要区分,假如外部接口是/v1/user/info,那内部接口的话定义可以是/v1/internal/user/info,并且内部接口和外部接口的鉴权方案是有区别的,要求细的团队,URL中名词统一单数还是复数表示都有规范。

  另一个例子是错误码,现在软件开发项目中有两种返回规范,一种是使用200、400、401、500等不同http状态码对应不同错误情况,200的时候返回成功的数据结构体、其他情况返回错误码;另一种规范更常用,统一使用200错误码,不管成功还是失败返回一个统一数据结构,对于APP来说更喜欢这种,因为他们框架默认只会取200状态码的数据,不是200默认是服务器失败不取数。在微服务中,错误码的编号定义也有要求,比如你有十个微服务,对于成功、服务器错误、鉴权失败这类统一的场景来说,错误码当然要定义成一样的,但是每个服务自己的业务错误码各不相同,这时候要考虑错误码冲突的问题,要编号分段,比如1~1000是给A服务的,1001到2000是给B服务的,避免不同的错误提示用了同一个编号,那你让客户端怎么知道该提示啥呢?

安全设计

  安全设计如果细说的话可以单独写很多篇文章,细节太多了,但是在详设中只需要写这个方案涉及到的安全设计,比如接口的鉴权、如果是账号登录这类的功能还涉及账号与密码的加密,账号使用可逆的加密算法,密码的话只能使用不可逆(不能解密出明文)的加密算法。

性能设计

  这是给测试一个性能指标,对于有性能要求的团队来说,如果你有接口响应比较慢,要特别说明一下。

缓存与数据库

  方案中哪些数据用到了缓存与持久化数据库,要给出具体的存储设计与表设计。

总结

  做设计是一个很锻炼人的工作,首先输出详设文档需要你基于项目现状思考设计技术实现方案,并且在方案评审时你要能给别人讲清楚,相当于设计能力与沟通表达能力都能涉及到,对于初入行的新人来说,一定要努力往这方向靠,而且在成熟的项目团队中,做设计的人有时候是较为独立的角色,还能做点管理的事情,简单说就是你设计,然后你还需要给一些普通开发针对方案分工,这个其实可以理解,因为在团队中能做设计的人都是对项目内容、功能前世今生比较熟悉的人。可以这么说,从普通的编码角色走向设计角色,是一个非常重要的蜕变,直接决定你的升职加薪,有设计的能力,你就算去小公司,没人带你也hold得住需求落地。所以我给新人一个建议是,先去大公司或者流程规范的项目学流程、学设计,这样以后就算只能去小公司,你也能混得得心应手,从容不迫。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

推荐算法的学习

文章目录 前言1、模型1.1 从本领域模型的发展历史中学习1.1.1 在历史中总结发展规律和趋势1.1.2 发现模型之间的共性,方便记忆 1.2 从其他领域的发展中学习1.2.1 注意力机制1.2.2 残差网络 1.3 实践该怎么办? 2、 特征2.1 数据源的选择与建立2.2 特征构造…

react18中实现简易增删改查useReducer搭配useContext的高级用法

useReducer和useContext前面有单独介绍过,上手不难,现在我们把这两个api结合起来使用,该怎么用?还是结合之前的简易增删改查的demo,熟悉vue的应该可以看出,useReducer类似于vuex,useContext类似…

AirServer2024你的手机投屏神器,轻松实现多屏互动!

💡**开篇点题**💡 说起现代科技的魔力,小伙伴们是否还记得那个让你在公司会议、家庭影院乃至游戏战场上都能大显身手的神奇软件——AirServer?没错,就是那个让你手机秒变超级大屏的投屏神器!今天我要和大家…

WebGIS开发系列教程

WebGIS开发-00保姆级、零基础入门教程 WebGIS开发-01开发环境搭建 WebGIS开发-02vite搭建htmlcssjs开发框架 WebGIS开发-03在框架中引入地图 WebGIS开发-04.搭建Vue3jsscss框架开启编程之旅 B Zhan持续更新中....

机器学习数据标准化与归一化:提升模型精度的关键

📘数据标准化与归一化:提升模型精度的关键 机器学习中的数据处理环节至关重要,其中,数据标准化与归一化是提高模型性能的关键步骤之一。数据的特征尺度往往不一致,直接影响模型的训练效果,因此对数据进行处…

用sdkman管理多个jdk切换

前言 最近项目前后端进行升级,需要在jdk8和jdk17两个版本切换。最简单的是通过手动切换,但切换过程太繁琐,修改环境变量,达到切换目的。于是尝试其它解决方案,最终确实使用sdkman工具。 sdkman 是一款面向Java开发者的…

十分钟掌握Ajax(jQuery封装的ajax)

Ajax是一种异步(无需等待服务器返回数据就可以做别的工作)无刷新(做了一些操作之后,页面不会刷新)技术,通常结合DOM一起操作。(不像超链接和表单一样一点就刷新) Jquery封装好的Ajax技术有四种&#xff0c…

苹果开源Depth Pro:0.3秒实现从2D图像到3D深度图的革命性突破

前沿科技速递🚀 近日,苹果公司的AI研究团队震撼推出了一项划时代的技术——Depth Pro。这一技术能够在0.3秒内从单一的2D图像中生成高精度的3D深度图,突破了单目深度估计技术的极限。这项创新将为智能设备和计算机视觉领域带来全新的应用可能…

JavaWeb合集11-Maven高级

十一、Maven高级 1、分模块设计与开发 为什么?将项目按照功能拆分成若干个子模块,方便项目的管理维护、扩展,也方便模块间的相互调用,资源共享。 分模块开发需要先针对模块功能进行设计,再进行编码。不会先将工程开发完毕,然后进行拆分。 实现步骤&…

mqtt与云服务器

mqtt 目录 mqtt 回顾 云服务器的操作 MQTT协议 -- 将官方库移植到工程 -- 应用 -- 可能会出现的问题: 完整代码 回顾 -- 昨天我们写的AT指令是直接写在main中,在while循环的外面,没有很好的封装,所以今天我们写一个函数…

jeecg3版本的vue,离线启动

jeecg的vue2版本已经停止维护,所以只能用vue3的版本。3版本中使用的是pnpm(npm的增强版本)下载依赖。使用pnpm安装的node_modules,不能直接复制到离线主机中(因为在 pnpm安装过程中,会给依赖的配置文件写死…

qt页面设计

1. Designer 设计师(掌握) Designer是Qt内置的一款界面设计程序,设计的界面文件为.ui格式。 C程序员通常不会单独启动Designer,如果要在项目中使用Designer程序,只需要在新建项目时,勾选“创建界面文件”选…

基于Springboot+Vue的特殊儿童家长教育能力提升平台 (含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 这个系…

《数据结构》课程综合设计(zzu校园导航)(迪杰斯特拉算法)

一、系统(问题)描述 目前根据郑州大学主校区面积区域的广大,以及南、北核心教学楼的教室分布密集且较多;另外,多数地图软件无法精细导航到一个具体的地点,容易造成原地转圈的烦恼。但是,我们转…

excel 表格中url转图片

待处理的单元格通过如下公式获取目标格式&#xff1a; "<table><img src"&A4&" height20></table>" 然后下拉后获取多列的单元格转换结果&#xff0c; 然后将这些转换后的结果拷贝到纯文本文档中&#xff0c; 然后再将纯文本…

Ubuntu22.04虚拟机安装

一、安装介质下载&#xff1a; 在官网下载安装镜像&#xff0c;下载地址https://releases.ubuntu.com/22.04/ubuntu-22.04.5-live-server-amd64.iso 二、操作系统安装&#xff1a; step 1:进入ubuntu的安装界面&#xff0c;直接回车安装。 step 2:选择语言&#xff0c;直接回…

pycharm 找不到conda环境

参考&#xff1a;新版Pycharm解决Conda executable is not found-CSDN博客

软件界面设计深度解析:流程、工具与用户体验

1、什么是软件界面 软件界面设计是指对软件的外观和用户体验进行美化、优化和标准化的过程。这包括软件的启动封面、框架、菜单、标签、安装过程、滚动条、状态栏、面板、图标设计&#xff0c;以及软件的包装和商业化设计。简单来说&#xff0c;我们日常使用微信时所看到的聊天…

天锐绿盾VS Ping32数据安全新选择,用户体验分享

随着网络威胁日益严重&#xff0c;如何保护个人和企业的网络安全成为了一个迫在眉睫的问题。天锐绿盾和Ping32作为市场上两款备受欢迎的网络安全软件&#xff0c;各自拥有独特的特点和功能。本文将对这两款软件进行深入的使用体验分享&#xff0c;帮助用户做出最佳选择。 防护性…

C++ 11 的 codecvt 与编码转换

1 编码与乱码 乱码产生的主要原因是编码与字符集不匹配&#xff0c;这种不匹配时怎么造成的呢&#xff1f;首先要来了解一下编码和字符集的关系。 1.1 编码与字符集 由于标准的英文 ASCII 已经成了全球标准&#xff0c;每台电脑的 BIOS 里存着一份标准 ASCII 表&#xff08;…