API接口设计不合理?个人和公司都有问题在软件产品或项目开发过程中,往往涉及到大量API接口的开发任务。而一个接口的诞生

我将今天想要谈的范围圈定于狭义上的中小规模的业务功能前后端RESTfulAPI接口开发,对于超过范围的内容可能因水平不够而谈的不够准确深刻。主要内容包括我工作中经常遇到的问题和个人的检讨思考。

“API接口可以使不同的软件组件之间进行无缝的通信和交互,从而提高了软件开发的效率和灵活性。”典型的软件组件之间就是前端和后端之间,效率和灵活性是我们要追求的目标之一。

那么我们实际开发的API达到目标了么?如果以是否实现了业务功能为目标,那我相信大部分开发人员都能拍着胸脯保证我写的API绝对能实现功能,而且极度自信绝无可能存在bug。但如果以是否高效和足够灵活来判断,则:

接下来我们来看看下面的几个问题你是否也感同身受?

以上几个问题可能每天都发生在我们的身边,但我们早已习惯麻木,直到AI编程的出现,它将会毫不留情的指出我们的缺点,激进的对我们的代码进行重构,写出具有非常优秀特质的API,最后取代我们的工作干碎我们的饭碗!听起来太可怕了,那么我们还是了解一下什么是优秀API的特质吧:

优秀的API应该具有易用性、可扩展性、安全性、稳定性、兼容性、文档化、可测试性和良好的性能和效率等特质,以满足开发人员和客户的需求。

这些特质我们文字上都看得懂,但很多同学还是不知道要怎么做,那API设计都有哪些原则呢?

API设计应该遵循简洁性、一致性、可预测性、可扩展性、安全性、高性能、可伸缩性、可测试性、可文档化和面向资源等原则,以提供易用、可靠、高效和安全的API服务。

通过这些文字,我们意识到原来我们工作中开发API接口很多都没有遵循这些原则,例如:简洁性、可文档化对应问题1,一致性、可预测性对应问题2,高性能、可伸缩性对应问题3,可扩展性对应问题4。

原则是死的,人是活的,我们还没进化到完全通过AI智能写代码的程度,尽管那是趋势,但我很好奇当AI读到我们的屎山代码的时候,它会发出怎样的感叹!或者当我们用大量的屎山代码库去训练AI时,它会不会写的比我们更好?

接下来我在API接口设计阶段的思路和方法上进行举例和总结,重点用粗体表示,可能有失偏颇的地方还请各位批评指正。

不是随便一个功能就要有个接口,也不是随便一个需求就要加个接口。

每新建一个接口,要有充分的理由和考虑,即这个接口的存在是十分有意义和价值的。无意义的接口不仅增加了维护的难度,更重要是对于程序的可控性的大大降低,接口也会十分臃肿。

设计接口时,分析的角度要统一。否则会造成接口结构的混乱。每个API接口应该只专注一件事,并做好。产品概念简单、关系清楚。功能模棱两可,诸多特殊逻辑的API肯定不是个优雅的API,且会造成功能类似重复的API。

注意:如果API它很难命名,那么这或许是个不好的征兆,好的名称可以驱动开发、并且只需拆分与合并模块即可。

避免:/api/getdata、/api/servicexyz、/api/action1、/api/action2、/api/action3

推荐:get('/api/users/:id/orders')、put('/api/users/:id')、post('/api/users')、delete('/api/users/:id')

功能大而全的API在灵活性、简单性方面肯定捉襟见肘。定义API的粒度之前,建议先将业务分领域、划边界,以此来提取业务对象,然后再根据业务对象用例来设计单一功能的API。

代码举例:

此外,如果将来需要添加更多的选项,可以简单地在单个对象中添加新的属性,而不需要更改函数的签名。这提高了代码的可扩展性。

API的入参、出参所述的对象、属性,一定是按业务特性进行抽象后的实体,而不要误将底层数据模型概念如实的反应到API上。抽象API、抽象对象实体更宏观,具有更好的适用性、兼容性、扩展性。

//错误的代码functioncreateUser(username,password,role_id){//...}//底层数据模型classUser{constructor(username,password,role_id){//...}}在这个示例中,API使用了底层数据模型的概念来定义createUser函数的参数,即username、password和role_id。这使得API难以使用和难以维护,因为调用者可能不知道如何使用这些参数,并且将来更改底层数据模型时,这些参数也需要更改。

//更好的代码functioncreateUser(user){//...}//更好的底层数据模型classUser{constructor(username,password,role){//...}}这样就可以将API的参数定义为一个包含用户信息的对象,这样调用者就可以更容易地使用API,并且在底层数据模型更改时,也可以更轻松地更新API。

