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

本文涉及的产品
大数据开发治理平台DataWorks,Serverless资源组抵扣包300CU*H
简介: 最近看了一些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 证书可以至阿里云免费申请,链接





相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
一站式大数据开发治理平台DataWorks初级课程
DataWorks 从 2009 年开始,十ー年里一直支持阿里巴巴集团内部数据中台的建设,2019 年双 11 稳定支撑每日千万级的任务调度。每天阿里巴巴内部有数万名数据和算法工程师正在使用DataWorks,承了阿里巴巴 99%的据业务构建。本课程主要介绍了阿里巴巴大数据技术发展历程与 DataWorks 几大模块的基本能力。 课程目标  通过讲师的详细讲解与实际演示,学员可以一边学习一边进行实际操作,可以深入了解DataWorks各大模块的使用方式和具体功能,让学员对DataWorks数据集成、开发、分析、运维、安全、治理等方面有深刻的了解,加深对阿里云大数据产品体系的理解与认识。 适合人群  企业数据仓库开发人员  大数据平台开发人员  数据分析师  大数据运维人员  对于大数据平台、数据中台产品感兴趣的开发者
目录
相关文章
|
3月前
|
JSON 数据挖掘 API
各大电商平台的商品详情数据接口(API接口系列)
各大电商平台的商品详情数据接口(API接口系列)是开发者在构建电商应用或进行数据分析时的重要工具。这些接口允许开发者通过编程方式获取商品的详细信息,如商品ID、标题、价格、库存、属性、描述、图片等。以下是对淘宝、京东、拼多多等电商平台商品详情数据接口的汇总,以及开发者在使用这些接口时需要注意的事项。
各大电商平台的商品详情数据接口(API接口系列)
|
3月前
|
编译器 API Android开发
Android经典实战之Kotlin Multiplatform 中,如何处理不同平台的 API 调用
本文介绍Kotlin Multiplatform (KMP) 中使用 `expect` 和 `actual` 关键字处理多平台API调用的方法。通过共通代码集定义预期API,各平台提供具体实现,编译器确保正确匹配,支持依赖注入、枚举类处理等,实现跨平台代码重用与原生性能。附带示例展示如何定义跨平台函数与类。
100 0
|
1月前
|
API
阿里云短信平台API错误码提示错误天级流控显示小时级错误码
阿里云短信平台API错误码提示错误天级流控显示小时级错误码
|
2月前
|
缓存 测试技术 API
电商平台 API 接入技术要点深度剖析
本文介绍了高效使用电商平台API的关键步骤。首先,深入理解API文档,明确功能权限与参数格式要求;其次,选择合适的接入方式,如HTTP/HTTPS协议和RESTful API;接着,实施身份验证与授权机制,确保数据安全传输;此外,还需关注性能优化、安全防护、监控与日志记录,以提升系统稳定性和响应速度;最后,进行充分测试与调试,并关注API版本更新,确保长期兼容性。
|
2月前
|
JSON 供应链 数据挖掘
抖音商品sku数据接口(Dy.item_sku)丨抖音平台API数据接口指南
抖音商品详情SKU数据接口(Dy.item_sku)由抖音开放平台提供,用于获取商品详细信息,包括名称、价格、图片等。开发者需注册并获取权限,遵循API限制,通过商品ID调用接口,解析JSON格式返回数据。该接口广泛应用于商品展示、库存管理、订单处理及数据分析,助力提升工作效率和用户体验。使用时需遵守平台规则,确保数据安全。
|
3月前
|
Java API 数据中心
百炼平台Java 集成API上传文档到数据中心并添加索引
本文主要演示阿里云百炼产品,如何通过API实现数据中心文档的上传和索引的添加。
|
3月前
|
JSON API 开发者
GET方式请求速卖通平台API 接口:商品列表数据获取指南
速卖通商品列表数据接口(如 `aliexpress.item_search`)让开发者获取商品信息列表, 包括名称、价格等关键数据。接口支持按关键词、分类ID等条件获取商品列表及详细信息, 并可通过分页与排序优化展示效果。开发者需在速卖通开放平台注册并创建应用获取API密钥, 构建HTTP请求并处理JSON响应数据。[体验API](http://b.mrw.so/2Pv6Qu)。
|
3月前
|
API
【Azure API 管理】在 Azure API 管理中使用 OAuth 2.0 授权和 Azure AD 保护 Web API 后端,在请求中携带Token访问后报401的错误
【Azure API 管理】在 Azure API 管理中使用 OAuth 2.0 授权和 Azure AD 保护 Web API 后端,在请求中携带Token访问后报401的错误
|
3月前
|
API 数据安全/隐私保护 网络架构
【Azure Developer】使用Postman获取Azure AD中注册应用程序的授权Token,及为Azure REST API设置Authorization
【Azure Developer】使用Postman获取Azure AD中注册应用程序的授权Token,及为Azure REST API设置Authorization
|
3月前
|
缓存 测试技术 API
电商平台 API 接入技术要点深度剖析
这段内容详述了电商API接入的关键步骤:首先,深入了解API文档以明确功能权限及数据格式;其次,选择恰当的接入方式如RESTful API或RPC;接着实施身份验证与授权保障数据安全;处理数据传输与异常情况;利用缓存和并发提升性能;采用加密手段和限流策略加强安全防护;持续监控API状态并记录日志;最后,通过充分测试确保稳定性和进行版本管理以适应API迭代。

热门文章

最新文章