互联网应用架构:专注编程教学,架构,JAVA,Python,微服务,机器学习等领域,欢迎关注,一起学习。

对于API,在日常的工作中是接触最多的东西,特别是我们软件这一行,基本就是家常便饭了,在百度百科里面的解释:

API(Application Programming Interface,应用程序接口)是一些预先定义的函数,或指软件系统不同组成部分衔接的约定。 用来提供应用程序与开发人员基于某软件或硬件得以访问的一组例程,而又无需访问源码,或理解内部工作机制的细节。

在不同系统之间,不同部门之间的各种对接,API就是研发人员的一个纯粹性的沟通语言,双方定义好规范、约束等进行系统之间的交互。

生命周期

在我们软件行业的领域里面,每一个软件都是有生命周期的,从最开始的需求调研,需求设计,架构设计,软件研发,测试,上线,试运行,运行到最后业务上,技术上跟不上时代的发展,被新来的技术人员嫌弃,后面的业务部门抛弃,至此开始结束最后到下线,这个系统就算结束了他们的生命周期。

API是一种应该性接口同样具备了设计化、测试化的过程,这就显性表明API其实也作为有生命周期的存在,在现有的设计中,API生命周期分为9种

  • 设计
  • 构建/研发
  • 管理
  • 联调/测试
  • 自动化
  • 文档/发布
  • 授权开放
  • 监控
  • 下线

设计--见文知意

一个API的形成,设计是最根本的存在,因为他的存在不单单是自己使用,更重要的是让多方可以使用,因此有一个规范的思想非常重要,这里有个方法论就是--见文知意。每次看到API都能知道这个API是做什么的,这是对开发者,使用者来说非常重要的一个方向,每一个API实际上对应的一个后端服务的方法,必须有限定的出参与入参,其中出参与入参必须有严格的定义。

入参:有一个重要的准则就是能快速进行参数的基础属性的校验,例如是否为空,字段长度等,目前一般采用hibernate valid或者java自带的valid来实现。

出参:出参的规范化体现在错误码上,针对错误码的定义需要非常明确,让调用者可以一眼就能看到问题的所在,目前很多API接口在进行设计的时候一般只有正确与错误两个错误码,平时用着没问题,在业务发展到一定程度后会增加运维的难度,建议错误码按照不同的类别,例如业务、技术等区分。

构建/研发--防范于未然

在进行了的第一步的规范化设计后,研发人员就要开始根据规范进行API接口的内部业务逻辑的设计,具体的业务逻辑由业务逻辑来做限定,这里需要注意的就是非法参数尽可能排除的API之外,需要在入口处进行判断并且汇集不合法的数据直接报错,不允许出现在后续的业务代码逻辑里面去判断合法性,如上面所说采用hibernate valid进行操作,这些都是一个API生成的过程。

管理--运筹帷幄

每一个API的诞生到最后的下线它都是可控可管理的。

版本管理:每一个API从最开始发布到后面不断迭代发布更新,都需要一个版本号来做限定,做到每一个版本可查可追溯。

文档管理:API里面文档是非常重要的存在,它是连接所有应用的桥梁里面的中流砥柱,一份清晰可见的文档是所有使用者的福报。在研发人员的世界中,最喜欢写代码,最痛苦写文档,但是如果把写代码变成一种写代码的方式呢,swagger可以帮你实现本地化文档也可以实现离线文档,还是直接导入到yapi进行mock测试。

质量审核:API并非写完就完事,如果只是简简单单搞定并不按照规范走,入参map加上出参map的存在,那就要扯皮来,因此需要一个人来审核这些才能允许上线。

状态码管理:由于状态码是最常见的存在,因此它是微乎其微但是又是非常重要的东西,定义业务级别的状态码,定义系统级别的状态码,这些都需要进行管控起来。

迭代管理:迭代跟上面的版本有异曲同工之妙,版本更着重于版本号的定义及生成,迭代更侧重于每一次迭代的跟进管理,等价于每一次的历史记录。

