如何解决如何将服务提供给不同的前端?
我想为“订单”创建微服务。该服务将执行诸如“获取订单”或“创建订单”之类的典型操作。
我想以两种方式公开此服务:
- 用户前端:如果您致电/ 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找到它的工作方式。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。