API到底是什么?

定义

API是Application programming interface的缩写, 即应用编程接口,一个系统可以通过API,暴露自己的系统的业务能力和数据,为其他应用赋能;

API一直作为软件工程里面的重要组成部分,由于“API economy”和“Open APIs”的概念,API在企业资产中占有越来越突出的地位,甚至可以说提到了企业技术战略的高度。

一些典型的应用场景

  • 在遗留系统或者服务上面,包装一层更加现代的技术,提高其易用性,降低消费者的使用难度。
  • 在流程自动化的时候,需要Build,Deploy软件或者创建虚拟机, 容器等。
  • 封装datasource,暴露数据。
  • 抽象化业务能力,e.g:在保险行业里,购买保险的时候,获取报价API,这样使用者就不需要知道底层或者背后是如何实现的。

一些主要的收益

  • 如果API对外的接口不变,那么作为使用者,我是不关心你如何实现的,这就给服务提供者,提供了很高的灵活性,做到了具体实现和消费者之间的解耦。
  • 通过合理的API划分,可以将一个很大的系统,分解为由N个API组成的系统,整体统一对外服务,这样方便了多团队的开发和交付。
  • 如果有合适的API文档,可以减少不必要的跨团队交流,e.g: Swagger UI或者Open api等
  • API资产的重用,避免重复造轮子,导致的资源的浪费。
  • 业务的赋能,通过API可以方便的进行新业务的扩展,比如使用第三方服务提供方的API,快速构建相应的新的业务能力。

一些常见的API消息模式

  • 请求 - 响应, 比如API调用,它会有一个request(类似question)和一个response(类似answer)或者调用出错时,抛出一个异常(类似error code);这种消息模式用于同步通信,消费者需要等待服务提供者完成任务,然后返回。
  • 回调, 比如它会有一个request(类似question)和一个acknowledgement(确认这个请求被接受)或者一个异常(类似error code);一般请求中会包括一个callback地址,当任务完成时,producer可以使用这个地址来通知consumer;这种消息模式用于异步通信,消费者不需要等待服务提供者完成任务,举个栗子:大数据查询API,当数据量特别大的时候,有时候,这些API会被设计成“回调”模式,一旦API被调用成功,触发背后的数据处理,它会像一个后台进程一样一直运行,并在完成任务后,通过某种形式比如邮件,将结果通知到用户(为了提升用户体验,这种需要长时间处理的业务,都会采取异步的方式,前端在获取到acknowledge之后,就会向客户展示相应提示,比如提示用户,查询结果会以邮件的方式告知)。
  • 发布- 订阅, 这个模式有两个清晰的组成,第一部分 - 发布就可以理解为当某种事情或者动作被触发的时候(比如闭关账号这个动作),Producer就会生产一个事件(通常具有业务意义,过去时,有序),并将它放入到一个队列中,producer并不知道也不关心谁对这个事件感兴趣; 第二部分 - Consumer监听它感兴趣的事件,并采用合适的行为;这种模式提供了至少三种好处:
    一、生产者 - 消费者 异步解耦
    二、能够处理更多的请求
    三、扩展性 - 未来数据的多样消费

API的分层架构

api-layers.png

  • BFF层: 非常薄的一层,主要负责数据的聚合,服务的编排和简单的数据验证,不包括业务逻辑,更多的是为支持特定的前端;这一层非常容易创建和改变,方便和前端一起进行快速的演进。
  • Domain层: 领域层的API,主要封装和暴露领域项目的对象和数据,这层的API相对而言比较稳定,变化没有BFF层那么频繁,可以被多个BFF API消费。