api设计规范性问题(API设计101)
api设计规范性问题(API设计101)
2024-09-29 05:00:41  作者:厌旧之乐  网址:https://m.xinb2b.cn/life/ygv231942.html


> Photo by Startup Stock Photos from Pexels

API是应用程序编程接口。 这是一个程序向其他程序提供服务的一种结构化方式。

简单来说,就像在餐厅点菜。 你不能去厨房做饭。 您会看到一个菜单,并且您知道厨房正在做饭。 您使用服务员下订单。

服务员是API,它将您的请求带到准备它的厨房并带回给您。

类似地,某人(例如Facebook)为API提供了带有各种参数的有限命令菜单。 您的程序使用此API下订单,Facebook会开始执行该订单。

引用丹尼尔·杰克逊的话:

软件建立在抽象之上。 选择合适的程序,编程将自然而然地从设计中产生。 模块将具有小而简单的界面; 而无需进行大量重组,新功能就很可能适用。 选择错误的程序,编程将带来一系列令人讨厌的惊喜。

优质API的特点:

一个好的API是

· 简单易学

· 导致可读代码

· 难以滥用

· 易于扩展和

· 完备

简单易学

为了使API易于学习,它必须具有一致的命名约定和模式,对概念的仔细管理以及可预测性。 对于相似的概念,它使用相同的名称,对于不同的概念,它使用不同的名称。 用户必须能够重新应用他们在API的另一部分中学到的知识。

组成它的不仅是名称和方法,还包括其预期的语义,这些语义应该简单明了。 有些API很难学习,因为它们需要用户编写大量的样板代码才能入门。 易于学习的API使得仅用几行简单的代码即可编写" hello world"示例,并逐步对其进行扩展以获得更复杂的程序。

导致可读代码

有时即使一个库易于学习和记忆,它仍然可能导致完全不透明的代码。 API必须是可读的,因为应用程序代码仅编写一次,但是在应用程序的生命周期中由不同的开发人员反复读取。

可读代码更易于阅读和维护,即使存在错误,由于代码的可读性,它也更易于调试。 另外,可读代码始终处于正确的抽象级别上-既不隐藏重要内容,也不强迫程序员指定不相关的信息。

难以滥用

精心设计的API使编写正确的代码比编写错误的代码更容易,并鼓励良好的编程习惯。 它不会不必要地强迫用户严格按顺序调用方法或意识到隐性副作用。 通过消除冗余,我们可以使API难以滥用。

易于扩展

API的设计应考虑到增长。 在初始阶段,应该仔细考虑诸如新类,现有类的新方法,方法的新参数等内容。

完备

几乎不可能为任何内容提供完整的API,但是至少用户应该可以扩展或定制现有的API。 因此,API将是完整的,并允许用户执行他们想要的一切。

通过向现有API逐步添加功能,完整性会随着时间的流逝而出现。 但是,即使在那种情况下,通常也有助于明确未来的发展方向,因此每次添加都是朝着正确方向迈出的一步。

设计过程:

这需要几年的时间,并且需要很多人来构建良好的API。 流程的每个步骤都提供了改进API或破坏API的机会。

罗马不是一天建成的。

了解要求

在着手设计API之前,请先对这些要求有所了解。 在大多数情况下,您将需要进行某种需求分析。 一个好的出发点是向尽可能多的人(尤其是您的老板,同事和潜在用户)询问他们希望看到哪些功能。

在编写任何其他代码之前先编写用例

该实现应适应用户,而不是相反。 为此,在编写实现代码甚至设计API之前,首先要根据需求列表编写一些典型的应用程序代码片段。 在此阶段,不必担心实施API会遇到的困难。 在编写代码段时,API逐渐成形。

这些片段应反映Perl的座右铭,

"让轻松的事情变得容易,而让困难的事情变得可能"。

在实现之前定义API

在定义API之前,应在实现API之前先指定API及其语义。 对于具有数千个用户的库,如果API很简单。 有时实现起来可能会很棘手,但这没关系。

API及其语义是库提供的主要产品。 经验一次又一次地表明API比其实现更持久。

让您的同事查看您的API

寻找,询问甚至乞求反馈。 向您的同行展示您的API,并收集您获得的所有反馈。 尝试忘记实施请求的更改将需要进行多少工作。 当收到负面反馈时,请相信所有反馈都是有用的原则。 任何意见都是一条新的信息,您可以将其重铸为事实并添加到您的事实心智表中。

