15

我是 API 网关的新手,有一个理解问题。我也尝试在端点后面放置一系列(微)服务。

为此,我设置了一个 ASP.NET Core 应用程序并添加了ThreeMammals Ocelot包。在文档的帮助下,我配置了上游和下游。到现在为止还挺好。

草图

客户端向http://mygateway:4242/s1/ {api} 发出请求,例如,按预期从 Service1 获取 JSON 或 XML 响应。

http://mygateway:4242/s2/ {api} 的行为与预期结果相同!

我的理解问题在于Service3。当我向http://mygateway/s3/发送请求时,我得到 index.html 作为响应。

index.html 本身需要通过链接标签的 CSS 文件“xyz.css”并强制客户端加载文件。

<head>
  <link rel="stylesheet" type="text/css" href="xyz.css">
</head>

在这种情况下,客户端发送到“mygateway”的请求 URL 是http://mygateway:4242/xyz.css而不是 http://mygateway:4242/ s3 /xyz.css 所以响应是 404 not found,因为“mygateway”对“xyz.css”一无所知

如何解决此路由(?)问题?

ocelot中间件是否可以解决这个问题?或者我是否需要 SinglePageApplication (SPA) 的服务 (Service3) 的其他内容?

也许将 SPA 放在网关后面是不可能或错误的?我希望你能给我一些技巧来访问网关后面的 SPA 或 MVC 网站。

感谢 iBot


UPATE:附上 index.html的代码。我认为这是直截了当的。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Title</title>
    <base href="/" />

    <link rel="stylesheet" type="text/css" href="dist/xyz.css">

</head>
<body>
    <div id="appContainer"></div>
    <script src="dist/xyz.js" asp-append-version="true"></script>
</body>
</html>
4

2 回答 2

14

你的架构设计错了!

首先,让我们了解一下这个 API Gateway。

API 网关是位于应用程序编程接口 ( API ) 前面的编程,并充当已定义微服务组的单一入口点。

使用 API 网关的一个主要好处是,它们允许开发人员根据用例以多种方式封装应用程序的内部结构。这是因为,除了容纳直接请求外,网关还可用于调用多个后端服务并聚合结果。

好的,“ API Gateway”这个名字告诉我们它主要是为 API 服务设计的!SPA 或 MVC 应用程序不是后端服务。你不应该把你的前端应用程序放在 api 网关后面。

一般来说,您的架构应该如下所示: 在此处输入图像描述

API 网关是所有客户端的单一入口点。SPA 是您服务的客户端,应该通过 API Gateway 调用它。如果您的应用程序有多个客户端应用程序,那么这可能是识别多个 API 网关类型时的主要枢纽,这样您就可以针对每个客户端应用程序的需求使用不同的外观。这种情况是一种名为“前端后端”(BFF)的模式,其中每个 API 网关都可以提供为每个客户端应用程序类型量身定制的不同 API。

如果您不想构建合适的架构怎么办?

  1. 您可以配置重定向。类似于指定 API 网关的默认服务。然后所有去的客户都http://mygateway:4242/将重定向到 http://mygateway:4242/s3/
  2. Ocelot 允许中间件注入。因此,您可以注入您的自定义中间件,您将在其中检查哪个请求以及将其重定向到何处。
  3. 使用 CDN 存储所有 css 和其他内容。
  4. 将 css 内联到 html 文件中。
于 2018-11-27T20:13:10.033 回答
0

您可以尝试编写<base href="/s3/" />而不是<base href="/" />.

但最好在网关之前使用 SPA 或 MVC。在大多数情况下,这取决于您将如何使用它。例如,如果您喜欢像您的域(例如 Nginx)的代理一样使用它,这是有道理的。

请参阅这篇关于它的好文章

于 2018-11-26T09:32:37.690 回答