API开放平台网关需要做什么?
首发于公众号:BiggerBoy
欢迎关注,查看更多技术文章
怎么搭建API开放平台网关?
API的全称是应用编程接口(Application Programming Interface),这并不是一个新概念,在计算机操作系统出现的早期就已经存在了。在互联网时代,把网站的服务封装成一系列计算机易识别的数据接口开放出去,供第三方开发者使用,这种行为就叫做开放网站的API,与之对应的,所开放的API就被称作openAPI。
如果要将API开放出去提供给外部第三方调用,需要考虑些什么?如何搭建这样的系统呢?今天就来分析一下吧。
既然是开放平台,那么接口也就是开放给所有人。这里的所有人并不是谁都可以来调,至少需要在开放平台注册,是平台合法用户,然后注册应用,平台给你颁发一套appId和appSecert,请求时用来认证是不是合法用户。这是最基本的。
开放平台API处理流程为:安全校验、身份认证、鉴权、流控、加解密、基本参数检验,调用业务服务接口,结果包装,异常码转换,返回数据。
安全校验包括什么 ?
请求防重放
IP黑名单拦截
IP白名单放行
请求重放
也叫重放攻击,指同一次请求再次发送到服务器。特指请求被不怀好意的人截获,再次发送给服务器进行重放攻击。
怎么预防?
1.请求参数加时间戳
每次发请求带上时间戳timestamp,服务端检验该字段值与服务器当前时间比较误差超过一分钟则拒绝请求。因为请求从发送,到服务端接收,有一定的时间差,大概不会超过一分钟吧!至于客户端服器时间与平台后端服务器时间不一致问题,服务端可以开放一个查询接口供客户端查询当前时间。
加时间戳能有效防止一部分重放,毕竟有60秒的窗口期,请求都认为有效。这部分重放怎么拦截?将请求的时间戳保存下来,校验存在认为重复请求,则拒绝。即便这样还是有两个问题:
①如果每次请求的时间戳都保存,对服务器来说是一笔很大的开销。
②另外,timestamp参数很容易被发现是时间戳,伪造者也可以每次生成新的。
2.请求参数加nonce
基于以上两个漏洞,再增加一个参数nonce,参数值为随机数,具有唯一性。作为每次请求的唯一标识,参与生成签名sign,平台同样将nonce参数参与生成签名,并与客户端上送的签名sign值进行对比。因为nonce参数参与签名,即便被修改了,也无法通过校验。并且每次只需要存60秒的timestamp即可,大大减少了服务器开销。完美解决上述两个问题。
IP黑名单拦截
系统应对请求方的IP合法性进行校验,将认为存在不合法行为(单位时间内频繁请求、请求频繁报错,所以公司需要有相应的风控系统监测体系)的IP纳入到黑名单IP集合中。
身份认证
前面提到要颁发appId、appSecret,这一步就来检验。
用户调认证接口,传appId和appSecret,平台校验成功后生成token,过期时间设置为20分钟(可根据自身业务调整),返回给用户。用户保存token,请求其它业务接口时传appId和token,平台校验token合法性,校验通过则放行。
token过期则需要用户重新获取新的token,并使用新的token调用业务接口。如果使业务不中断(中断是指,调用业务接口时告知token过期)那么用户需要定时更新token,例如每18分钟定时获取一次。
鉴权
不同的用户可以开通不同的接口调用范围(如某些用户只能调A业务相关的API,某些用户只能调B业务相关的API)。
每个接口都有一个开关设置能否调用(平台在内管系统可操作)
系统级别的API开关(某些情况下关闭API对外开放能力)
不同用户状态下的接口调用范围的控制(审核中、已注销、用户违规被封禁、被冻结等)
流控
流控是非常重要的一环,流控能有效保护系统。可以根据自身业务,服务器性能实现不同级别的流控,从不同纬度、不同粒度限流。例如:接口级别 、用户级别 、系统级别,通常限制每秒调用量。
还有根据是普通用户还是会员,限制调用量,如普通试用版用户,调用量限制每天20次,会员则每天1000次或者不限制。
还有根据调用次数计费的模式,这应该不属于流控的范畴了,属于业务模式。
压测
上面讲了流控,但流控的阈值并不是拍脑门就定下来的,而是经过实际的线上环境的压测得出的。当前线上服务能支撑多大并发,峰值是多少,都要提前进行评估。要不然你写个1000QPS结果你的服务根本达不到,那不是坑人的吗?接入方以为你们闹着玩呢,瞎写。
另外,还要在接入方接入之前,充分了解接入方的流量,因为你们提供的QPS阈值,可能是针对所有接入方一起限制的。结果来了一个浏览很大的接入方,比如12306,那不就把你们系统搞挂了吗,而且接入方还会觉得你们系统不行,三天两头搞挂了,还会跟你们合作嘛。
所以压测是很必要的,针对接入方的流量,考虑是否能支撑,是否需要加配置加机器等等。
加解密
即使使用https接口,有一些行业(例如,银行,金融,军事,政府之类的)还是希望能用自己的方式对数据(特别是敏感数据)加密。
加密分为对称加密和非对称加密,对称加密简单理解就是加密的密文可以通过一定的手段解密,非对称加密就是加密的密文无法解密。
统一规范
api开放平台作为对外开放的大门,很多东西需要统一。
例如,异常码,数据参数名称,接口名称。api平台作为业务系统一般不保存业务数据,即数据源来自于底层的各种服务,如商品服务,订单服务,库存服务等,api平台对外开放的接口往往需要通过调用多个服务的接口,但是,多个服务之间的开发规范可能不一样,定义的异常码,参数名等不尽相同。
因此api平台需要对外统一口径,对各个服务返回的异常码,参数名进行包装。如商品服务定义的参数错误异常码为100203,订单服务定的参数错误的异常码为200100,如果api平台仅做透传,不对数据处理,那么对外的表现就是一种异常对应两个异常码,显得不专业。
以上考虑的并不是非常全面,目前想到的就这些,以后还会补充完善。
如果觉得本文章有用,记得点赞转发,感谢支持~