您拥有的事实越多,设计好的API的机会就越大。

准备扩展

设计API之后,请务必编写一些使用该API的示例。 使用API的人提供的反馈和示例将非常有用。

API可以通过两种方式扩展:

· 由维护者(添加/弃用)和

· 由将自定义API行为的用户决定。

规划可扩展性需要仔细考虑实际情况并考虑可能的解决方案。 如果您对API或功能有疑问,请将其排除在外,稍后再重新考虑。 它通常有助于等待用户的反馈。 实际上,不可能添加用户建议的所有功能。 一个好的经验法则是等到大量用户独立地要求功能后再实施它。

设计准则:

遵循准则,在设计API时无疑会改进它。 希望这些指南能帮助您正确使用API。 您可以在流程的各个阶段再次参考这些内容。

对于许多准则,可能会有同样真实的反准则(牛顿第三定律,大声笑)。 例如,

· "避免使API过于聪明"和"避免使API过于愚蠢"

· "注意边缘情况"和"关注一般情况"

API设计如此令人鼓舞的原因是,需要考虑产生相互矛盾的需求。 但最后,这些都无法替代您的大脑。

命名

· 选择不言自明的名称和签名。 方法的参数含义应该清楚。 布尔参数通常会导致代码无法读取,因此请注意这些内容。 并争取一致性。 固定参数顺序时,一致性特别重要。 避免使用单字母名称。

· 为相关事物选择不同的名称。 如果需要区分两个或更多个相似的概念,请选择与它们所表示的概念清晰对应的名称。 任何人都可以轻松地将名称与正确的概念相关联,而无需在文档中查找它们。

· API应该显示出良好的对称性。 形式的相似性使用户能够识别内容和功能的相似性。 另一方面,功能的不对称性应由形式的不对称性反映出来。 如果您习惯给setter方法加上" set"(例如setValue())作为前缀,那么对于那些不是setter的方法,请避免使用该前缀。

· 避免缩写。 如果有缩写,则意味着用户必须记住哪些词是缩写。 通常避免这种情况。 可以允许使用非常常用的形式,例如" min"," max"," rect"," prev"等,但是必须一致地应用此约定。 这不适用于首字母缩写词。

· 优先使用特定名称而不是通用名称。 特定名称使用户更易于联系,因为可能有数百个需要不同名称的类。

语义学

· 选择良好的默认设置,这样用户就不必只是为了入门而复制和粘贴或编写样板代码。 选择良好的默认值,我们不仅要消除样板代码,还可以使API简单且可预测。

· 注意边缘情况。 边缘情况很重要,因为它们往往会在API中产生波动。 例如,如果您的基本字符串搜索算法的边缘情况不正确,这可能会导致正则表达式引擎中的错误,从而导致使用正则表达式的应用程序中的错误。 首先处理一般情况,而不必担心边缘情况。 通常,您不需要任何额外的代码来处理边缘情况。 没人需要计算0的阶乘函数! = 0,哈哈。 但是,请确保在单元测试中正确覆盖了边缘情况。

结论

设计API并不容易。 这需要大量的耐心和努力。 希望本文对您有所帮助。 当然,我可能已经错过了一些东西,请随时让我知道。

祝好运并玩得开心点!

