API开放常见问题

每个开发人员在工作都会经常涉及各种API,基于这些API实现了形形色色丰富的功能。除了提供给内部其他服务使用的API,越来越多企业以API的方式将特有的数据或能力暴露出去,被其他公司或者最终用户调用,然后根据一定方式进行计费实现企业创收。很多企业在进行API开放时,往往定义了一个签名校验算法后就将API开放出去,并以为万事大吉了。但是经过一段时间却出现了很多意料之外的问题。例如:

  • API提供者无法清晰掌握每个调用方的使用情况。
  • 有些调用方的使用量有时会变得很大,影响API稳定性。
  • 开放的API和调用方逐渐增多,致使有哪些API在开放,谁能调用哪些API的管理变得比较混乱。
  • 有些调用方传参方式总是不对,导致开发同学在联调时花费大把时间。
  • 经常会有一些莫名其妙的流量尝试攻击。

以上的每一个问题都需要花不少时间来解决,搞得API开发的同学苦不堪言。但其实所有成熟公有云提供商都拥有API网关这款产品,且功能大同小异。而当我们在选择API网关的时候,第一位要考虑的就是稳定性、安全性和性能。接着还需要考虑所支持的功能的丰富度、使用的难易程度、使用状况及可观测性等。几乎所有的API网关产品都支持互联网后端地址,不需要一定要把服务部署到公有云上。你的服务可以仍然部署在你的私有云或者其他家公有云,将你的服务地址注册到你选好的云API网关上,用户从API网关作为入口访问你的服务即可,只用非常小的一次性研发投入和一些配置工作。
除了选择公有云服务,也有很多开源项目可供大家选择。从功能的完毕程度来看,Kong是个不错的选择(https://konghq.com/kong/)。如果对nginx+lua插件的方式比较不习惯,喜欢java开发的话则可以使用zuul(https://github.com/Netflix/zuul)或者spring cloud gateway(https://github.com/spring-cloud/spring-cloud-gateway)来进行开发实现。
而下面我们将以京东云API网关为例,看看怎么利用这类产品对API的开放进行加速和各方面的强化。

API管理

清晰的API管理工具和流程能降低API的维护成本,提高开放效率。
京东云API网关以分组和API两级管理API。可以按分组的方式来管理权限,流量,版本,发布,SDK和文档等,同时又可以按API来定义具体的接口细节、后端配置、转换配置。
大部分API网关产品都支持版本和发布环境的概念,这些概念有助于更好的管理即将发布的API。京东云API网关的版本指API定义的变化历史,和git仓库一样,每一次的变化都基于一个已有的版本进行,并且可以针对一个具体的API版本来生成这个版本对应的SDK和文档,然后部署到某个发布环境。京东云API网关预设了测试、预发、线上三个发布环境,用于区分新版本的测试环境和供API调用者使用的生产环境。而要提供新的API,首先需要把API定义出来,再部署到测试环境。部署之后,可以通过API调试界面在页面进行简单调试,也可以下载SDK后编程实现。

权限管理

因为一般会有多个API开放给多个调用方,谁能调用哪些往往需要频繁调整,所以权限管理也是比较麻烦的一个工作。如果把权限相关配置放在API提供方的程序里,将非常不灵活,维护成本也会很高,但是利用API网关就可以实现API实现逻辑与API鉴权逻辑的分离。当鉴权逻辑主要交给API网关来进行后,API的实现就变得更加纯粹。
在鉴权方面,各家API网关产品支持的授权模式都不完全相同。目前,京东云API网关支持的授权模式有订阅密钥、API网关签名和京东云用户签名三种。订阅密钥的方式为在请求头传一个订阅密钥,不仅使用成本低,还能保证中等程度的安全性;签名密钥则会根据用户的AK/SK,利用京东云自定义的加密算法对数据进行传输校验,从而保证很高的准确性和安全性。由于API网关已经做了用户侧的验证,因此API提供方只需要验证其收到的请求是来自于API网关即可。关于验证的方式,国外的API网关产品较多使用客户端证书,而国内的API网关一般采用SecretKey签名的方式,京东云API网关也是采用后端签名的方式进行验证。
而在创建授权的时候,也可以配置访问授权、API分组及发布环境之间的任意绑定关系,使得一个调用者可以只调用某个分组,也可以调用多个分组,还可以限制其只能调用某个分组的线上环境,而测试和预发环境则只允许测试Key进行访问。

流量管理

如果希望给调用者做授权,同时想要保证他按照我们期望的频次来调用。需要对已授权的调用操作进行流控限制时,只需要配置一条流控策略并绑定到对应的API分组上即可。这里配置了两个流控值,即API分组次数限制和单Access Key次数限制。API分组的次数限制用来保护API提供者的后端服务,这个值小于后端服务可支撑的上限即可;单Access Key次数限制用来限制单个API调用者,可以按需设置。

监控和日志

当API被调用了以后,查看调用统计和日志就变得很重要了。在京东云的API网关中,能够看到请求量、失败量和响应时间等。此外,还可以看到API调用的具体日志,从而对API进行安全可控的管理。

除了上述这些丰富的功能,API网关产品还支持各种便利开发过程的功能,例如Mock后端服务。需要开发新功能时,可以在API网关上配置API接口后使用Mock后端发布到测试环境,这样即使后端功能还未开发好,前端以及移动端的开发也可以使用Mock地址来进行开发和联调,大大提升了开发效率。
以京东云API网关为例,我们看到了如何使用API网关产品轻松地对API开放进行加速和强化,从而解决了企业在API开放过程中出现的一系列问题。选择一款合适的API网关产品,将能够带领用户在API经济热潮下快速找到正确的前进方向,为企业赋能,使企业更好的预见未来,拥抱未来!


点击"京东云"了解更多产品信息

欢迎点击“京东云”了解更多精彩内容。

干货 | API开放提升效率和安全性攻略相关推荐

  1. 【干货】Chrome插件(扩展)开发全攻略-转载

    [干货]Chrome插件(扩展)开发全攻略 写在前面 我花了将近一个多月的时间断断续续写下这篇博文,并精心写下完整demo,写博客的辛苦大家懂的,所以转载务必保留出处.本文所有涉及到的大部分代码均在这 ...

  2. 【干货】Chrome插件(扩展)开发全攻略(转载)

    转载来源:https://www.cnblogs.com/liuxianan/p/chrome-plugin-develop.html [干货]Chrome插件(扩展)开发全攻略 写在前面 我花了将近 ...

  3. 【干货】Chrome插件(扩展)开发全攻略(不点进来看看你肯定后悔)转

    [干货]Chrome插件(扩展)开发全攻略(不点进来看看你肯定后悔) 写在前面 我花了将近一个多月的时间断断续续写下这篇博文,并精心写下完整demo,写博客的辛苦大家懂的,所以转载务必保留出处.本文所 ...

  4. 华工计算机网络辅修,【JZT干货】双手献上华工辅修攻略

    原标题:[JZT干货]双手献上华工辅修攻略 辅修进行了一个多月,相信小伙伴们也对辅修有了基本的了解.那么各课程的期末考试是怎样的?一些老师上课有什么特点?想了解吗,团仔在此献上纯干货给大家. 当然啦, ...

  5. php后台对接ios,安卓,API接口设计和实践完全攻略,涨薪必备技能

    2016年12月29日13:45:27  关于接口设计要说的东西很多,可能写一个系列都可以,vsd图都得画很多张,但是由于个人时间和精力有限,所有有些东西后面再补充 说道接口设计第一反应就是restf ...

  6. 【干货】Chrome插件扩展开发全攻略

    作者:小茗同学 https://www.cnblogs.com/liuxianan/p/chrome-plugin-develop.html#!comments 一.写在前面 我花了将近一个多月的时间 ...

  7. 超详干货!Linux 环境变量配置全攻略

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|机器学习实验室 Linux环境变量配置 在自定义安装软件 ...

  8. 必备干货,程序员进阶升级全攻略!

    职场中,我们总是听到这样的抱怨:课程总是偏向理论知识,看不出有什么实际的作用,还不如从工作中的实际出发. 面对有志于程序员这个职业的人群,专业人士给出以下建议: 不乱追新:新书.新技术.新知识,因为基 ...

  9. 中修改环境变量_超详干货!Linux环境变量配置全攻略

    Linux环境变量配置 在自定义安装软件的时候,经常需要配置环境变量,下面列举出各种对环境变量的配置方法. 下面所有例子的环境说明如下: 系统:Ubuntu 14.0 用户名:uusama 需要配置M ...

最新文章

  1. JS 取消冒泡事件 兼容火狐IE
  2. [转]Android蓝牙开发浅谈
  3. Android属性动画 ViewPropertyAnimator
  4. TeraTerm设定(窗体大小,字体字号)保存为默认值
  5. 集成开发环境IDE的概述
  6. Oracle数据库在Nokia
  7. 卡方检验chi-square test
  8. java之mybatis之缓存
  9. php中的钩子理解及应用
  10. 随机生成一串字符串(java)
  11. 51单片机驱动——DS18B20
  12. 简单破解闪电视频转换王
  13. Android手机“核心科技”---Vibrator(马达)驱动分析
  14. 三菱FX3U源码在V10.5的基础上增加了禁止上传功能
  15. matlab中fic算法,基于MatLab的三种群Volterra模型数值求解.pdf
  16. web狗之xxm实体攻击
  17. git版本控制gitosis的安装与使用
  18. Golang zip流式解析器
  19. JAVA学习笔记(6)——接口与多态
  20. 【SVN】新旧服务器更替,完成svn服务器迁移

热门文章

  1. 兼容IE系统,报错SCRIPT1006: 缺少 ‘)‘
  2. [深度学习] 不平衡样本的处理
  3. 一般的在线教育平台需具备哪些功能?
  4. 光伏等战略性新兴产业成为中国经济蓄势前行的新动力
  5. 关注程序员健康之——白天打个盹提高记忆力
  6. matlab halcon,Halcon-Matlab 图像匹配
  7. 填涂颜色(洛谷P1162)
  8. 使用QImage处理图片为黑白
  9. 区块链上的隐私保护——零知识证明
  10. 同一网段下手机无法ping通电脑上的虚拟机