api - API 网关是否应该与业务逻辑耦合/分离
问题描述
我们正在尝试在我们的应用程序前面构建一个 API 网关(我们可能会尽快将应用程序拆分为微服务),并且遇到了一些问题。
1 - 不同的 API 类型。
在我们的应用程序中有两种API,大部分都是我们自己使用的(用户登录/注销,新闻添加/删除),我们Self-used API
这里称之为。并且有些 API 会被允许第三方使用,我们Open API
这里称之为。
他们都应该通过网关吗?
2 - 不同的身份验证
自用 API 可能需要用户登录或具有相关权限,Open API 将要求第三方应用获取密钥,我们将使用该密钥来识别和限制请求速率。
各种认证都应该在网关完成吗?如果是,Self-used api 认证是业务相关的,是不是表示这个 api 网关不能被其他应用程序共享?
此外,第三方开发人员将创建他们的应用程序并取回密钥,他们还可以更新/删除应用程序(类似于 Google API 控制台)。
我不确定这是否应该放在网关或其他微服务中。IMO,我更喜欢将这些功能放在一个新的服务中,但是验证和速率限制是在网关中完成的,这意味着对于每个请求,网关都必须通过服务的键来查询用户,速率限制和其他信息,这将使网关与业务再次耦合。
解决方案
有很多方法可以实现 API 网关。您可以将不同的端点与单个 API 网关一起使用。以下是一些相关的链接
Serverless 博客《如何使用 Serverless 在一个 API 域下部署多个微服务》https://serverless.com/blog/api-gateway-multiple-services/
Nginx “你真的需要不同类型的 API 网关吗?(提示:不!)” https://www.nginx.com/blog/do-you-really-need-different-kinds-of-api-gateways-hint -不/
Sentialabs.io “亚马逊 API 网关类型、用例和性能” https://www.sentialabs.io/2018/09/13/API-Gateway-Types-Compared.html
AWS API 网关常见问题https://aws.amazon.com/api-gateway/faqs/
考虑一下您尝试使用您的方法完成的功能类型,以及 API Gateway 将如何帮助您解决这些问题。
推荐阅读
- elasticsearch - 有没有办法在文档中添加字段但从_source中隐藏它,文档也应该被分析和搜索
- android - AsyncTask not getting executed more than one
- unit-testing - Axios 捕获错误请求失败,状态码 404
- c# - 除了验证用户提供的值之外,如何让我的正则表达式路由属性匹配一个空值?
- java - OpenHTMLToPDF:将自定义字体嵌入到由 HTML 创建的 PDF 中
- java - 在 EC/RSA 证书验证期间 Bouncycastle 崩溃
- docker - 无法通过 NodeJS 查询/调用 Hyperledger Fabric Peers(在 docker swarm 网络中)-GRPC/S 截止日期错误
- javascript - 用状态反应条件渲染
- android - 如何在从 firebase 加载数据之前添加进度条,并在使用 firebasercycler 适配器从 firebase 加载数据后关闭此进度条
- javascript - 如何优化我的代码中的条件语句