如何将服务暴露给不同的前端?

How do I expose a service to different frontends?

我想为“订单”创建一个微服务。该服务将具有典型的操作,例如“获取订单”或“创建订单”。

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

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

这是正确的方法吗?

我正在使用 AWS Apigateway + Lambda + 无服务器。

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

考虑到这种情况,您的问题的一个标准解决方案是在您的令牌中添加一些内容,以区分用户是否来自支持组。通常,您向令牌添加一个声明,通知 he/she 是支持组的一部分。然后在你的 lambda 中检查这个标记并根据你的要求给出不同的答案。但是对于该解决方案,您需要有办法添加新的 claims/manage 您的身份提供者数据(您的服务中提供用户令牌的用户信息)。

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

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

为了更安全的解决方案,您的 support 端点不得允许来自支持组以外人员的请求。如果您选择查询参数替代方案,则必须在 normal 端点中阻止这个确切的查询参数。有人可以滥用 normal api 为它发送查询参数并获得所有订单,如果你只是将查询参数转发到下游。

您将在 AWS API 网关的集成请求中执行所有这些不同的配置。你可以找到它是如何工作的 here.