介绍InterSystems API Manager

最近,我们发布了InterSystems API Manager(IAM),它是InterSystems IRIS数据平台的新组件,可为IT基础架构内的Web API提供监视,控制和流量控制。


在本文中,我将向您展示如何配置IAM,并演示IAM可用的许多功能。 InterSystems API Manager允许您:


  • 观看API,了解谁在使用API​​,哪些API最受欢迎,哪些需要改进。
  • 控制谁使用API​​,并根据要求将API的使用范围从简单的访问限制限制为限制-您具有可自定义的控件,并且可以快速响应API使用模式的变化。
  • 使用集中式安全性机制(例如OAuth2.0,LDAP或密钥令牌身份验证)保护API。
  • 通过为开发人员打开特殊的门户,简化第三方开发人员的工作,并为他们提供出色的API体验。
  • 扩展API并确保最小的响应延迟。

API的管理对于过渡到SOA或微服务体系结构是必要的,从而简化了各个(微)服务之间的集成,使所有外部和内部使用者都可以访问它们。 结果,新的API变得更易于创建,维护和使用。


如果您已经在使用InterSystems IRIS,则可以将IAM选项添加到许可证中。 IAM选项对于InterSystems IRIS客户是免费的,但是要开始使用IAM,您需要从InterSystems请求新的许可证密钥。


如果您尚未使用InterSystems IRIS,并且仅打算试用InterSystems API Manager,请与InterSystems联系。


入门和安装


InterSystems IAM客户可以从WRC站点下载“软件分发”部分,并将其作为Docker容器运行。 最低系统要求:



最初,您需要下载Docker映像(重要!带有WRC的存档不是Docker映像,您需要在Docker映像内将其解压缩):


docker load -i iam_image.tar 

此命令将使IAM映像可供以后在服务器上使用。 IAM是一个单独的容器,因此您可以独立于InterSystems IRIS进行缩放。 要运行IAM,您需要访问InterSystems IRIS以下载许可证。


配置InterSystems IRIS:


  • 开启网路应用程式/api/IAM
  • 启用IAM用户
  • 更改IAM用户密码

现在运行IAM容器。 在档案中,您将找到Windows和Unix(以及Mac)的iam-setup脚本。 这些脚本将帮助您正确设置环境变量,从而允许IAM容器连接到InterSystems IRIS。 这是Mac上脚本的示例:


 source ./iam-setup.sh Welcome to the InterSystems IRIS and InterSystems API Manager (IAM) setup script. This script sets the ISC_IRIS_URL environment variable that is used by the IAM container to get the IAM license key from InterSystems IRIS. Enter the full image repository, name and tag for your IAM docker image: intersystems/iam:0.34-1-1 Enter the IP address for your InterSystems IRIS instance. The IP address has to be accessible from within the IAM container, therefore, do not use "localhost" or "127.0.0.1" if IRIS is running on your local machine. Instead use the public IP address of your local machine. If IRIS is running in a container, use the public IP address of the host environment, not the IP address of the IRIS container. xxx.xxx.xxx.xxx Enter the web server port for your InterSystems IRIS instance: 52773 Enter the password for the IAM user for your InterSystems IRIS instance: Re-enter your password: Your inputs are: Full image repository, name and tag for your IAM docker image: intersystems/iam:0.34-1-1 IP address for your InterSystems IRIS instance: xxx.xxx.xxx.xxx Web server port for your InterSystems IRIS instance: 52773 Would you like to continue with these inputs (y/n)? y Getting IAM license using your inputs... Successfully got IAM license! The ISC_IRIS_URL environment variable was set to: http://IAM:****************@xxx.xxx.xxx.xxx:52773/api/iam/license WARNING: The environment variable is set for this shell only! To start the services, run the following command in the top level directory: docker-compose up -d To stop the services, run the following command in the top level directory: docker-compose down URL for the IAM Manager portal: http://localhost:8002 

如您所见,IAM用户的完整映像名称,IP地址,InterSystems IRIS端口和密码就是开始所需要的。


您可以手动设置环境变量,而不是运行脚本:


 ISC_IAM_IMAGE=intersystems/iam:0.34-1-1 ISC_IRIS_URL=http://IAM:<PASS>@<IP>:<PORT>/api/iam/license 

发射


现在,通过运行以下命令来运行IAM:


 docker-compose up -d 

此命令组织IAM容器并确保正确启动所有内容。 使用以下命令检查容器的状态:


 docker ps 

在浏览器中打开localhost:8002管理界面。



到目前为止,它是空的,因为它是一个全新的网站。 让我们改变它。 IAM支持将API分为模块和/或团队的工作区的概念。 转到我们将用于实验的“默认”工作区。


默认工作区工具栏


该工作空间的请求数量仍然为零,但是您将在左侧菜单中了解IAM的基本概念。 前两个元素:服务和路由是最重要的:


  • 服务-我们希望向消费者提供访问权限的API。 因此,如果要使用InterSystems IRIS中的REST API,则它是一种服务,例如Google API。
  • 路由决定应将传入请求重定向到哪个服务。 每个路由都有一组特定的条件,如果满足,则将请求发送到相应的服务。 例如,路由可能与IP,发送者的域,HTTP方法,URI的一部分或这些示例的组合匹配。

