架构师成长记架构设计与重构OpenAPI

如何设计一个开放平台openapi?

2017-12-25  本文已影响197人  monkey01

1. 为什么要建开放平台

从05年开始随着web2.0技术的快速发展,硅谷掀起了开放平台openapi的一股热潮,google开放了map api,还有很多互联网公司也推出了开放平台,但是真正引起人们注意的是twitter开放了社交api,一堆基于twitter开放平台的页游火了起来,如果不了解twitter的同学想想当年开心网和qq空间偷菜有多火就知道了,开心网是最先参考了twitter的开放平台新建了开心网的开放平台,将社交接口开放出来提供给其他小的游戏厂商进行网页小游戏开发,一下子激起了N多小游戏公司的激情,因为用了开心网的社交用户数据,原来困扰小游戏公司的用户问题一下子就没有了,这些小游戏公司在开心网授权后一下子就可以在自己的网页游戏中调用开心网的用户好友信息。openapi在10年左右主要还是应用在国内的互联网公司主要集中在社交平台,因为社交平台的用户数据对于规模较小的公司是最有价值的资源,一下子可以降低获客成本,并且获得了这些社交平台开放的其他能力。2010年以后国内的开放平台开始摆脱社交这一单一的开放平台场景,逐渐的地图、新闻门户、电商等很多行业都开放了相关的核心api。

从2012年开始互联网金融公司也开始上线开放平台系统,支付宝在2012年10月上线了支付宝开放平台,开放了支付类相关的api,笔者当时在银行,我们银行也在10月份开始实施开放平台的设计和开发工作,一开始对于开放平台的理解还不是很深入,只能上支付宝的开放平台深入“学习”下,后来经过半年左右的开发我们的银行开放平台在13年终于上线了,在当时的国内银行业也是第一家开放api的银行,后来不断迭代优化前前后后一共做了4年,通过不断的迭代也学到了很多东西,现在也在一个小银行坐开放平台,期间也给一家互联网公司做过开放平台的技术咨询,后来也参与了这家互联网公司开放平台的架构设计,总的来说对于开放平台还是有一定经验的,本篇就介绍下开放平台的功能设计,这里已经避讳了之前做的开放平台中一些敏感的内容。开放平台系列会写三篇,这是第一篇焦点主要集中在介绍开放平台的基础功能,让大家了解从0到1搭建开放平台需要做哪些;第二篇会介绍开放平台目前使用的主流架构模式;第三篇会介绍实现各个核心功能可以使用什么技术来实现。

2. 开放平台关键功能模块

2.1 服务接入网关

开放平台最核心的一个功能就是服务接入网关,服务注册网关负责外部系统的服务调用请求处理,对于外部请求处理,并不是说外部随便发来的请求网关都要接入并进行处理,这里的网关要实现以下功能:

2.2 服务管理

开放平台对外开放了服务那么势必要提供服务管理的功能,需要支持以下功能:

2.3 服务代理

2.4 服务mesh up

2.5 oauth

对于开放平台有一块很重要的功能就是通过oauth协议来进行鉴权,当然你也可以用自己的token体系进行鉴权,不过目前主流的开放平台都是使用oauth鉴权,这里建议也是使用oauth进行鉴权,这样开发者在接入的时候也会比较容易理解,不用重新学习。oauth必须要实现以下基础服务:

2.6 服务注册发现

开放平台对于所有要对外开放的服务,在平台内部需要有服务注册和发现机制,服务注册主要功能是将后台源系统的接口对外暴露需要在平台进行注册,方便外部访问的交易路由;服务发现主要功能是外部服务请求从网关进来后,平台需要根据服务id发现在平台注册的后台源系统接口。其实服务注册和发现功能除了基本的服务注册和发现外,还应该要包含服务的HA、服务心跳管理、服务自动回复等功能,因为如果服务注册中心挂了,那所有的外部访问都会出问题。

2.7 安全

