Промежуточное ПО ASP.NET Core Api-Gateway - PullRequest
0 голосов
/ 26 ноября 2018

Я новичок в API шлюзах и у меня вопрос понимания.Я тоже пытаюсь поставить ряд (микро) сервисов за конечной точкой.

Для этой цели я установил основное приложение ASP.NET и добавил пакет ThreeMammals Ocelot .С помощью документации я настроил Up- и Downstreams.Пока все хорошо.

sketch

Клиент делает запрос на http://mygateway:4242/s1/{api} и, например, получает ответ JSON или XMLот Service1, как и ожидалось.

То же самое поведение для http://mygateway:4242/s2/{api} с ожидаемым результатом!

Моя проблема понимания с Service3.Когда я отправляю запрос на http://mygateway/s3/,, я получаю index.html в качестве ответа.

Самому index.html требуется CSS-файл 'xyz.css' через link-tag и принудительно запускается клиентзагрузить файл.

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

URL-адрес запроса, который клиент отправляет на «mygateway», в этом случае равен http://mygateway:4242/xyz.css, а не http://mygateway:4242/s3/xyz.css, поэтому ответное сообщение не является 404найдено, так как "mygateway" ничего не знает о "xyz.css"

Как я могу исправить эту проблему маршрутизации (?)?

Возможно ли решить эту проблему с помощью промежуточного программного обеспечения ocelot?Или мне нужно что-то еще для службы (Service3) с SinglePageApplication (SPA)?

Может быть, просто невозможно или неправильно разместить 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>

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Ваш архитектурный дизайн неправильный!

Сначала давайте выясним, что это за API-шлюз.

API-шлюз - это программирование, которое находится перед приложениемпрограммный интерфейс ( API ) и действует как единая точка входа для определенной группы микросервисов.

Основным преимуществом использования шлюзов API является то, что они позволяют разработчикам инкапсулировать внутреннюю структуру приложения несколькими способами, в зависимости от варианта использования.Это связано с тем, что, помимо учета прямых запросов, шлюзы могут использоваться для вызова нескольких внутренних служб и агрегирования результатов.

Хорошо, имя " API Gateway" показывает, чтов основном он предназначен для сервисов API!Приложения SPA или MVC не являются внутренними сервисами.Вы не должны размещать свои приложения перед шлюзом API.

В целом ваша архитектура должна выглядеть следующим образом: enter image description here

Шлюз API - этоединая точка входа для всех клиентов.SPA является клиентом ваших услуг и должен вызывать его через API Gateway.Если ваше приложение имеет несколько клиентских приложений, это может быть основной опорой при определении нескольких типов шлюзов API, так что вы можете иметь различный фасад для нужд каждого клиентского приложения.Этот случай представляет собой шаблон с именем «Backend for Frontend» (BFF) , где каждый шлюз API может предоставлять разные API, адаптированные для каждого типа клиентских приложений.

Что делать, если вы не хотитепостроить правильную архитектуру?

  1. Вы можете настроить перенаправление.Это что-то вроде указания службы по умолчанию шлюза API.Тогда все клиенты, которые переходят на http://mygateway:4242/, будут перенаправлены на http://mygateway:4242/s3/
  2. . Ocelot позволяет Middleware Injection.Таким образом, вы можете внедрить свое пользовательское промежуточное ПО, где вы будете проверять, какой запрос и куда его перенаправить.
  3. Используйте CDN для хранения всего CSS и другого содержимого.
  4. Встроенный CSS в HTML-файлы.
0 голосов
/ 26 ноября 2018

Вы можете попробовать написать <base href="/s3/" /> вместо <base href="/" />.

Но лучше использовать SPA или MVC перед шлюзом.В большинстве случаев это зависит от того, как вы будете его использовать.Например, если вы хотите использовать его как прокси вашего домена (например, Nginx), это имеет смысл.

См. Эту хорошую статью об этом .

...