从0到1自建内部使用的API授权平台竟然那么容易?!

本文涉及的产品
大数据开发治理平台 DataWorks,不限时长
简介: 最近看了一些API的管理平台如API Layer、boomi、Odoo等平台,思考如果自己动手搭建一个API授权平台是否困难,结果透过网上的资源就能搭建起一个简易且可扩展API授权平台,且大部份依赖的功能都可免费体验,此文分享这次搭建的代码跟使用到的工具,希望想要在公司内部建立自用的API授权平台能很快地实现。

大家好,最近看了一些API的管理平台如API LayerboomiOdoo等平台,思考如果自己动手搭建一个API授权平台是否困难,结果透过网上的资源就能搭建起一个简易且可扩展API授权平台,且大部份依赖的功能都可免费体验,下文就来跟大家分享一下这次搭建的代码跟使用到的工具,希望想要在公司内部建立自用的API授权平台能很快地实现。


GitHub代码库: https://github.com/datafe/api-market


Demo


视频链接

image.png



Getting Start


直接动手开始搭建从API上线到用户申请API与调用API。


  1. 依赖的服务及工具


阿里云帐号

申请网址

费用: 免费

DataWorks (包含数据服务)

开通网址

费用: 基础版不限时长免费试用、专业版限时特价体验

阿里云网关

开通网址

费用: 计费说明 (共享实例月累计1千万次调用以下,每万次0.06人民币)

Linux服务器

自建或申请云厂商服务器


DataWorks数据服务功能强大,可基于多种数据引擎 (StarRocks/Hologres/MaxCompute/HBase/OTS/MySQL/PostgreSQL/Snowflake/Redshift) 开发上层API,也能注册已有的API,此文为搭建用户授权平台,为求演示方便,此示例以注册API节点为例,更详细的功能可参考产品操作指南




  1. 准备一个要提供被订阅的API (基于示例演示方便,这边参考免费公开接口,如查询香港当前气候信息)


curl https://data.weather.gov.hk/weatherAPI/opendata/weather.php?dataType=rhrread&lang=en
# {"temperature": {"data":[{"place":"Tsuen Wan Ho Koon","value":20,"unit":"C"}]}}


  1. 打开DataWorks数据服务注册API (建立API之前需要先建立业务流程,新建业务流程需要绑定一个网关分组)



于新建注册API弹框填入以下必填信息,并送出


API 名称: hk_current_weather_info
API Path: /hk_current_weather_info
描述: get Hong Kong current weather info
目标文件夹: 选一个已先建立好的业务流程





建立注册API后,于打开的新节点填入以下信息 (若原API有认证信息,可放置于常量参数,DataWorks数据服务会对外隐藏常量参数)


后台服务 Host: https://data.weather.gov.hk
后台服务 Path: /weatherAPI/opendata/weather.php
请求参数:
参数名 dataType 默认值 rhrread
参数名 lang 默认值 en



点右上角测试按钮 (或按F8),测试成功后,关闭弹框,点右上角提交



提交成功后,自动会打开右侧版本,点发布按钮,发布API成功后,开始建立自建的授权平台



  1. 下载此代码压缩档 (至此GitHub下载product-code.zip) 并解压缩,修改server/OpenApiClient.js的AK信息,AK信息可从阿里云访问控制上获取,而后将代码放置到Linux服务器。



  1. 于Linux服务器安装Node.js(安装参考或参考附录),透过NPM安装Yarn,打指令npm install --global yarn,安装完后透过指令yarn install-server & yarn start即可运行服务,默认接口为3001 (可自行修改server/index.js里的port设定)


npm install --global yarn
yarn install-server & yarn start



看到 express running at http://localhost:3001 即已运行成功


  1. 打开网址后点Go to Register或打开/register注册页,注册一个用户帐号,注册成功后,可以在API网关应用列表看到新增的用户。





  1. 使用新建的用户登录 (密码默认为test,可以在server/index.js里修改)



  1. 登录后,查看上线的APIs,即可看到我们建立的hk_current_weather_info API,点Apply进行申请。申请成功后可在Authorized APIs查看,点Details查看API调用信息。





  1. 点Authorized Info查看调用认证信息,并用curl验证是否可打通


curl'http://fullpath?appCode=yourAppCode'




