什么是好的API设计?

摘要:有人言,API设计是编程工作中最难的事情。甚至有人认为至少要有10年的工作经验才能接触它。不过这里提出了一个引人思考的问题:究竟是构建什么样的库需要花费10年的时间去学习?

有人言,API设计是编程工作中最难的事情。甚至有人认为至少要有10年的工作经验才能接触它。其实通过好的培训或导师学习这个进度可以缩短很多,也有这样或那样的时候,一些没有经验的程序员却设计出好的API。不过这里引发出一个问题:“究竟是构建什么样的库需要花费10年的学习时间?”

在走出校门后,我很幸运地加入到Atalasoft公司,这是一家生产设计API的公司。在这里我受到了严格的训练。我的导师Steve Hawley是一个喜欢把大部分时间都花费在研究各种困难问题上的人,并且他会把这些问题压缩到一个非常精美的包里。Steve没有太多的耐心教他的下属,他爱好刻录光碟,在这样的环境下,虽没达到青出于蓝而胜于蓝的地步,但却让我学到很多。

在他的价值观里是没有清晰明确的声明或者条条框框的东西,我称为90-9-0.9。他希望90%的人仅通过剪切和粘贴几行代码就可以解决常规问题。下面9%的目标是用来进行简单地配置,通过查看文档以及技术支持来解决问题,甚至有些问题在几分钟内就可以解决。0.9%的人会用各种乱七八糟的方式来扭曲你开发的库,有时是因为性能原因,有时却是利用其他一些你意想不到的古怪(但可执行)手段。为客户的需求牺牲0.9%是完全正常的,只要保证客户需求可以实现且文档按照要求显示出来。

最后,还有1%的人会误解你的产品能力,这些人会让你非常不高兴。忽视还是重视?最好做个市场调查,看看他们的是否值得你去扩展库且让他们成为其中的一员。

Atalasoft的条形码产品是一个很好的例子,在产品上花很多精力去仔细调优和预处理,扫描许多文档且没有发现问题。预处理后,在许可证允许的前提下默认会全力尝试各种类型的条形码。这已经相当快了,在这么短的时间里可以给任何人进行扫描操作。尽管有时候会借助一些昂贵的设备给用户进行大规模批量化扫描,但速度还是不够理想,所以扫描者可以修改一个简单的枚举属性进行配置。偶尔有些扫描的确很困难,比如扫描一个带有条形码的香蕉。对于这样的事情,可能会让你中断乃至更换条形码引擎。但是谁会拿着这样的产品去读狗身上剃出来的条形码呢?如果你是这样的人,建议你去寻找其他产品用吧!

第一次看到这种情况的时候,我认为这样的设计真糟糕。整个组件就像一个非常不统一且基于DIY(do-it-yourself)事件的插件系统。虽然如你所见,Atalasoft不会为一名架构宇航员的美感进行优化,他们会为减轻客户支持负担而进行不断调优。正如我不喜欢用面向对象的思想来编写内部库一样,在开放一个所有级别都能操作的简单接口上,我认为没有比这更好的范式。

在过去的两年里,我一直在Bayard Rock公司负责API方面的工作,我们一直在研发一些反洗钱方面的项目。这意味着会做许多小型或中型实验项目并且在以后会被整合到同行大的平台上。在大多数情况下,Atalasoft风格的黑色装箱(black-boxing)是起不到任何作用的。我们只有一个客户并且我们会根据他们的需求调整我们的外部API。

然而,在一个细粒度级别中代码重用是非常重要的,在这种情况下,最重要的是构建大型库,即把许多分类函数快速的组合在一起(通过简单的组合和没有全面的单元测试),目前,我们正在进行优化实验并且快速发展我们的组件。

那么,什么是好的API设计?其实,正如Steve所言,没有什么清晰明确的框架可套,也更没有什么捷径可走。我们既需要按照常规来进行设计,还需要综合客户要求将我们的设计理念融入进去,当然,得预防那些像扫描香蕉那样稀奇古怪的事情的发生。或许这就是为什么它会如此困难?我们也曾发表过《设计公共API的六个注意事项》文中作者根据自己的亲身经验总结了几条API设计注意事项,大家不妨一起品尝下!


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

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

相关文章

Linux学习记录-文件、目录与磁盘

用户和群组 用户和群组主要是为了区分用户对文件的操作权限。 账号在/etc/passwd个人密码在/etc/shadow组信息在/etc/group 不要乱动这3个文件文件权限和目录配置 文件属性 文件前缀解释,例如: 第一个字符代表这个文件是『目录、文件或链接文件等等』&am…

php curl模拟https请求

