如何将服务提供给不同的前端?

问题描述

我想为“订单”创建微服务。该服务将执行诸如“获取订单”或“创建订单”之类的典型操作。

我想以两种方式公开此服务:

  • 用户前端:如果您致电/ orders,您将看到您的订单
  • 支持前端:如果致电/ orders,您将看到 all 所有用户的订单

我想部署一个可以从2个API网关(用户和支持)调用的API(订单)。但是,我不知道如何在不复制代码的情况下做到这一点。

这是正确的方法吗?

我正在使用AWS Apigateway + Lambda + Serverless。

解决方法

通过某种方式,您可以区分在lambda函数中发出请求的用户,因为您只需要获取其订单即可。基于此,我考虑到您在lambda中收到某种令牌,可以在其中提取正确的用户。

考虑到这种情况,一种解决问题的标准方法是在令牌中添加一些内容,以区分用户是否来自支持组。通常,您会向令牌添加声明,以告知他/她是支持组的一部分。然后在您的lambda中检查此令牌,然后根据您的要求提供其他答案。但是对于该解决方案,您将需要具有添加新声明/管理身份提供者数据(服务内部提供用户令牌的用户信息)的方法。

但是,使用该解决方案,您会发现一个小问题:如果支持用户必须获得所有订单,而又一刻只能获得其订单,您将找不到实现此目的的简便方法。如果您的需求要求同时为支持用户提供这两种用例,则需要另一种解决方案。

在这种情况下,另一种解决方案是提供两个不同的端点(API网关API)来接触相同的后端lambda。在 normal 端点中,您将请求转发到后端,lambda获取用户的所有订单。在 support 端点中,您可以向请求中添加其他内容(可以是查询参数或http标头)。

为获得更安全的解决方案,您的 support 端点不得允许来自支持小组以外人员的请求。而且,如果您要使用替代查询参数,则必须在 normal 端点中阻止此确切的查询参数。如果您只是向下游转发查询参数,则有人可以滥用 normal api发送查询参数,并获得所有命令。

您将在AWS API Gateway的集成请求中执行所有这些不同的配置。您可以here找到它的工作方式。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...