权限管理:API并非任何人都可以用的,需要进行授权。

服务管理:一个服务提供多个API,存在数据库级别的1对N关系,需要这些进行分配及管理。

变更管理:API并非一成不变的,除了版本号的变更,经常涉及到里面的内容的管理,这些内容需要做记录及对比。

联调/测试--微察秋毫

一个好的API除了规范设计清晰及业务逻辑清晰,更重要的是一定也是便于测试的,对应的业务是否能完成,对应的系统对接是否有足够集成,是否提供了足够的详细的文档,确保了API的质量是有非常高的维护性的,这些通通在测试层进行验证,本地化测试,MOCK测试,测试用例尽可能完整。

自动化--进退有度

相比于上面的人工测试,自动化测试是标准化的一种设计。按照约定设定好一定的标准阈值对接口进行测试,检验接口是否满足我们最基础的性能等要求,但是自动化测试并不是万能的,何时介入,怎么介入,什么样的项目适合自动化测试,这些都需要我们进行思考。

何时介入:在项目的刚开始的时候不适合自动测试的介入,业务稳定性,需求变更快导致接口随时随地都在变化,代码变动率非常高,维护成本非常高;到了后期后项目稳定了项目进入维护阶段,此时自动化开始介入并为回归测试做好准备。

怎么介入:从自动化程度及自动化率来做切入点,虽然前期的项目并不适合做自动化测试,但是可以选用一些稳定的,公用的进行测试。

适合项目:有意做回归测试,并且需要长期做支持维护的项目;压力测试的项目;覆盖率测试的项目。

文档/发布--十年磨一剑

这里用十年磨一剑有点夸张了,但是相对于开发者来说,每一个接口的诞生都是我都认为那是一项伟大的存在。在经历了前面的各种更改,测试,压力考验后可以正式发布了。每一个接口在发布后就直接跟网关对接,网关帮我们实现统一的鉴权,过滤,熔断,限流等操作来保护我们每一个接口的安全。

授权开放--首肯心折

不是所有人都可以访问API接口的,不是每个接口都是免费的,在必要的时刻需要我们对特定的接口做授权管理,规定哪些人可以访问,哪些接口需要收费。

监控--运筹帷幄

在API运行期间,最重要的也是最重点的工作就是对接口进行监控,包括性能监控、可用率监控、调用量监控等,并生成监控报告。这些监控都可以帮助我们从技术层面,业务层面进行分析接口的详情情况及指标,确保每一个接口都尽可能实现价值,实现接口的性能达标跟可用率达标。

下线--功成名就

到了这里,接口基本上就是已经功成名就完成它的使命,我们需要结束它的生命周期,有种莫名的伤感,夕阳西下,断肠人在天涯,下线吧。

--END--

作者:@互联网应用架构

原创作品,抄袭必究

如需要源码或请转发,关注后私信我

部分图片或代码来源网络,如侵权请联系删除,谢谢!

