GraphQL是新的API网关
Posted IT外包
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GraphQL是新的API网关相关的知识,希望对你有一定的参考价值。
通过使用GraphQL保护您的外部API并减少攻击面
> Source: https://www.forumsys.com/wp-content/uploads/APISM.png
我最近参与的众多项目之一是从头开始构建一个新的应用程序。这是一个大型企业业务应用程序,将有许多前端用户。所需的逻辑和功能量将以该体系结构中的大约50个微服务结束,一些微服务本地部署到云中,而某些则需要托管在OpenShift集群的本地中,这将成为我们与旧数据系统的连接。
该公司之前从未构建过如此多的微服务,也从未将它们引入云中。难题之一已成为如何协调服务网格以确保前端的更改不会破坏应用程序,或者对后端服务的更改不会破坏前端。
我推荐的解决方案:将GraphQL用作企业API网关。
简化部署流程
所有这些API的众多问题之一是,对其中任何一个进行更改都可能最终破坏另一个API。尽管"微服务"应该自力更生,但实际上这仍然意味着响应中缺少数据。
当我们有两个部署了不同服务的平台时,这变得更加复杂。人们将使用不同的CI / CD管道来实现本地OpenShift与云原生Lambda服务。
在GraphQL之前提供我们所有的服务,简化了对这些平台进行协调的需求。你怎么问 好吧,现在我的前端应用程序将只能与一个端点通信。它是用于查询和发布数据的无版本架构,因此我不需要对前端进行更改,因为后端上的某些内容已发生更改。GraphQL端点保持不变,即使后端发生变化也可以继续运行。
> Example CI/CD pipeline for Lambda (Source)
简化安全性
该体系结构提出的另一个主题是如何保护我们的所有服务?我们是否建立了在使用其他服务之前必须先调用确保安全的令牌服务?我们是否为每个服务添加逻辑以确保令牌位于标头中并在各处验证?
再次,我的答案是否定的!使用API网关来管理所有服务可以使您将安全检查/验证向上移动一层。这使开发人员可以专注于开发具有业务价值的事物的功能。它还减少了遍及所有地方重复的膨胀和多余代码。
我们可以使用GraphQL实施几件事来提高安全性:
深度限制
import depthLimit from 'graphql-depth-limit'
import express from 'express'
import graphqlHTTP from 'express-graphql'
import schema from './schema'
const app = express()
app.use('/graphql', graphqlHTTP((req, res) => ({
schema, validationRules: [ depthLimit(10) ]
})))
限速
使用此GraphQL Rate Limit插件,您可以通过三种不同方式(自定义指令graphql-shield或基本速率限制器功能)为查询和突变指定限制。
该插件可让您设置时间窗口和限制。在高度脆弱的变异和查询上设置一个较大的时间窗口,例如登录以及对脆弱程度较低的查询设置较短的限制,将有助于您为合法用户保持良好的体验,并为攻击者带来噩梦。
查询费用限制
app.use( '/graphql', graphqlExpress(req => {
return {
schema, rootValue: null, validationRules: [ costAnalysis({
variables: req.body.variables, maximumCost: 1000,
}), ],
}
}))
新的部署选项
> Source: https://docs.microsoft.com/en-us/azure/devops/migrate/media/phase-rollout-with-rings/phase-rollout-with-rings-pipeline.png?view=azure-devops
没有GraphQL,我将必须非常小心如何版本和更新API。我可以运行多个版本的API,例如/ v1和/ v2,但是我必须确保上游API和前端应用程序对/ v2进行了更新才能退出/ v1。另外,我将必须在同一代码库或容器中同时支持这两种方法,从而使其更易碎,并且容易受到重大更改的影响。使用该GraphQL服务作为代理,我可以推出一个/ v2容器并使两者并排运行。我可以更改GraphQL解析器以指向/ v2,而无需更改代码的前端行。这使部署新功能非常容易!
我还可以为任何服务选择任何部署策略,例如:
· 蓝绿发布
· 金丝雀发布
· 功能标记
> Example Blue/Green Deployment (source)
摘要
目前,开发新的应用程序体系结构的首选是查看微服务模式。所有这些小型服务一起工作,并在API网关后面公开,以便我的前端SPA应用程序可以使用它们向最终用户显示信息。
GraphQL可以减少攻击面,并简化应用程序开发以及服务的实际部署。
图片和内容源自网络分享,若有侵权,请联系删除!
以上是关于GraphQL是新的API网关的主要内容,如果未能解决你的问题,请参考以下文章
使用 Amazon api 网关用 REST API 包装 graphQL(appsync)