https请求(支持GET和POST) function http_request($url,$data null){$curl curl_init();curl_setopt($curl, CURLOPT_URL, $url);curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);if(!empty($data)){curl_setopt($cur…

springboot集成环信sdk报错

import io.swagger.client.ApiException; import io.swagger.client.api.MessagesApi; import io.swagger.client.model.Msg 这个是因为少两个包,只需要把在你的pom.xml添加以下代码即可,不要忘记点赞哈只需要添加两个包即可,你可以自行网上下…

解决 error: Your local changes to the following files would be overwritten by merge:XXXX

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 idea 上将本地代码推送到 git后 , 报错如下图 error: Your local changes to the following files would be overwritten by merge:src/…

深度有趣 | 30 快速图像风格迁移

简介 使用TensorFlow实现快速图像风格迁移(Fast Neural Style Transfer) 原理 在之前介绍的图像风格迁移中,我们根据内容图片和风格图片优化输入图片,使得内容损失函数和风格损失函数尽可能小 和DeepDream一样,属于网络…

转型从思维习惯的转变开始

摘要:首先建议大家不要轻易转向管理岗位,要认清自己是否适合做管理。转型过程中应把握好几点:良好的技术基础,它是赢得团队信任的前提,是把握团队整体方向的关键;培养大局观,只有站得高才能看得…

数据库小知识点(一直更新)

一、mysql查询是否含有某字段: mysql数据库查询带有某个字段的所有表名 SELECT * FROM information_schema.columns WHERE column_namecolumn_name; oracle数据库查询带有某个字段的所有表名 select column_name,table_name,from user_tab_columns where column_n…

其他运算符

原文地址:https://wangdoc.com/javascript/ void运算符 void运算符的作用是执行一个表达式,然后不返回任何值,或者说返回undefined。 void 0 // undefined void(0) // undefined 上面是void运算符的两种写法,都正确。建议采用后一…

git pull --rebase 做了什么? 以及 Cannot rebase: You have unstaged changes 解决办法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 最近刚学 git rebase,觉得很牛逼的样子, 结果今天就被打脸了。 git pull --rebase 1 报错: Cann…

vue如何实现单页缓存方案分析

实现全站的页面缓存,前进刷新,返回走缓存,并且能记住上一页的滚动位置,参考了很多技术实现,github上的导航组件实现的原理要么使用的keep-alive,要么参考了keep-alive的源码,但是只用keep-alive…

C语言常用函数简介

一、字符测试函数 isupper()测试字符是否为大写英文字ispunct()测试字符是否为标点符号或特殊符号isspace()测试字符是否为空格字符isprint()测试字符是否为可打印字符islower()测试字符是否为小写字母isgraphis()测试字符是否为可打印字符isdigit()测试字符是否为阿拉伯数字i…

thinkphp如何增加session的过期时间

原理:我们都知道session是建立在cookie的基础上的,如果浏览器cookie清楚了,则tp就会重新建立一个session。 操作:直接增加浏览器的cookie的到期时间,就可以使tp的session增加。

需求心得

电路图是人们为研究、工程规划的需要。我们组项目需要设计实现一个矢量图编辑器。在通过对变电站的电路图进行矢量绘图后,就可以通过矢量图的缩放详细信息。在分析需求后,写下心得! 分析需求主要有一下几个步骤: 1. 获取和引导需求…

IT部门不应该是一个后勤部门

管理上最大的问题在于不重视预算与核算的管理。从管理层到员工,很少有经营的念头,只是一味地埋头做事。西方企业总结了当今几百年的经营理念,最终把企业一切活动的评价都归结到唯一的、可度量的标准上:钱来度量。 by——华为 作为…

you need to resolve your current index first 解决办法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 从一个分支A切换到另一个分支B后,对切换后的B分支进行pull操作,因为pull操作实际上包含了fetchmerge操作&#x…

C语言,一种如此美丽的语言

人们说足球是一种优美的体育运动,而当我们在绿茵场上看到罗纳尔多那行云流水的带球动作时,我们不能不承认这种说法。然而,对于我来说,这种运动之所以如此的赏心悦目,跟那些乖张的天才球星们关系并不是那么大&#xff0…

基于websocket的聊天实现逻辑(springboot)

websocket的知识点:当用户建立socket连接请求之后,服务器会给客户段建一个session(非httpsession),这是是对客户端的唯一识别码,用于消息通信 第二上流程图,流程图解释:用户1要给用户2发送消息…

Elasticsearch就这么简单

Elasticsearch就这么简单 Lucene就这么简单转载于:https://www.cnblogs.com/gaogaoyanjiu/p/9908520.html

大学生学编程系列」第五篇:自学编程需要多久才能找到工作?

很多编程初学者都会有这种疑问,自学学到什么程度或者学多久能够找到工作,这种问题没有统一答案,因为每个人的出发时候的基础以及在学习过程中掌握的程度不尽相同,也会导致结果不一样,只能说要看个人的造化了&#xff0…

chrome 谷歌浏览器怎么添加Axure扩展

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 工具/原料 谷歌浏览器Axure RP Extension for Chrome方法/步骤 百度搜索Axure RP,下载Axure RP,并进行安装 安装后…