API代码应该尽可能减少让读者惊讶甚至惊吓,你是否有过看到一堆或某行奇葩的代码时发出“我艹”惊呼的经历?惊为天人在程序员的世界里是个贬义词。业务API只需根据需求来设计即可,不需要刻意去设计一下复杂无用、华而不实的API,以免弄巧成拙。

下面是ChatGPT聊天的API接口文档,可以看到接口是中规中矩、平平无奇甚至有点简陋到随便一个初级开发就能够写出来,model+messages两个必传参数就已满足需求,但接口背后的技术似乎正在引领一场技术革命。让人惊讶的不是接口本身,而是接口能够提供的能力。

API应该减少对其他业务代码的依赖关系。低耦合往往是完美结构系统和优秀设计的标志。

耦合的种类:

对于API调用者而言,API应该是可被测试且易于被测试的。测试API不需要依赖额外的环境、容器、配置、公共服务等。

对可测试友好的API也是可被有效集成测试的前提。另外单元测试、集成测试和自动化测试工具也很重要,测试用例很可能我们都听过但都没写过,但这都不重要,重要的是接口写完了你总得试着执行一下吧?啥都不管直接丢给使用方/测试方真的合适吗?遇到没充分自测的接口,使用方/测试方的内心活动是:二营长!你他娘的意大利炮呢?给我拉来!

重要的事情说三遍:“一定要接口自测!一定要接口自测!一定要接口自测!”

API要具备统一的命名、统一的入/出参规范、统一的异常规范、统一的错误码规范、统一的版本规范等。

统一规范的API优点:

同志们,任务仍很艰巨,让我们一起来完成统一大业吧!

以上8条不仅适用于前端和后端之间的API接口,也同样适应于前端与前端之间、后端与后端之间。

其实以上提到的这些示例、经验和教训网络上一搜也是一大把,作为信息技术如此发达的时代,想要找到一些关于接口设计方面的内容可以说是轻而易举,但为什么人们就是不喜欢遵循API设计原则来进行API接口开发呢?

有一些可能的原因,导致人们不喜欢遵循API设计原则来进行API接口开发:

总的来说,遵循API设计原则可以提高API的质量和可维护性,但是这需要开发人员有一定的经验和知识,并且需要在公司文化和管理上得到支持和重视。

好吧,如果有人能够耐心的看到结尾这里,一定是一个技术觉悟非常高的人!