微服务手册:API接口9个生命节点,构建全生命周期管理的更多相关文章

  1. .net core 微服务之Api网关(Api Gateway)

    原文:.net core 微服务之Api网关(Api Gateway) 微服务网关目录 1. 微服务引子 2.使用Nginx作为api网关 3.自创api网关(重复轮子) 3.1.构建初始化 3.2. ...

  2. 轻量级容器Docker+微服务+RESTful API

    [宗师]李锟(44035001) 10:23:03感觉Docker这样的轻量级容器+微服务+RESTful API三者可以形成一个铁三角.这也代表了PaaS未来的发展方向. [宗师]李锟(440350 ...

  3. SOA与ESB,微服务与API网关

    SOA与ESB,微服务与API网关 SOA: ESB: 微服务: API网关: 参考资料: 1.漫画微服务,http://www.sohu.com/a/221400925_100039689 2.SO ...

  4. 一站式入口服务|爱奇艺微服务平台 API 网关实战 原创 弹性计算团队 爱奇艺技术产品团队

    一站式入口服务|爱奇艺微服务平台 API 网关实战 原创 弹性计算团队 爱奇艺技术产品团队

  5. 微服务·API网关

    阅文时长 | 3.52分钟 字数统计 | 1232字符 主要内容 | 1.什么是API网关 2.微服务中的API网关 3.几种部署策略 『微服务·API网关』 编写人 | SCscHero 编写时间 ...

  6. 微服务·API文档

    阅文时长 | 3.92分钟 字数统计 | 2754.05字符 主要内容 | 1.什么是API文档 2.API文档的使用 3.声明与参考资料 『微服务·API文档』 编写人 | SCscHero 编写时 ...

  7. Net分布式系统之六:微服务之API网关

    本人建立了个人技术.工作经验的分享微信号,计划后续公众号同步更新分享,比在此更多具体.欢迎有兴趣的同学一起加入相互学习.基于上篇微服务架构分享,今天分享其中一个重要的基础组件“API网关”. 一.引言 ...

  8. Spring Cloud 微服务开放平台接口

    github源码地址:https://github.com/spring-cloud/spring-cloud-security 前言: 什么是开放平台接口 场景 : 总公司与子公司 对接接口  还有 ...

  9. Re:从 0 开始的微服务架构--(三)微服务架构 API 的开发与治理--转

    原文来自:聊聊架构公众号 前面的文章中有说到微服务的通信方式,Martin Folwer 先生在他对微服务的定义中也提到“每个服务运行在其独立的进程中,服务与服务间采用 轻量级的通信机制 互相协作(通 ...

随机推荐

  1. 想买保时捷的运维李先生学Java性能之 垃圾收集器

    前言 垃圾收集算法是内存回收的方法论:垃圾收集器是内存回收的具体实现.Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同的厂商.不同版本的虚拟机所提供的垃圾收集器都有很大的差别,并且 ...

  2. 专题二:redis的数据类型之string

    一.redis的数据存储格式 redis本身是一个Map,其中所有的数据都是采用 "key:value"的方式进行存储的. 我们说的数据类型是数据存储的类型,也就是对应下图的val ...

  3. elk之插件部署 (实操三)

    一.插件安装 下载head以及node软件包: elasticsearch-head.tar.gz node-v8.12.0-linux-x64.tar.gz 找不到这两个包的评论下留言或私我 解压软 ...

  4. Java学习的第三十天

    1.遇到打印文件使用打印流PrintStream 使用PrintStream写入数据 2.没有问题 3.明天学习用RandomAccessFile随机访问文件

  5. testNG优雅的使用注解让你的测试项目开发更高效!

    testNG大部分是通过xml配置测试类和监听类 但是这种方法就像传统的spring框架一样需要引入大量的xml配置信息,而且在各层之间也需要通过new对象传递.如果testNG能使用注解注入bean ...

  6. 【新阁教育】S7.NET+Log4Net+SQLSugar+MySQL搭建Iot平台

    1.搭建西门子S7仿真环境 新阁教育提醒您基于PLCSIM-Advanced搭建西门子S7仿真环境注意事项: 1.通过dotNet工控上位机公众号后台发送PLCSIM-Advanced获取软件 2.安 ...

  7. mysql运维-slave_skip_errors

    1 简介    mysql在主从复制过程中,由于各种的原因,从服务器可能会遇到执行BINLOG中的SQL出错的情况,在默认情况下,服务器会停止复制进程,不再进行同步,等到用户自行来处理.    sla ...

  8. Visual Studio空格变成点的快捷键切换

    [Ctrl + R + W] 效果如下图

  9. 【linux】helloword原理分析及实战

    目录 前言 linux中hello word原理 hello word 实战 学习参考 前言 hello word 著名演示程序,哈哈 下面在 arm linux 下展示一下hello world,便 ...

  10. rgw使用boto3生成可以访问的预签名url

    前言 如果想访问一个ceph里面的s3地址,但是又不想直接提供secrect key的时候,可以通过预签名的方式生成url 生成方法 下载boto3 脚本如下 cat s3.py import bot ...