饿了么API Everything解决了前后端开发之间的所有问题?

什么是API Everything

简单来说就是后端服务通过API的形式对外暴露,作为前端访问后端的中间层。API Everything会将SOA服务接口适配给外部各端进行访问。

为什么需要API Everything

我们在之前的开发中后端没有分层,是直接在Web API层写业务逻辑,甚至直接访问数据库。但是Web API的风格存在差异,不利于团队间的沟通合作。

API文档也容易过时,不能及时反映代码的变更情况。另一个常见的问题就是前后端开发不同步,前端需要等待后端的API 接口开发完成。

产品技术方案原则

我们在构建API Everything框架时所确定的最基本原则是稳定性、性能、高可用以及容错性。另外为了让业务团队能够自行解决使用API Everything时遇到的问题,还将DevOps中心配置到框架中。

其他一些原则,包括自动化、代码即文档、用户体验以及功能需求。这其中的代码即文档可以将代码中的注释给提取出来,使开发者无需另外创建API 文档。用户体验是面向开发人员准备的,让开发过程能够更加方便。

生命周期

除了对产品原则的考量外,我们还需要考虑整个API的生命周期。API Everything作为SOA与前端之间的中间层,它的生命周期一般由API开发、API管理、API网关、API运维这样的流程构成。上图详细的罗列出了各个生命周期所需要考虑的细节,例如在API开发时就要着手考虑文档以及Mock的问题,API管理阶段考虑访问权限以及限流、灰度问题。

产品规划

基于对产品原则和生命周期的考虑,我们提出了完善的产品规划。API Portal负责从代码中抽出文档、API Mock、访问权限、限流灰度以及API拼接剪裁,主要是对API的定义。

在定义完成后由Stargate Cluster来实现功能,包括鉴权认证、协议装换、监控告警、部署扩容、API拼接裁剪。MockServer中包含的是针对Mock功能的实现,这里不仅仅是Mock API还有Mock SOA,在SOA没有准备好前,可以事先通过Mock SOA实现出来。最后的API Robot主要是一些测试相关的功能。

系统交互

前端通过Nginx访问到达圈SOA服务,灰色表示正常访问服务,红色则是先通过query string访问Mock。Stargatecluster会相对API Portal准备好的API定义,去调用SOA服务。API Robot则是消费API定义来进行API测试及回归测试。

提高效率 – Automation

  • API文档生成自动化:代码注释和标注写完,提交代码,就可以看到API文档。
  • API代码自动生成:通过标注将SOA接口自动映射成Http接口,并且生成代码。
  • API部署自动化:在SOA服务部署的时候,自动部署对应的Web API。
  • API Mock自动生成:根据API Model自动生成Mock数据,支持函数。
  • API自动监控告警:每个应用接入,自动进行全链路监控和告警。

StargateCluster技术架构

Stargate Cluster是运行在docker环境下的。图中右上角的ELESS是饿了么内部的发布环境,当SOA环境发布后会调用Stargate_core,然后进入MaxQ,再由Stargate运营管理服务去消费MaxQ,最后通知Stargatenodes进行分析处理。

Stargate Cluster基于Docker部署

图中是Stargate Cluster的具体部署环境,流量先从F5api-xxx.ele.me到达Nginx,再通过upstream抵达Docker环境,最后Docker会将IP注册到Nginx上。

部署环境

图中是一些部署的log,包括部署消息、是否部署成功以及变更等。

APIPortal – 自动化文档

这份文档相对前端比较友好,后端可能更喜欢直观的数据展示。文档中会有一些讨论、版本控制以及变更对比之类的信息。

API -讨论

在API完成提交到git中后,发布系统会创建build。buid完成后就会自动化生成API文档。通过图中的public APIs就可以通知相关人员API完成的消息,接受到消息的人员可以来到API界面进行讨论留言,之后留言将被转发给API开发人员。

MockServer流程

图中的ServiceProvider需要依赖后面的服务,而通过Mock Server就可以Mock这些服务。

Mock Server – 自动解析

将相关的依赖放入Mock中后,Mock Server会自动解析依赖或者API对应架包所包含的方法,并且还能自主添加Mock case。