架构图


首先先介绍一下API平台大概包含几种使用场景:

  • 开发者开发API (测试与版本管理)
  • 管理者管理API (发布与下线)
  • 用户调用API (安全审核)
  • 用户管理API (订阅/退订)


我们这次搭建重点在用户管理API的场景,并会介绍其代码实作细节与运作方式,下面就四个场景分别介绍。


开发者开发API

一开始最重要的是要提供怎样的API出来,且还能让一群开发者共同开发各式各样的APIs,需要有数据源管理、SQL开发、版本管理、测试环境、函数计算等功能,这边我们使用DataWorks数据服务来承担此角色,且开通DataWorks基础版不收取费用。DataWorks数据服务还能注册既有的API,能封装隐藏原认证信息,注册后即可管理 (支持版本管理)。





管理者管理API

针对开发出来的APIs进行上线后的处理,更偏重于计量、日志分析、授权管理、限流等工作,DataWorks数据服务都支持这些重要功能,开通DataWorks基础版不收取费用,再搭配阿里云网关管理,事半功倍。






用户调用API


API上线后,调用的方式可以透过curl指令或Postman进行测试调用,应用里调用可参考各编程语言调用HTTP Request的方法。调用时的认证方式可以参考阿里云网关认证方式



用户管理API




此篇重点实作的部份在上图黄色区域,透过DataWorks数据服务阿里云网关,就能建立起自己的API授权平台,且开通DataWorks基础版不收取费用。(透过阿里云网关能上架API到阿里云API市场,不在本篇讨论范围)

实作介绍


平台使用到Node.js+React来实现。


实现方式


后端实现方式


主要有三个部份:

  • 对接阿里云 (封装AK、Open API)
  • 前端接口 (前端使用、登录态管理)
  • 运行



对接阿里云


生产调用阿里云Open API的客户端(封装了自用AK),AK可从阿里云访问控制上获取,放置服务端环境参数或直接替换下图参数即可。



参考Open API的SDK示例来添加调用实现,如下图的查询已发布API列表,透过上图的阿里云Open API的客户端实例进行调用。




前端接口


使用Express.js运行后端



对外透出接口给前端,并对内调用Open API



建立一个简易的登录态管理 (建议使用Redis或数据库管理)



登录密码此处需要自行实作,目前写定为 test



运行


安装Node.js后,透过NPM安装Yarn,打指令npm install --global yarn,安装完后进入到server文件夹,透过指令yarn & yarn start即可运行服务,默认接口为3001 (可自行修改)


cd server
npm install --global yarn # 若安装过yarn可跳过此步yarn install # 若安装过,可跳过此步yarn start




需先打包完前端生产代码(于client文件夹的dist文件夹)后,于浏览器直接打开http://localhost:3001,就能打开生产环境。


前端实现方式


前端采用React方式实现,透过Vite打包脚本,开发环境后端proxy默认为http://localhost:3001(可修改)



开发代码放置src文件夹里,pages内列出每一页的代码。



登入页面后,这边实现了简单的登入态检查,可统一封装在请求对象里。



开发运行方式为,先安装Node.js,并透过NPM安装Yarn,打指令npm install --global yarn,安装完后进入到client文件夹,打指令yarn & yarn start,即自动打开浏览器 http://localhost:3000/


cd client
npm install --global yarn # 若安装过yarn可跳过此步yarn install # 若安装过,可跳过此步yarn start



打包生产,进入到client文件夹打指令yarn build,即会打包生产代码于dist文件夹。


cd client
npm install --global yarn # 若安装过yarn可跳过此步yarn & yarn build



API市集


此页列出所选地域已上架的线上API(代码于client/src/pages/ApiHome/ApiList/index.tsx),用户可以点Apply进行订阅使用。



点选Apply后即跳出弹框,若有其它计费或特殊流程可于此部骤进行扩展。



地域选单可于client/src/pages/ApiHome/ApiList/index.tsx文档进行修改。



已授权API列表


此页列出用户所有地域有权限使用的线上API(代码于client/src/pages/ApiHome/AuthorizedApiList/index.tsx),用户可以点Remove进行退订。




API详情


在API表格最右侧点Details,即可呼出详情,会列出调用API支持的协议与调用参数信息等,代码可参考client/src/pages/ApiHome/ApiDetails/index.tsx。



