首页 > 其他分享 >不要将你的 API 设计得过于简单

不要将你的 API 设计得过于简单

时间:2023-05-25 22:32:43浏览次数:48  
标签:框架 复杂性 系统 API 简单 过于 默认值

关于软件工程的真相

image.png

框架永无止境

有多少框架、库和服务的存在仅仅是为了让你编写更少的代码?几乎所有的框架都是如此。

为什么我们有这么多框架,每年还会出现一个新的?这是因为一个框架试图让系统变得简单,在这个过程中却导致了性能问题或编码上的不便。

一个沮丧的用户说:“我要写一个彻底解决这个问题的新框架。”他写了一个更快的新框架。只是时间问题,另一个沮丧的用户就会发现另一个问题,并写出一个新的框架。

这是一个无休止的恶性循环。

如果你的系统很复杂,不要试图简化它

你的系统很复杂。这既不是好事也不是坏事,有些系统本质上就是复杂的,因为它们天生如此。

如果你试图简化系统,那就是违背它的本质。洁净代码运动对你没有帮助,就像面向对象编程运动一样。

不要认为将系统分解为小部分会使它变得简单。现在你有很多团队,他们被切割成了独立的部分,以为这样就简单了。无知是工程师的敌人。系统不能通过部分来理解。它要么全部理解,要么一无所知。

这是你无法赢得的战斗。

不要将API设计得过于简单

API代表应用程序编程接口。它们与系统进行接口交互,接受系统的本真模样,包括它的美丽、丑陋、简单和复杂的部分,以及其中的错误和特性。

不要假装你的系统是简单的,通过暴露一个仅展示其美好一面的裸露API。你在向客户提供虚假的抽象,最终这种抽象会泄漏,引发问题,并对客户产生不良影响。

构建一个API来抽象复杂性,使客户端易于使用,就像打破鸡蛋壳,让小鸡容易出来一样。然而,最终小鸡将无法独立生存,调用该API的前端也将如此。

客户端最终会遇到意想不到的副作用,例如性能延迟、高CPU使用率、高内存使用率或高网络使用率。

抽象总是会泄漏。

设定默认值是一种逃避责任的行为

你可以暴露系统的真实本质,但可以设置默认值,认为这些默认值适用于大多数情况。虽然有用,但大多数客户端会选择走捷径,使用默认值而不去理解它们。

他们又回到了同样的沉船上,只不过这艘沉船上有一艘救生艇,开发人员可以依附其上。他们查看默认值并理解出了问题所在,并在必要时进行覆盖。

如果你将系统暴露出来,这个问题本不会发生。

如果你愿意,去除复杂性

你可以尝试消除系统的复杂性,而不是隐藏它。你可以用一个看起来简单的部分来替代它。这样做可能会解决一些问题,但请注意,新的复杂性可能会出现。一个新的怪兽诞生了。旧怪兽可能被杀死,但它可能仍然存在。

亲爱的客户,你可以使用一个简单的后端API,但请理解这个API可能并不真的简单。不要认为它理所当然,相反,深入了解它的复杂性,理解它是如何构建的。

通过了解API,你不仅会欣赏它,而且在API所创建的抽象泄漏到你这里时也会做好准备。你将准备好保护你的前端堡垒,也可以为修复后端做出贡献。

总结

拥抱复杂性,理解它并与之共同工作。这可能会开花结果,带来有效的性能,也可能会意外地诞生一个完全自由且真正完美的全新系统。

一个真正简单的系统。

这篇文章中的所有内容都不构成建议或行动号召。把它看作是一束在黑暗房间里首次照亮的蜡烛光。

如果你喜欢我的文章,点赞,关注,转发!

标签:框架,复杂性,系统,API,简单,过于,默认值
From: https://blog.51cto.com/slagga/6351589

相关文章

  • api/BlastModule
    1、介绍四种爆破模式(1)sniper样本中可以设置一个或多个待测参数点,记为x={x1,x2,..xn}只需要设置一个payload集合,记为y={y1,y2,...ym}测试过程是从唯一的payload集合中,逐个取出,对参数点x1替换。然后依次对参数点x2,..xn替换。总的测试请求个数是n*m(2)battering_ram样......
  • api/RadixModule
    1、介绍进制算法。2、代码"""进制算法,返回一个list,有两大类型1、单个集合从长度为m的单个集合中,一次性选择n个元素,各自索引按序组成list,作为结果list的元素。(1)先按进制计算遍历,获取所有可能的组合(2)标志1,如果为True,表示允许一次选择中,禁止重复选择某一索引(3)标志2,如......
  • Metabase可视化BI系统部署安装及简单使用
    Metabase是国外开源的一个可视化系统,语言使用了Clojure+TypeScript。Clojure(/ˈkloʊʒər/)是Lisp程式語言在Java平台上的現代、動態及函數式方言。来自维基百科。我也是第一次看到这个语言,知道它是可以运行在Java环境上的语言就可以了......
  • api/MarkModule
    1、介绍关于标记的一些函数。2、代码fromapi.PropertiesClassesimportParams"""自动标记@url:str类型,表示url@message:str类型,表示请求报文@name_list:str类型,根据url的直接参数的名称标记其对应的值,name_list参数可以通过空格分隔多个参数名称@text_list:str类......
  • 淘宝API技术文档解析,从入门到实战
    探索淘宝数据的奥秘,淘宝是目前国内最大的B2C电商平台之一,每天都会产生海量的数据。借助淘宝API技术文档,我们可以轻松地获取到这些数据,从而为电商运营和数据分析提供有力支持。1.什么是淘宝API?淘宝API(ApplicationProgrammingInterface)是一组软件API接口,可以让第三方应用程序和淘宝......
  • api/Request
    1、介绍 对应http请求对象。两种设置方法:基于url设置基于请求报文message设置,伴随设置协议类型https_flag2、代码importreimporttimeimportrequestsfromapi.PropertiesClassesimportHeadersfromapi.ResponseClassimportResponsefromapi.UrlClassimport......
  • 淘宝天猫京东1688拼多多商品详情API接口(商品价格监控,商品上传等场景)代码对接
    抓取淘宝商品详情价格接口代码封装如下:请求方式:HTTPS POSTGET公共参数名称类型必须描述key String 是 调用key(必须以GET方式拼接在URL中)API接口 API接口secret String 是 调用密钥api_name String 是 API接口名称(包括在请求地址中)[item_search,item_get,item_search_......
  • express开发api指南--服务器发布
    8.1Linux服务器linux服务器相对简单。一般都自带node环境。没有的话apt-get或者yum安装一下。//查看node版本node-v//把文件除了node-modules文件夹都上传到服务器//以放在opt/express为例cd/opt/expressnpminstall//使用pm2包npminstall-gpm2//在项目文件夹下执......
  • express开发api指南--记录日志
    败笔,目前还是我的败笔。没有找到好的方法去记录。现在只能记录请求的记录,api的返回记录没有记录下来。用的morgan中间件。这个在项目创建时已安装。//首先安装轮询文件流插件和时间处理插件cnpminstall--saverotating-file-streamdayjs//修改app.js//引入插件varrfs=......
  • Linux首次登录入与寻求帮助(Linux的简单使用)
    Linux首次登录入与寻求帮助一些Linux中使用的常用命令与技巧:进入终端系统方式(纯文本环境):按ctrl+alt+F2会进入tty2,同理F3~F7均可分别进入tty3~tty7,只有tty1是图形化界面(如果已经安装了图形界面了),在文本环境中按ctrl+alt+F1会进入图形化界面在文本模式注销......