服务专区


让我们创建具有以下值的InterSystems IRIS服务:


领域价值内容描述
虹膜服务名称
主持人知识产权InterSystems IRIS服务器主机或IP
港口52773InterSystems IRIS服务器Web端口
路径/ api /工作室根路径
协议http协议书

默认保留其余值。 单击Create按钮,并记下创建的服务的ID。


路线


现在让我们创建一条路线:


领域价值内容描述
路径/ api /工作室根路径
协议http协议书
service.idguid从3服务(上一步的ID)

默认保留其余值。 单击Create按钮,并记下创建的路线的ID。 默认情况下,IAM在端口8000上侦听传入的请求。现在,发送到http://localhost:8000并以/api/atelier开头的请求将重定向到InterSystems IRIS。


测试中


让我们尝试在REST客户端中创建一个请求(我使用Postman )。


邮递员中的REST请求


我们将GET请求发送到http://localhost:8000/api/atelier/ (不要忘了/最后),并从InterSystems IRIS获得响应。 每个请求都会通过一个IAM来收集指标:


  • HTTP状态代码。
  • 延误
  • 监视(如果已配置)。

我又提出了几个请求(包括对不存在的端点的两个请求,例如/ api / atelier / est /),结果在仪表板上立即可见:


带有一些指标的仪表板


使用插件


既然已经配置了Route,就可以控制我们的API。 我们可以添加补充我们服务的功能。


更改API行为的最常见方法是添加插件。 插件隔离各个功能,并且可以全局连接到IAM,并且只能连接到单个实体,例如用户(用户组),服务或路由。 我们将从在路线中添加“ Rate Limiting”插件开始。 为了在插件和路由之间建立连接,我们需要路由的唯一标识符(ID)。


要求限制


点击左侧栏中菜单中的插件。 您会在此屏幕上看到所有活动的插件,但是由于此IAM服务器是新的,因此尚无活动的插件。 因此,通过单击“新插件”继续进行下一步。


我们需要的插件位于“流量控制”类别中,称为“速率限制”。 选择它。 您可以在此处设置很多设置,但是我们只关心两个字段:


领域价值内容描述
route_id编号路线编号
config.minute5每分钟的请求数

仅此而已。 该插件已配置并处于活动状态。 我注意到我们可以选择不同的时间间隔,例如分钟,小时或天。 可以组合设置(例如,每小时1000个请求,同时每分钟100个请求)。 我选择了分钟,因为这很容易检查插件。


如果您再次将相同的请求发送给Postman,您将看到返回的响应包含两个额外的标头:


  • XRateLimit-Limit分钟:5
  • XRateLimit剩余分钟数:4

这告诉客户,他每分钟最多可以发出5个请求,并且在当前时间间隔内,他可以发出另外4个请求。


限速


如果您一次又一次地发出相同的请求,最后您将用尽可用配额,而将收到带有以下响应正文的HTTP状态代码429:


超出API


请稍等,您将能够再次发送请求。


这是一种方便的机制,可让您执行以下操作:


  • 保护后端免受负载浪涌的影响。
  • 告诉客户他们可以提出多少个要求。
  • 通过API获利。

您可以为不同的时间间隔设置值,从而在一定时间内平滑API流量。 假设您在特定路由上每小时允许600个请求。 每分钟平均有10个请求。 但是没有什么可以阻止客户在小时的第一分钟内完成所有600个请求。 也许这就是您所需要的。 您可能希望在一小时内达到更均匀的负载。 通过将config.minute字段的值设置为20,可以保证用户每分钟发出的请求不超过20个,每小时发出的请求不超过600个。 与每分钟10个请求的完全平均流相比,这允许在分钟间隔内进行较小的跳跃,但是用户不能在1分钟内使用每小时配额。 现在,他们至少需要30分钟才能使用所有查询。 在每个给定的时间间隔内,客户端将收到其他标头,例如:


HTTP头价值
X-RateLimit-Limit小时600
X-RateLimit剩余时间595
X-RateLimit-Limit分钟20
X-RateLimit剩余分钟16

当然,根据您要实现的目标,有很多不同的方法来自定义查询限制。


结论


这是我要结束的地方,我认为有关第一本有关InterSystems API Manager的文章的材料已经足够了。 我们只使用了40多个插件中的一个。 您可以使用IAM做更多有趣的事情:


  • 为您的所有API添加中央身份验证机制。
  • 使用平衡器将负载扩展到多个服务。
  • 在全面升级之前,为测试对象添加新功能和错误修复。
  • 为内部和外部开发人员提供记录所有API的专用Web门户。
  • 缓存请求以减少响应延迟并减少系统后端负载。

参考文献


Source: https://habr.com/ru/post/zh-CN475670/


All Articles