API调用认证


代码可参考client/src/pages/ApiHome/AuthorizedInfo/index.tsx。


登录


登录页代码于client/src/pages/Login/index.tsx,可自行修改样式或内容。



注册


登录页代码于client/src/pages/Register/index.tsx,可自行修改样式或内容。



部署


透过云厂商部署一个Node.js服务器可以参考此篇文章,或著自建一个Linux服务器安装Node.js,可以参考官方文档



相关 Open APIs

查询API列表 https://next.api.aliyun.com/api/CloudAPI/2016-07-14/DescribeDeployedApis

建立应用 https://next.api.aliyun.com/api/CloudAPI/2016-07-14/CreateApp

重置应用密钥 https://next.api.aliyun.com/api/CloudAPI/2016-07-14/ResetAppSecret

查询应用密钥 https://next.api.aliyun.com/api/CloudAPI/2016-07-14/DescribeAppSecurity

查询应用列表 https://next.api.aliyun.com/api/CloudAPI/2016-07-14/DescribeAppAttributes

对一个应用授权多个API权限 https://next.api.aliyun.com/api/CloudAPI/2016-07-14/SetApisAuthorities

对一个API授权多个应用权限 https://next.api.aliyun.com/api/CloudAPI/2016-07-14/SetAppsAuthorities

对一个应用撤销多个API权限 https://next.api.aliyun.com/api/CloudAPI/2016-07-14/RemoveApisAuthorities

对一个API撤销多个应用权限 https://next.api.aliyun.com/api/CloudAPI/2016-07-14/RemoveAppsAuthorities


源代码参考

GitHub https://github.com/datafe/api-market


(附) Aliyun ECS + Node.js 部署 (中国区)

此为使用阿里云 ECS 部署此 API 授权平台的步骤


  1. 购买 Aliyun ECS 按量付费,链接


按需购买规格,使用 CentOS,若要对外需加购公网 IPv4 地址。



  1. 修改实例登录密码,链接




  1. 设定安全组访问规则,需要 443,链接



  1. 透过 Workbench 连接实例,参考此链接安装环境,然后安装 Node 版本 v16.16.0。




## 安装完 NVM 后,使用 v16.16.0 版本
nvm use 16.16.0



  1. 透过左侧选单界面上传 product-code.zip 至 /opt。



  1. 安装 unzip 指令,并解压缩 product-code.zip。


cd /opt
yum install unzip -y
unzip product-code.zip -d api-market


  1. 安装 cnpm 取代 npm,参考链接


npm install cnpm -g --registry=https://registry.npmmirror.com
cd /opt/api-market/server
cnpm install


  1. 打开 /opt/api-market/server/index.js,修改伺服器 Port 至 443 (可于左边侧边栏对文档按右键或双击文档,使用编辑器修改内容)。




  1. 阿里云获取主帐号 AK 信息,进入到 /opt/api-market 修改 server/OpenApiClient.js AK 信息。




  1. 运行伺服器。


cd /opt/api-market/server
cnpm start




  1. 安装长驻套件 pm2,让伺服器可以一直运行


cd /opt/api-market/server
cnpm install -g pm2
## 启动
cnpm run pm2-start
## 启动 使用所有CPU核心的集群
cnpm run pm2-start-max
## 停止
cnpm run pm2-stop
## 停止所有
cnpm run pm2-stop-all
## 重启
cnpm run pm2-restart
## 重启所有
cnpm run pm2-restart-all
## 关闭
cnpm run pm2-delete



如网站需要三方公证的 SSL 证书可以至阿里云免费申请,链接





