OpenApi开放平台架构实践

WebAPI 开放平台架构实践


导读

  • 背景
  • 需求
  • 场景
  • 架构设计
  • 总结


背景

       随着业务的发展,越来越多不同系统之间需要数据往来,我们和外部系统之间产生了数据接口的对接。当然,有我们提供给外部系统(工具)的,也有我们调用第三方的。而这里重点讲一下我们对外的接口。

       我们运营和维护着诸多的对外接口,很多现有的接口服务寄宿在各个不同的项目,哪些应用在使用api也没有管理起来。并且以前的调用模式也是比较复杂,排错困难。

       目前已经对外提供服务的有短信平台,审核中心,ETCP,官网系列(充值,登陆,注册),服务中心,AuterCenter,HomeAPI(即将上线)。同时内部还有工单系统,安全中心,基础服务,GEMC等。其他的还有一些内部工具服务。

       从目前的需求上看,我们对外提供接口的需求很大。当然,能够持续对外提供服务是好事。但是,对接标准不统一,服务寄宿不合理, 无文档,无测试报告,无demo,无接口变更记录都将导致api的可持续和可维护变得越来越难。

       我们将更多的考虑对外服务的安全性,高可靠性,可维护性,尤其是离产品和用户最近的那些API。 同时,尽量做到所有api及其调用关系都有数据可查。因此,对于新接入的API,提供专业、规范的设计标准和文档规范势在必行。

       让所有支撑服务化,所有服务标准化。

       OPenAPI将作为支撑的中间件,与其他系统服务一起为运维、安全、产品和运营的各种需求提供强有力支撑。


需求

  • 对服务提供方(如官网服务)及其API进行管理
  • 对接入的应用进行管理
    • 用户先申请appkey,appsecrect
    • 下载sdk
    • 通过appkey,appsecrect生成token
    • _aop_timestamp 请求时间戳
    • _aop_signature 请求签名
    • access_token 用户授权令
    • 调用API
  • API规范
  • 日志记录
    • API调用记录
    • API调用异常记录
    • ...
  • 安全
    • 参数加密
    • IP白名单限制
    • 接口限制
  • 性能
    • 客户端缓存
    • 服务端缓存
    • 限流,对于高频访问进行限制,如每个appkley1min调用次数

使用场景

使用场景