THE END
1.生活中不合理的设计产品有哪些马桶. 蹲便是蹲便,坐便是坐便.这样不合理.有人习惯此,有人习惯彼. 我的设想:首先把坐便落https://wenwen.soso.com/z/q255002365.htm
2.生活中需要改进的产品设计生活中需要改进的产品设计案例大家好!今天让小编来大家介绍下关于生活中需要改进的产品设计_生活中需要改进的产品设计案例的问题,以下是小编对此问题的归纳整理,让我们一起来看看吧。 文章目录列表: 1、生活中有哪些不方便/不合理的产品设计? 2、列举你觉得生活中设计不合理或者需要改进的用品~ https://www.jbairui.net/designzixun/23165.html
3.降与体适能:运动与生活方式的重要性33.生活方式中不合理的饮食和运动导致的疾病有 A.高血压 B.高脂血症 C.糖尿病 D.肥胖症 E.痛风 34.蔬菜中包含的()能够增强食欲,帮助消化,促进人体健康 A.维生素 B.植物化合物 C.有机酸 D.芳香物质 E.色素 35.好的提问方式应该是 A.提问时要注意对方的表情和感受 https://blog.csdn.net/robin9409/article/details/123553613
4.大学上网调查报告(通用12篇)6、对现在新兴的网购、网聊功能大学生比较喜欢,特别是网聊,有34%的学生经常和陌生人聊天,40%的同学曾经网购过,12%的同学经常网购,但对于网恋只有8%的同学支持,84%的同学都反对。 7、大多数同学每周上网的花费在10到25元占78%,站生活费的不消一部分。 https://www.fwsir.com/Article/html/Article_20210318153525_871251.html
5.危害房屋安全的因素你触犯了几条吊顶安装有讲究 防水材料巨大隐患 小角阀成隐患 拆墙改门窗要谨慎 第二、各空间改造切勿太任性 七大不合理空间设计易引发安全隐患 排除厨房装修中的“隐患” 卫浴装修安全隐患莫忽视 阳台改造中4大安全要素! 浴室大检查 安全隐患全排除 第三、当心家电成为不定时炸弹 https://m.jia.com/zixun/article/389830.html
6.互联网保险发展模式(五篇)这是因为不同场景下的保险产品实质是保险生活化,场景化已经从渠道变革延伸到产品变革,未来场景嵌入将成为新的竞争门槛,越来越多的保险产品将为场景定制,众安保险一直在从产品角度突破外延线从而创造出淘宝退货运费险这样嵌入淘宝电商平台场景之上的碎片化产品。众安保险开放平台从2014年仅仅有3个场景,到2015年有了12个https://www.newsipay.com/zhuantifanwen/gongwenfanwen/114755.html
7.由日常生活中的设计问题所引发的深思.docx文档介绍:由日常生活中的设计问题所引发的思考内容摘要:设计源于生活,是我们对生活的发言。设计活跃于我们 日常生活的各个方面。但当我们在享受着设计给我们的生活带来便利 与惬意的同时,我们也发现在日常生活中的一些不合理设计也使我们 的生活充满了麻烦与多老年人只得缓缓行驶,根据自己的状态 调整车速。但糟糕的是https://m.taodocs.com/p-722794859.html
8.学会合理消费教学设计(通用10篇)从自己身边说起,让学生有一种亲切感,贴合学生实际。 三、自主探究、合作共享 1、情境一播放完之后,给学生设置三个问题。 2、引导学生发言,从三个问题中得出正确结论。 3、情景二播放完之后,让学生积极思考,提出两个问题:从短片中看到了哪些合理的消费行为?生活中还有哪些合理的消费现象?提现了什么消费理念?我们https://mip.ruiwen.com/jiaoxuesheji/5149690.html
9.推荐大学生职业生涯规划现在,我越来越喜欢空中乘务这份工作,在从事这份工作中我明白了在以后的人生道路中,当对别人感到不满时,先站在别人的角度上考虑一下,了解到别人的难处,才可以学会什么叫做体谅和理解。真的,那个时候你会感觉全世界都被你紧紧拥在怀里。他使我养成了很多好的生活习惯,礼貌用语说的更加自如频繁,到哪里都习惯性的把https://www.yjbys.com/qiuzhizhinan/show-595574.html
10.大家常说的用户思维,你真的理解透了吗?除此之外,用户思维在市场营销以及生活工作当中,也是同样重要。如果没有把握好用户思维,就会造成种种不良后果。 下面,我们分别通过一些案例,来看看产品思维在“产品设计、市场营销、日常生活”当中的体现。 用户思维的体现 一、产品设计领域 案例1 | 空气净化器的用户思维缺失,导致净化无效 https://www.digitaling.com/articles/39142.html
11.设计师应该掌握的设计细节在界面设计中,界面能否准确的将信息传达给用户,让用户在使用产品的过程中对信息的接受比较快速,所以界面的信息呈现的清晰度是设计师必备的能力,也是基础能力,我们通过细节处的把控,让设计助力用户对界面信息的理解,也许我们下的心思用户可能不会注意,但是它确确实实起到了作用,关于提升用户的阅读效率,我们可以从以下几https://www.51zxw.net/TechArticleDetails.aspx?id=206
12.2024年九款电热烧水壶测评多维度对比,网红小熊美的宫菱等实测优质的加热底盘材质导热性能好,能够有效地存储和传递热量,使加热性能稳定而且均匀度好。如果使用劣质的加热底盘,长期使用产品容易破损,影响加热效率与均匀度,严重的还会发生壶底破裂与火灾的危险! 原因③:加热器设计不合理 加热器的设计必须要与整个热水壶产品的各方面参数,如大小、形状等相匹配。只有加热器的设计合理https://post.smzdm.com/p/a96zlz5p/
13.产品银丝产生原因分析及解决措施注塑之友产生原因:结构银丝是指由于塑件的结构设计不合理,壁厚严重不均匀或出现断面突变,使熔料在充模过程中急剧膨胀或收缩,导致模腔中的空气混入熔料中形成的银丝。 这类银丝主要是影响外观,而对塑件的强度和冲击韧性影响不大。 识别:结构银丝的特点是,当注射工艺固定,银丝的分布和形状位置是固定的,而且一般沿注射方向分https://www.shangyexinzhi.com/article/303468.html
14.车间技术员的年终总结(通用22篇)生活中我都是按时的上下班,不会出现迟到或者是还没到下班时间就早退的现象,我知道得到这份工作不容易,更是要去珍惜,也是生活的作风要好,平时除了工作和学习,我基本没有什么其他不良的爱好,和同事的相处也是很友好,平时都是聊一些工作的'话题,我知道,要想让自己的能力得到提升,技术水平有进步,那么也是需要去交流的https://www.jy135.com/nianzhongzongjie/1181068.html
15.“年轻人爱买”的7种鸡肋家居用品,我家全都有,果然很难用小渊建议:目前还没有哪种产品能够完全代替手洗,所以“洗衣服”这项基本生活能力还是要有。如果衣服太脏了,可以考虑拿去干洗店清理,切勿使用乱七八糟的清洁剂。.05被子固定器 买之前:再也不怕睡觉不老实了。我睡觉就不老实,夜里喜欢踹被子。时间久了被套和里面的被子就会分开,被子在被套里面团成一个团,https://baijiahao.baidu.com/s?id=1818568397459192468&wfr=spider&for=pc