前后端分离

前面我们谈论了StargateCluster、API Portal、Mock Server这些可以独立使用的工具。而在前后端开发分离实践中这些工具将会被很好的结合在一起。上图就是整个开发过程的流程图,能够看到所有的部分都被有机的结合在一起。

应用实践——配送范围迭代

我们的前端基本上就是通过API Portal完成Mock相关的部分。后端原本是要写Web controller,以及相应的测试,现在通过Stargate Cluster可以自动化生成Web API。之前开发中经常会出现部分功能留待联调期间进行开发的情况,以至于联调时间变长。而现在前后端是独自进行开发的,联调时间明显减少。

问题解决了?

通过API Everything框架看起来是解决了所有的问题,但是其实还存在不足。

可以自动化回归测试吗?

我们设想中API Robot会录制线上流量,然后进行回放。录制下来的流量会被回放给到新上线的系统,来测试新系统是否有问题。

而要完成回归测试需要录制很多东西,包括SOA1和SOA2依赖、第三方应用、Redis还有Database。用户端的至下而上请求同样需要根据时间点录制,再进行整合分析抽取出合适的顺序,也就是Case。这整个过程可谓相当复杂。

今天的分享就到这里,谢谢大家!

IT大咖说 | 关于版权

本文由“IT大咖说(ID:itdakashuo)”原创,转载时请注明作者、出处及微信公众号。投稿、约稿、转载请加微信:ITDKS10(备注:投稿),茉莉小姐姐会及时与您联系!

感谢您对IT大咖说的热心支持!

原文发布于微信公众号 - IT大咖说(itdakashuo)

原文发表时间:2018-10-23

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏喵了个咪的博客空间

phalapi-进阶篇1(Api,Domain,和Model)

#phalapi-进阶篇1(Api,Domain,和Model)# ? ##前言## 先在这里感谢phalapi框架创始人@dogstar,为我们提供了这样一个...

3737
来自专栏lulianqi

使用浏览器访问或调试微信公众号(跳过微信认证)

因为大部分公众号web应用实际登录都是使用用户微信认证登录,下文主要是提供一种方法使在PC端使用任意浏览器绕过微信认证完成登录,后面就可以在浏览器中使用或调试w...

3.7K3
来自专栏顶级程序员

千万千万不要运行的 Linux 命令

来源:Linux 中国 https://linux.cn/article-401-1.html 文中列出的命令绝对不可以运行,即使你觉得很好奇也不行,除非你是...

3648
来自专栏Kevin-ZhangCG

前后端分离原理

  前后端分离已成为互联网项目开发的业界标准使用方式,通过Nginx+Tomcat的方式(也可以中间加一个Node.js)有效的进行解耦,并且前后端分离会为以后...

4.5K3
来自专栏JavaWeb

使用Spring profile 多环境配置管理

3648
来自专栏Android群英传

单应用的多进程架构

1051
来自专栏后端技术探索

新浪微博平台服务部署及Web框架

平台作为整个微博架构的基础功能服务层,对外以Http接口的方式提供服务。接口遵守RESTful规范。接口示例如下:

2082
来自专栏主机笔记

Windows2012搭建我的世界(Minecraft)服务器超简单

有台qq云的服务器一直在挂机没事干,使用Windows2012系统搭建我的世界服务端,傻瓜式安装简单快速,亲测试可以玩。 0.安装环境 服务器配置:2核2G1M...

1.4K10
来自专栏FreeBuf

潜伏7年的Linux内核漏洞CVE-2017-2636曝光,可本地提权

又一个古老的Linux内核漏洞被曝光!这次的漏洞可以追溯到2009年,影响的linux发行版包括Red Hat、Debian、Fedora、OpenSUSE和U...

2918
来自专栏张善友的专栏

持续集成及部署利器:Go

Go是一款先进的持续集成和发布管理系统,由ThoughtWorks开发。(不要和Google的编程语言Go混淆了!)其前身为CruiseControl,是Tho...

2985

扫码关注云+社区

领取腾讯云代金券