往期文章推荐
API开放平台网关需要做什么?的更多相关文章
- 新浪微博API开放平台进行程序开发第一步(java)
申请开发者权限步骤: 1.登录sina微博,点击“应用” 2.点击“微博开发平台 我也要做开发者” 3.点击“我的应用”,填写“开发者信息” 4.点击“创建应用”,就是你将要开发的微博应用程序,可以是 ...
- API开放平台基于accessToken实现
A企业和B企业要进行合作时,A要开放api接口给B调用,这时候A可以采用基于accessToken的方式实现开放api接口 数据库表设计 B调用方式 B企业调用接口前先获取accessToken ht ...
- API开放平台接口设计-------基于OAuth2.0协议方式
1,简介OAuth http://www.ruanyifeng.com/blog/2019/04/oauth_design.html OAuth 是什么? http://www.ruanyifeng. ...
- API开放平台接口设计-------令牌方式
1.需求:现在A公司与B公司进行合作,B公司需要调用A公司开放的外网接口获取数据,如何保证外网开放接口的安全性? 2,使用令牌方式 比如支付宝对外提供支付的接口,爱乐生公司需要调用支付宝的接口.在爱乐 ...
- 互联网开放平台API安全设计
互联网开放平台设计1.需求:现在A公司与B公司进行合作,B公司需要调用A公司开放的外网接口获取数据,如何保证外网开放接口的安全性.2.常用解决办法:2.1 使用加签名方式,防止篡改数据2.2 使用Ht ...
- 用友云开放平台之API网关
本文介绍选择API网关应考虑的几方面内容,API网关在微服务框架中的作用,API网关如何选型,用友云开放平台的API网关可以做什么. 随着互联网的快速发展,当前已步入移动互联.物联网时代.企业内部系统 ...
- 微博开放平台api使用
前言:微博开放平台提供了微博数据的api接口,不仅可以直接通过api调用微博服务发布微博查询微博,更重要的是,可以在自己的网站上获得新浪微博api的授权,调用微博的某些内容,就好像我们再网站中看到好文 ...
- 各开放平台API接口通用 SDK 前言
最近两年一直在做API接口相关的工作,在平时工作中以及网上看到很多刚接触API接口调用的新人一开始会感到很不适应,包括自己刚开始做API接口调用的相关工作时,也是比较抓狂的,所有写一序列文章把之前的工 ...
- 各开放平台API接口通用SDK序列文章 前言
最近两年一直在做API接口相关的工作,在平时工作中以及网上看到很多刚接触API接口调用的新人一开始会感到很不适应,要看的文档一大堆,自己要调用的接口找不着,或都找着了不知道怎么去调用,记得包括自己刚开 ...
- 如何使用OLAMI自然语言理解开放平台API制作自己的智能对话助手小程序
我们经常在电影中看到机器和人对答如流,随着越来越多自然语言开放平台的出现,IT爱好者制作一个自己的APP或者小玩具等逐渐可以变为现实. 自然语言对话即你的APP或者你制作的工具.机器人等能够对用户输入 ...
随机推荐
- windows11使用pycharm连接wsl2开发基于poetry的python项目
windows11使用pycharm连接wsl2开发基于poetry的python项目 背景:公司开发的python项目用到了某个只提供了Linux版本的包,遂研究了一番如何在windows环境下进行 ...
- Diary & Note - 两个惊喜
我们有单位根反演: \[\sum_{k\mid n}[x^n]f(x)=\frac{1}{k}\sum_{i=0}^{k-1}f(\omega_k^i). \] 我们有 CRT: \[x\equi ...
- Docker npm install:npm ERR! code UNABLE_TO_GET_ISSUER_CERT_LOCALLY 。。reason: unable to get local issuer certificate 解决办法
这个是需要证书导致无法连接,临时解决办法是设置 npm set strict-ssl=false 在 Dockerfile文件里的 RUN npm install 之前添加 RUN npm set ...
- 多线程的创建方式一:继承于Thread类
* 多线程的创建,方式一:继承于Thread类* 1. 创建一个继承于Thread类的子类* 2. 重写Thread类的run() --> 将此线程执行的操作声明在run()中* 3. 创建Th ...
- SQL查询语句中for update使用注意事项
1.join查询语句中,适用的情况下,尽量使用of关键字对必要的表上锁,而不是锁定所有表的相关行. 上述代码是在门诊医嘱签名时,为了处方签名重复操作,在签名修改数据前对涉及医嘱行进行上锁处理,for ...
- Clickhouse常见异常
一.异常 1)DB::Exception: Nested type Array(String) cannot be inside Nullable type (version 20.4.6.53 (o ...
- C盘扩展卷碰到的那些事-->不是同一块物理磁盘操作扩展卷是有坑的
自己电脑上面用过win10系统资源管理器扩展卷的功能,用过几次都成功扩容了磁盘空间,简单说一下原理: 就是将剩余未分配的磁盘空间划给要扩展的磁盘. 这天公司的电脑C盘老是红色提示空间不足,那就扩充容量 ...
- mybatis之日志配置
1.在mybatis-config.xml中配置 <!-- 指定 MyBatis 所用日志的具体实现,未指定时将自动查找. SLF4J | LOG4J | LOG4J2 | JDK_LOGGIN ...
- 如何在啥也不懂的情况下将你的公众号接入DeepSeek或其它大模型
如何在啥也不懂的情况下将你的公众号接入DeepSeek或其它大模型 前言 最近国产大模型的"顶流"DeepSeek可谓是红得发紫,朋友圈刷屏的AI神回复.公众号爆款推文,都少不了它 ...
- AI探索:通过宏脚本给小众编辑器EverEdit插上AI的翅膀!
1 AI探索:通过宏脚本给小众编辑器EverEdit插上AI的翅膀! 1.1 背景 在AI编程大行其道的背景下,各种AI编程工具:Cursor.VSCode的各种插件.Trae等等搞得不亦乐乎!您 ...