架构设计

  • 基础架构 基础架构

  • UML设计 UML设计

  • 认证机制

    • 验证(Authentication)是为了确定用户是其申明的身份,比如提供账户的密码。不然的话,任何人伪造成其他身份(比如其他用户或者管理员)是非常危险的
  • 主要原理:

    • 做一个认证服务,提供一个认证的webapi,用户先访问它获取对应的token
    • 用户拿着相应的token以及请求的参数和服务器端提供的签名算法计算出签名后再去访问指定的api
    • 服务器端每次接收到请求就获取对应用户的token和请求参数,服务器端再次计算签名和客户端签名做对比,如果验证通过则正常访问相应的api,验证失败则返回具体的失败信息
  • 核心实现

    • 1.用户请求认证服务GetToken,将TOKEN保存在服务器端缓存中,并返回对应的TOKEN到客户端(该请求不需要进行签名认证)
    • 2.客户端调用服务器端API,需要对请求进行签名认证,签名方式如下
    • get请求:按照请求参数名称将所有请求参数按照字母先后顺序排序得到:keyvaluekeyvalue...keyvalue,字符串如:将arong=1,mrong=2,crong=3,排序为:arong=1,crong=3,mrong=2,然后将参数名和参数值进行拼接得到参数字符串:arong1crong3mrong2。post请求:将请求的参数对象序列化为json格式字符串
    • 在请求头中添加timespan(时间戳),nonce(随机数),appkey,appsecrect,signature(签名参数)
    • 计算本次请求的签名,用timespan+nonc+appkey+appsecrect+token+data(请求参数字符串)得到signStr签名字符串,然后再进行排序和MD5加密得到最终的signature签名字符串,添加到请求头中
    • webapi接收到相应的请求,取出请求头中的timespan,nonc,appkey,appsecrect,signature数据,根据timespan判断此次请求是否失效,根据appkey+appsecrect取出相应token判断token是否失效,根据请求类型取出对应的请求参数,然后服务器端按照同样的规则重新计算请求签名,判断和请求头中的signature数据是否相同,如果相同的话则是合法请求,正常返回数据,如果不相同的话,该请求可能被恶意篡改,禁止访问相应的数据,返回相应的错误信息,参与签名的TOKEN,整个过程中TOKEN是不参与通信的,所以只要保证TOKEN不泄露,请求就不会被伪造。然后我们通过timestamp时间戳用来验证请求是否过期,这样就算被人拿走完整的请求链接也是无效的。
    • Sign签名的方式能够在一定程度上防止信息被篡改和伪造,保障通信的安全。
  • 授权

    (Authorization)是为了保证用户有对请求资源特定操作的权限。比如用户的私人信息只能自己能访问,其他人无法看到;有些特殊的操作只能管理员可以操作,其他用户有只读的权限等等

    • 1.IP白名单限制,平台服务只能接受指定IP来源的app发起的请求
    • 2.api限制,指定app只能访问授权访问的api
  • Token缓存

    所以客户端在调用API之前都会访问GetToken方法,所以建议在服务端和客户端都增加缓存。

    • 服务端视角 服务端视角

    • 客户端视角 客户端视角

  • 限流

    如果对访问的次数不加控制,很能会造成API被滥用,甚至被 DDos 攻击。 根据使用者不同的身份对其进行限流,可以防止这些情况,减少服务器的压力。 比如可以设置,用户每个小时允许发送请求的最大值

  • 压测

    • 1.自己写程序,开启多线程发起模拟请求
    • 2.压测工具,如loadrunner

总结

熟悉阿里的童鞋应该知道,阿里有个"大中台,小前台"的思想。俗称"中台战略"。马云希望让前台的一线业务更加敏捷,可以更快速适应瞬息万变的市场,而中台则能够整合整个企业的数据能力和产品技术能力,对各个前台业务员形成强有力的支撑。


参考


微信公众号:码农商业参谋

服务端视角

转载于:https://my.oschina.net/u/2476168/blog/1815482

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
搭建openapi开放平台是为了提供给开发者一种简单、高效的方式来获取和使用公司的数据和服务。对于企业来说,搭建openapi开放平台可以带来许多好处。 首先,搭建openapi开放平台可以吸引更多的开发者加入到生态系统中,从而扩大公司的用户群体。开放平台可以为开发者提供高质量的API文档和开发工具,使得他们能够更快速、更方便地接入和使用公司的数据和服务。这样一来,更多的开发者将对公司的产品产生兴趣,并将其整合到自己的应用中,提高了公司产品的曝光度和用户粘性。 其次,搭建openapi开放平台可以促进合作伙伴关系的建立。通过开放平台,公司可以与各种各样的开发者、第三方应用和服务进行对接,形成生态系统的互通互联。这将为公司提供更多的商业机会,同时也能够增加合作伙伴的收入来源。 再者,搭建openapi开放平台可以加速产品创新和迭代。开放平台可以成为一个创新的实验场,公司可以通过与开发者的合作,获取更多的创意和灵感。开发者可以基于公司的数据和服务,开发出更多有趣、实用的应用和功能,为公司的产品增加新的价值。 最后,搭建openapi开放平台可以提高公司的技术影响力和行业地位。在开放的环境下,公司的技术实力和创新能力将更加突显。通过授权和支持开发者使用公司的API,可以树立公司在技术领域的权威地位,并在行业内树立良好的口碑。 总的来说,搭建openapi开放平台是一项重要的战略举措,能够带来许多商业上的好处,为企业的发展注入新的活力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值