专栏首页Jerry的SAP技术分享来自Google资深工程师的API设计最佳实践

来自Google资深工程师的API设计最佳实践

版权声明:本文为博主汪子熙原创文章,未经博主允许不得转载。 https://jerry.blog.csdn.net/article/details/86646209

来自Google资深工程师Joshua Bloch的分享:API设计最佳实践

为什么API设计如此重要?API是一个公司最重要的资产。

为什么API的设计对程序员如此重要?

API一旦发布,出于兼容性考虑,不能轻易地随心所欲进行修改,比如删除参数。

从API的上帝 - 设计者的视角出发,有助于提高代码质量。

一个优秀的API应该满足下列标准:

易学易用,甚至是自描述的,不需文档也能让新手快速上手。不易造成误解。后续维护者易于理解,满足开闭原则 - 能够很容易进行扩展。

如何设计一个好的API

首先应该从收集需求出发。注意结合API实现的复杂度一起考虑。

作为第一步,首先给出需求规格文档,一页即可:

别指望你的API能让所有人满意。也不要指望发布后,它不会出任何错误——那是不可能的。

API也应该遵循单一职责:如果你发觉很难根据你的API实现的功能给它取个合适的名字,这是一个不好的信号,很多时候说明你的API里面做了太多事情——试着把它们拆成多个API。

信息封装 - 公有类尽量避免暴露公有字段出去,最大化信息隐藏

API命名艺术 - API的名称也是一门语言。

API和文档的关系

合理使用继承和子类,不要滥用里氏替换原则

采用fail fast 策略,尽可能早地抛出错误消息:

API的数据都应该允许使用者通过字符串的方式访问

慎用重载

选用合适的API参数和返回类型

API里的参数顺序也很有讲究

避免冗长的参数列表,参数如果超过3个,使用者就需要通过阅读文档才能消费了。

尽量返回不需要调用者进行异常处理的参数,比如空数组或集合,而不是null

API设计里的和异常处理相关的最佳实践

API重构的最佳实践

API设计和Thread-local相关的最佳实践

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 在SAP API hub自动生成使用ABAP调用API的胶水代码

    Jerry Wang
  • 把SAP云平台上创建的API proxy添加到API product里去

    Jerry Wang
  • 在SAP云平台的API portal里创建和管理API

    API Provider字段,选择之前创建好的API provider,SAPDeveloperSystemES5,点击Discover按钮后,能看到该Prov...

    Jerry Wang
  • 想成为技术大咖?那就从API的使用开始吧

    近几年,API经济纷纷崛起,无论是国外还是国内,众多厂商积极开放API。从2011年开始,数据通过API开发出来已成为一种趋势,与此同时它也逐渐发成为企业的核心...

    BestSDK
  • API网关在API安全性中的作用

    从单一应用程序切换到微服务时,客户端的行为不能与客户端具有该应用程序的一个入口点的行为相同。简单来说就是微服务上的某一部分功能与单独实现该应用程序时存在不同。

    架构师修炼
  • 《软件测试52讲》读书笔记 —— API测试怎么做

    文章中还介绍了测试工具,比如cURL、postman,单API如何测试;但这些都是偏基础的东西,且网上教程各式各样,就不再赘述了;这里主要讲的就是关于复杂场景的...

    小菠萝测试笔记
  • API安全发展趋势与防护方案

    近些年,API安全在安全领域越来越多的被业界和学术界提及和关注。OWASP在2019年将API安全列为未来最受关注的十大安全问题。事实上随着应用程序驱动的普及,...

    绿盟科技研究通讯
  • 【物联网安全】通过API管理最小化物联网安全失误

    物联网的采用在不同行业中迅速增长并不是秘密。在我的最后一篇文章中,我讨论了基于blockchain的IoT安全策略,这是一个不断发展的主题,我发现重要,经常被忽...

    首席架构师智库
  • 没有被了解的API?一个老码农眼中的API世界

    即便做了20多年的软件开发,仍然发现自己经常会低估完成一个特定的编程任务所需要的时间。有时,错误的时间表是由于自己的能力不足造成的: 当深入研究一个问题时,会发...

    半吊子全栈工匠
  • 前端基础-浏览器API

    API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件...

    cwl_java

扫码关注云+社区

领取腾讯云代金券