开放平台还有一块非常非常重要的非功能就是安全,因为以前没做过开放平台的同学问的最多的一个问题就是开放平台和我们现在做的直接开放接口有什么区别,感觉没什么区别,都是将接口开放给外部调用,但是有一定开发经验的同学一定会意识到一个问题,如果将原先系统的接口直接开放出去,提供一个web网关的功能,那么会遇到什么问题?一定是安全问题,怎么判断外部来的请求是合法的,怎么控制访问的权限都是需要考虑的问题。在开放平台实施安全方面我们一般会关注下面几点:

2.8 开发者门户

开放平台除了刚才说的那么多的基础功能,还需要有一个门户提供给开发者去访问,开发者可以在门户里进行注册、申请app开发、下载sdk、查看sdk教程等,开发者门户应该有以下基础功能来进行支撑:

2.9 开放平台内管

对于开放平台内部管理人员来说也是需要有一个内部管理平台进行开发者的申请审批、应用管理、交易管理等日常操作,其实和一般的内部业务管理平台功能类似,对外提供了什么功能就需要有个内部管理系统进行内部管理,开放平台内管需要有以下基础功能:

2.10 沙箱

对于开放平台还需要有一个比较特殊的模块,那就是沙箱(sandbox)。没接触过沙箱的同学可能不知道沙箱是干嘛的,这里我简单解释下,沙箱用大白话讲其实就是一个提供交易模拟的测试环境,里面的数据都是模拟的,交易路径也是比较固定的。开放平台为什么需要一个沙箱?首先开放平台服务接口是对外开放的,想想我们在开发过程中是怎么开发和测试其他系统提供的接口的,开发肯定是先和对方系统在开发、测试环境联调接口,联调测试通了再上测试环境再上生产环境,但是我们开放平台因为本身不提供业务功能,真正的业务功能都是后台源系统提供的,生产环境可以从开放平台到业务生产系统都搭建完整的一套,但是对于测试环境,外部开发者是没办法连接到我们内部测试系统的,那么如果在公网再搭建一套成本太高了,而且还需要进行测试数据管理也不太现实。所以就引出了沙箱的概念,沙箱就是给开发者提供了一个模拟的测试环境,后台其实是没有真实的业务源系统的,都是沙箱配置好报文固定返回,这样就解决了测试环境和开发者测试联调的问题。

测试沙箱也存在一个问题,就是数据不够真实,因为沙箱都是固定的业务逻辑和规则,返回的报文也是固定的,可能很多异常场景是无法测试到的,这些异常情况也只能在沙箱测试完成后,进行生产测试来避免。

3. 开放平台的未来发展趋势

上面我们主要描述了下当前开放平台的主要功能模块,只是做了一个比较粗的解释,如果想了解一些细节也可以单独私信我进行咨询,同时也提供实施方案的付费咨询服务。开放平台发展到现在其实也经历了很多过程,最近我也思考了一下未来的开放平台的发展趋势,现在开放平台主要还是集中在一些电商公司、银行、互金公司、游戏公司、社交平台等,但是最近有很多非常传统的公司也在计划实施开放平台,例如统计局在考虑如何将自己统计的数据开放出去,让更多的人能够看到这些国家公布的数据,原先这些数据只是单调的显示在一个个季报、年报的统计新闻稿中,展现形式比较单一,大部分人是看不到的,如果将这些可以公开的数据做成openapi开放出去,那么我相信互联网公司的创造力是巨大的,他们会利用好这些数据,让更多的人看到这些数据,利用好这些数据。除了刚才说的统计局,有些学校也在计划实施开放平台,学校计划通过开放平台将学校的一些公开课信息开放出去,也可以将学校的一些可以公开的学习讲义、老师的学术研究等信息开放出去,来扩大学校的影响力,同时也造福全国的学生,如果国内211、985院校都把这些信息开放出去,那么这个想象的空间就很大了。

开放平台未来肯定会逐渐渗透到更多的传统行业,同时在技术层面也会不断进步,目前用的技术其实还是想对比较传统的j2ee技术和传统中间件,随着技术的快速发展,开放平台也在不断更新技术,我们现在也在用微服务进行改写,同时也在研究容器化技术,将微服务和容器化进行整合,相信随着开放平台业务的高速发展,技术也会更加快速的更新换代。

上一篇 下一篇

猜你喜欢

热点阅读