相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
一站式大数据开发治理平台DataWorks初级课程
DataWorks 从 2009 年开始,十ー年里一直支持阿里巴巴集团内部数据中台的建设,2019 年双 11 稳定支撑每日千万级的任务调度。每天阿里巴巴内部有数万名数据和算法工程师正在使用DataWorks,承了阿里巴巴 99%的据业务构建。本课程主要介绍了阿里巴巴大数据技术发展历程与 DataWorks 几大模块的基本能力。 课程目标  通过讲师的详细讲解与实际演示,学员可以一边学习一边进行实际操作,可以深入了解DataWorks各大模块的使用方式和具体功能,让学员对DataWorks数据集成、开发、分析、运维、安全、治理等方面有深刻的了解,加深对阿里云大数据产品体系的理解与认识。 适合人群  企业数据仓库开发人员  大数据平台开发人员  数据分析师  大数据运维人员  对于大数据平台、数据中台产品感兴趣的开发者
目录
相关文章
|
13天前
|
人工智能 Serverless API
AI 绘画平台难开发,难变现?试试 Stable Diffusion API Serverless 版解决方案
AI 绘画平台难开发,难变现?试试 Stable Diffusion API Serverless 版解决方案
|
28天前
|
监控 Java API
JDK 9新特性深度探索:平台日志API和服务
本文将深入探讨JDK 9中引入的平台日志API和服务。这一新特性为Java应用程序提供了更强大、灵活的日志记录功能,帮助开发者更好地监控和诊断应用程序的运行状况。本文将详细介绍平台日志API和服务的特性和优势,以及如何在项目中应用这一新特性来提升应用程序的稳定性和可维护性。
|
1月前
|
数据采集 JSON API
集成电子商务平台:如何通过API获取实时商品数据
在当今的数字时代,电子商务(电商)平台已经成为了购物和销售商品的重要渠道。为了保持竞争力并为客户提供最佳的购物体验,电商平台需要能够实时访问和更新商品数据。这包括价格、库存水平、用户评价和其他相关信息。实现这一目标的关键之一是通过应用程序编程接口(API)集成来自各个供应商的数据。本文将探讨如何使用API来获取实时商品数据,并提供一个简单的Python代码示例来说明如何发出API请求。
|
2月前
|
人工智能 Serverless API
AI 绘画平台难开发,难变现?试试 Stable Diffusion API Serverless 版解决方案
AI 绘画平台难开发,难变现?试试 Stable Diffusion API Serverless 版解决方案
6487 74
|
2月前
|
人工智能 Serverless API
AI 绘画平台难开发,难变现?试试 Stable Diffusion API Serverless 版解决方案
为了帮助用户高效率、低成本应对企业级复杂场景,函数计算团队正式推出 Stable Diffusion API Serverless 版解决方案,通过使用该方案,用户可以充分利用 Stable Diffusion +Serverless 技术优势快速开发上线 AI 绘画应用,期待为广大开发者 AI 绘画创业及变现提供思路。
87181 4
|
2月前
|
API Android开发
对于应用研发平台EMAS中安卓 API 32 收不到 FCM 推送的问题
对于应用研发平台EMAS中安卓 API 32 收不到 FCM 推送的问题
70 3
|
3月前
|
小程序 API 开发者
微信小程序授权登录流程以及应用到的API
微信小程序授权登录流程以及应用到的API
120 0
|
3月前
|
小程序 API
微信小程序登录授权流程及所用API
微信小程序登录授权流程及所用API
166 0
|
3月前
|
搜索推荐 机器人 API
item_get API在未来是否会支持更多的移动设备平台,提供更加便捷的移动购物体验?
随着移动互联网的普及和快速发展,移动购物已经成为消费者购物的主要方式之一。为了满足用户对于便捷、快速、高效的购物体验的需求,电商平台不断优化其移动端功能和服务。item_get API作为电商平台的重要接口之一,已经在PC端为卖家和买家提供了丰富的商品信息获取功能。然而,在移动设备平台上,其支持程度和便捷性还有待提高。本文将探讨item_get API在未来是否会支持更多的移动设备平台,并如何提供更加便捷的移动购物体验。
|
4月前
|
运维 数据可视化 API
利用标签平台创建群组并通过API查询群组数据
Dataphin的标签平台提供了 丰富强大的标签加工能力,支持多种类型标签开发,包括离线、实时等标签可视化加工。基于离线视图、实时视图、行为关系,可通过配置化的方式构建属性类、统计类标签、偏好类标签,以及与已有的标签创建衍生组合标签。通过构建及管理标签,形成良好的标签资产,可供上层的应用及业务系统使用。本文将介绍如何通过Dataphin OpenAPI圈选群组以及群组分页查询服务,让应用系统集成标签平台的标签及群组加工能力,进行群组的圈选、分析及投放。
104 0

相关产品

  • 大数据开发治理平台 DataWorks