从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数据集成、开发、分析、运维、安全、治理等方面有深刻的了解,加深对阿里云大数据产品体系的理解与认识。 适合人群  企业数据仓库开发人员  大数据平台开发人员  数据分析师  大数据运维人员  对于大数据平台、数据中台产品感兴趣的开发者
目录
相关文章
|
2月前
|
小程序 前端开发 JavaScript
视觉智能平台常见问题之抠人脸的api如何解决
视觉智能平台是利用机器学习和图像处理技术,提供图像识别、视频分析等智能视觉服务的平台;本合集针对该平台在使用中遇到的常见问题进行了收集和解答,以帮助开发者和企业用户在整合和部署视觉智能解决方案时,能够更快地定位问题并找到有效的解决策略。
31 3
|
2天前
|
机器学习/深度学习 人工智能 API
人工智能平台PAI产品使用合集之机器学习PAI-EAS部署好后,服务的公网API和URL怎么配置
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
2月前
|
搜索推荐 API
Email API Service平台有哪些?3大API接口平台对比
本文对比了三个Email API Service:AokSend、Mailgun和Postmark。AokSend提供高效邮件服务,其API适用于营销和通知邮件;Mailgun的API灵活强大,支持多种语言;Postmark专注于Transactional邮件,API设计简洁。每个平台都提供详尽的文档和支持,用户可根据需求选择。
|
2月前
|
机器学习/深度学习 API 计算机视觉
视觉智能平台常见问题之获取人脸皮肤的颜色Api如何解决
视觉智能平台是利用机器学习和图像处理技术,提供图像识别、视频分析等智能视觉服务的平台;本合集针对该平台在使用中遇到的常见问题进行了收集和解答,以帮助开发者和企业用户在整合和部署视觉智能解决方案时,能够更快地定位问题并找到有效的解决策略。
19 0
|
2月前
|
数据采集 供应链 前端开发
电商企业如何构建一站式数字化供应链体系|API接口实现淘宝/京东/1688多平台商品采集+上传一站式供应链系统搭建
网络时代,企业面临转型。如今进入数字化时代,企业再次面临重大变革,全面实现数字化、智能化已是当务之急。公司将继续良性发展,请记住16个字:精简流程、降低成本、提高效率、智慧管理。主流电商平台API商品数据采集接口,不但可以在商品采集上为供应链提供大量商品,同时我们也可以通过申请官方商品上传商品发布API接口,实现商品的多平台发布。
|
2月前
|
API 开发者
1688阿里巴巴中国站平台 API接口获取商品详情 接入文档说明
1688(阿里巴巴批发网)的API接入文档是专为开发者提供的,用于指导如何集成和使用1688平台提供的API接口。这些API接口可以帮助开发者实现各种功能,如商品搜索、订单管理、用户认证等。
|
3月前
|
人工智能 Serverless API
AI 绘画平台难开发,难变现?试试 Stable Diffusion API Serverless 版解决方案
AI 绘画平台难开发,难变现?试试 Stable Diffusion API Serverless 版解决方案
|
3月前
|
监控 Java API
JDK 9新特性深度探索:平台日志API和服务
本文将深入探讨JDK 9中引入的平台日志API和服务。这一新特性为Java应用程序提供了更强大、灵活的日志记录功能,帮助开发者更好地监控和诊断应用程序的运行状况。本文将详细介绍平台日志API和服务的特性和优势,以及如何在项目中应用这一新特性来提升应用程序的稳定性和可维护性。
|
3月前
|
数据采集 JSON API
集成电子商务平台:如何通过API获取实时商品数据
在当今的数字时代,电子商务(电商)平台已经成为了购物和销售商品的重要渠道。为了保持竞争力并为客户提供最佳的购物体验,电商平台需要能够实时访问和更新商品数据。这包括价格、库存水平、用户评价和其他相关信息。实现这一目标的关键之一是通过应用程序编程接口(API)集成来自各个供应商的数据。本文将探讨如何使用API来获取实时商品数据,并提供一个简单的Python代码示例来说明如何发出API请求。
|
4月前
|
人工智能 Serverless API
AI 绘画平台难开发,难变现?试试 Stable Diffusion API Serverless 版解决方案
AI 绘画平台难开发,难变现?试试 Stable Diffusion API Serverless 版解决方案
7766 132

热门文章

最新文章

  • 1
    DataWorks操作报错合集之DataWorksUDF 报错:evaluate for user defined function xxx cannot be loaded from any resources,该怎么处理
    17
  • 2
    DataWorks操作报错合集之DataWorks任务异常 报错: GET_GROUP_SLOT_EXCEPTION 该怎么处理
    11
  • 3
    DataWorks操作报错合集之在DataWorks中,任务流在调度时间到达时停止运行,是什么原因导致的
    15
  • 4
    DataWorks操作报错合集之DataWorks ODPS数据同步后,timesramp遇到时区问题,解决方法是什么
    13
  • 5
    DataWorks操作报错合集之DataWorks配置参数在开发环境进行调度,参数解析不出来,收到了 "Table does not exist" 的错误,该怎么处理
    11
  • 6
    DataWorks操作报错合集之DataWorks中udf开发完后,本地和在MaxCompute的工作区可以执行函数查询,但是在datawork里报错FAILED: ODPS-0130071:[2,5],是什么原因
    11
  • 7
    DataWorks操作报错合集之DataWorks提交失败: 提交节点的源码内容到TSP(代码库)失败:"skynet_packageid is null,该怎么解决
    12
  • 8
    DataWorks操作报错合集之DataWorks集成实例绑定到同一个vpc下面,也添加了RDS的IP白名单报错:数据源配置有误,请检查,该怎么处理
    8
  • 9
    DataWorks操作报错合集之DataWorks在同步mysql时报错Code:[Framework-02],mysql里面有个json类型字段,是什么原因导致的
    11
  • 10
    DataWorks操作报错合集之在 DataWorks 中运行了一个 Hologres 表的任务并完成了执行,但是在 Hologres 表中没有看到数据,该怎么解决
    10