(本文翻译自Deepak Surya的文章《API Design 101》,参考:https://medium.com/@ideepaksuryas/api-design-101-4da3e1d1767)

  • 盘点18部最催泪的动漫共6集(把人虐的死去活来的6部高分动漫)
  • 2024-09-29把人虐的死去活来的6部高分动漫1、《我们仍未知道那天所看见的花的名字》应该算是我的入宅之作,剧情可能并不庞大复杂,但是当年中二年代很轻易地被主角团感动的稀里哗啦…昨天刚重温完,感觉长大之后,更能敏感地捕捉到其中人物的悲伤情绪当年哭。
  • 枳壳和枳实的功效区别(枳壳和枳实有什么不同)
  • 2024-09-29枳壳和枳实有什么不同形态区别枳壳的体积是比较小的它是酸橙的未成熟干燥果实它外果皮棕褐色至褐色,果皮表面有颗粒状突起,突起的顶端有凹点状油室果实表面有明显的花柱残迹或果梗痕而枳实的体积是比较大的它是酸橙的接近成熟干燥果实枳。
  • 火影忍者鸣人雏田简介(当主角开启万花筒写轮眼后)
  • 2024-09-29当主角开启万花筒写轮眼后秋名山上行人稀,头昏眼花血糖低身娇体弱易推倒,带带我吧老司机不知道大家看《火影忍者》多久呢?在火影里面,万花筒写轮眼是写轮眼的进化,能力非常强大不同的忍者,开启的万花筒花纹也有所不同,十分拉风帅气,但。
  • 木耳怎样区分好坏(怎样分辨木耳的好坏)
  • 2024-09-29怎样分辨木耳的好坏怎样分辨木耳的好坏1、看颜色好的黑木耳呈深褐色或近乌黑色,色泽均匀;掺假的黑木耳则为黑灰色,并伴有白色的附着物2、看外形优质的黑木耳耳瓣卷曲紧缩,叶薄且无完整轮廓;掺假的黑木耳形态膨胀、肥厚,卷曲少且。
  • 油团子的做法(油团子家常做法)
  • 2024-09-29油团子家常做法食材:自发馒头粉适量,鸡蛋最少两个,油适量,盐适量准备一个大的容器倒入适量的自发馒头粉加入盐打入鸡蛋,鸡蛋最少不能低于两个也不能太多慢慢的加水开始搅拌水不能太多或者太少,用筷子能搅起来不易掉就可以了需。
  • 苹果怎么可以保存很久(怎样储存苹果保鲜时间更长)
  • 2024-09-29怎样储存苹果保鲜时间更长想要长时间保存苹果,最好在放入冰箱之前不要洗,因为苹果洗完之后表面上会留下很多水,这会导致苹果更快的腐烂如果想洗的话,最好洗完之后等水干了再放入冰箱储存苹果,环境也很重要我们将苹果放入箱子里面,然后一。
  • 钓鲤鱼秘诀(有什么实用的技巧)
  • 2024-09-29有什么实用的技巧饵料:鲤鱼偏爱香型饵,所以甜香味的饵料适合作钓鲤鱼,原塘颗粒、红薯、酒香饵、麦香饵等钓位:鲤鱼属于底栖鱼类,所以所选钓位水深要合适,其次常见水草、倒树、入水口等饵食丰富区,都是钓鲤鱼的钓点装备:钓鲤鱼。
  • 晨跑说说励志短句
  • 2024-09-29晨跑说说励志短句晨跑励志短句说说有:1、只要你不停下来,跑步或人生都没有失败2、经常跑步的人知道那种所谓痛快淋漓的奔跑是不会一直存在的跑得时间越长便会越痛苦,越麻木3、跑步的真谛是越跑越痛快,跑下去,让软弱离开身体4。
  • 玉柴燃气460发动机扭矩(燃气机用户选玉柴)
  • 2024-09-29燃气机用户选玉柴新疆油气资源储量丰富,天然气储量11万亿立方米,占全国陆上资源量的34%,今年油价上涨,给新疆燃气车市场带来了重大发展机遇经过多年的深耕,玉柴在新疆市场的燃气机保有量超10000台,占比超50%,市场。
  • 一个人要有多努力才能幸运(一个人需要梦想)
  • 2024-09-29一个人需要梦想⭐⭐⭐打开窗户让孤单透气,这间屋子如此密闭,欢呼声仍飘在空气里我渐渐失去知觉,就当做是种自我逃避飞到天边,我已不猜落在何地我在深夜里旅行,肩上的破旧行囊能藏多少坚强1、一个人需要梦想,需要方向,需要努。
  • 好吃的炸肉怎么做好吃(怎么做好吃炸肉)
  • 2024-09-29怎么做好吃炸肉把里脊肉切成细片放入碗里,加上葱姜、味极鲜美、花椒腌上10分钟拿一盆盛上一点水,打入一个鸡蛋搅碎,放上淀粉、面粉搅拌均匀成糊状炒锅放油,烧热后把腌好的肉放入面糊中沾均匀后放入锅中炸成七八成时盛出,过一。
  • 宿舍充电宝被盗(情侣突然在出租屋衣柜翻出一个充电宝)
  • 2024-09-29情侣突然在出租屋衣柜翻出一个充电宝情侣租房却意外发现家中出现摄像头?近日,上海的张先生和女友遇到的这件烦心事,引发网友关注事发:情侣合租房意外发现针孔摄像头11月1日,上海市民张先生和女友在微博上反映,其在半年前在上海宝山区一小区与人。