Создайте шлюз API с помощью YARP в ASP.NET Core.

автор vadim


Шлюз API предоставляет механизм, с помощью которого компоненты пользовательского интерфейса приложения могут подключаться к серверным службам для обмена данными. В этой статье представлена ​​концепция шлюза API, обсуждаются различия между шлюзом API и обратным прокси-сервером, а также показано, как можно реализовать шлюз API с помощью YARP (еще один обратный прокси) в ASP.NET Core.

В этой статье мы будем использовать микросервисы, созданные в моей предыдущей статье. Чтобы использовать примеры кода, представленные в этой статье, в вашей системе должна быть установлена ​​Visual Studio 2022. Если у вас еще нет копии, вы можете скачать Visual Studio 2022 здесь.

Что такое шлюз API?

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

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

В следующих разделах мы рассмотрим, как реализовать шлюз API с использованием YARP в ASP.NET Core.

Создайте проект веб-API ASP.NET Core в Visual Studio 2022.

Прежде всего давайте создадим проект веб-API ASP.NET Core в Visual Studio 2022. Выполните действия, описанные ниже.

  1. Запустите интегрированную среду разработки Visual Studio 2022.
  2. Нажмите «Создать новый проект».
  3. В окне «Создать новый проект» выберите «ASP.NET Core Web API» из списка отображаемых шаблонов.
  4. Нажмите “Далее.
  5. В окне «Настроить новый проект» укажите имя и местоположение нового проекта.
  6. При желании установите флажок «Поместить решение и проект в один каталог», в зависимости от ваших предпочтений.
  7. Нажмите “Далее.
  8. В следующем окне «Дополнительная информация» оставьте флажок «Использовать контроллеры (снимите флажок, чтобы использовать минимальные API)». В этом проекте мы не будем использовать минимальные API.
  9. В другом месте окна «Дополнительная информация» оставьте для параметра «Тип аутентификации» значение «Нет» (по умолчанию) и убедитесь, что флажки «Включить поддержку Open API», «Настроить HTTPS» и «Включить Docker» остаются снятыми. Мы не будем здесь использовать ни одну из этих функций.
  10. Нажмите Создать.

Мы будем использовать этот проект веб-API ASP.NET Core для реализации шлюза API с YARP в разделах ниже. В частности, мы создадим приложение на основе микросервисов, которое включает шлюз API и три нижестоящие службы.

Установите пакет YARP NuGet.

Затем добавьте пакет YARP NuGet в проект веб-API, который вы только что создали в Visual Studio. Для этого выберите проект в окне обозревателя решений, щелкните правой кнопкой мыши и выберите «Управление пакетами NuGet». В окне диспетчера пакетов NuGet найдите пакет Yarp.ReverseProxy и установите его.

Кроме того, вы можете установить пакет YARP через консоль диспетчера пакетов NuGet, введя строку, показанную ниже.

PM> Install-Package Yarp.ReverseProxy

Настройка YARP в ASP.NET Core

Предполагая, что пакет NuGet Yarp.ReverseProxy успешно установлен в вашем проекте, теперь вам следует настроить YARP в файле Program.cs вашего проекта ASP.NET Core. Вы можете настроить YARP, используя следующий фрагмент кода.

var builder = WebApplication.CreateBuilder(args);
builder.Services
   .AddReverseProxy()
   .LoadFromConfig(builder.Configuration.GetSection("Yarp"));
var app = builder.Build();
app.MapReverseProxy();
app.Run();

Метод AddReverseProxy используется для добавления необходимых сервисов для работы YARP. Метод LoadFromConfig загружает конечные точки и информацию об их маршрутизации из файла конфигурации. Наконец, метод MapReverseProxy добавляет маршруты обратного прокси-сервера в таблицу маршрутизации.

Укажите информацию о маршруте в YARP

YARP использует маршруты и кластеры для указания конфигурации маршрута. В то время как маршруты используются для указания шаблонов запросов, кластеры используются для указания служб, куда должны перенаправляться запросы.

Ниже приведен полный исходный код конфигурации, которую мы будем использовать в этом примере. Как видите, существует три маршрута: маршрут клиентов, маршрут поставщиков и маршрут продуктов.

"Yarp": {
   "Routes": {
      "customers-route": {
         "ClusterId": "customers-cluster",
         "Match": {
            "Path": "/customers/{**catch-all}"
         },
         "Transforms": [ { "PathPattern": "{**catch-all}" } ]
      },
      "suppliers-route": {
         "ClusterId": "suppliers-cluster",
         "Match": {
            "Path": "/suppliers/{**catch-all}"
         },
         "Transforms": [ { "PathPattern": "{**catch-all}" } ]
      },
      "products-route": {
         "ClusterId": "products-cluster",
         "Match": {
            "Path": "/products/{**catch-all}"
         },
         "Transforms": [ { "PathPattern": "{**catch-all}" } ]
      }
   },
   "Clusters": {
      "customers-cluster": {
         "Destinations": {
            "destination1": {
               "Address": "http://localhost:5198/api/customer"
            }
         }
      },
      "suppliers-cluster": {
         "Destinations": {
            "destination1": {
               "Address": "http://localhost:5054/api/supplier"
            }
         }
      },
      "products-cluster": {
         "Destinations": {
            "destination1": {
               "Address": "http://localhost:6982/api/product"
            }
         }
      }
   }
}

Внедрить ограничение скорости

Ограничение скорости — это стратегия, используемая для ограничения количества запросов, которые вашим клиентам API разрешено отправлять к API. Ограничение скорости помогает защитить ваше приложение и снизить нагрузку на ваши API. Вы также можете использовать YARP для реализации ограничения скорости в вашем шлюзе API.

Следующий фрагмент кода иллюстрирует, как можно определить политику ограничения скорости в Yarp.

builder.Services.AddRateLimiter(rateLimiterOptions =>
{
   rateLimiterOptions.AddFixedWindowLimiter("fixed", options =>
   {
      options.Window = TimeSpan.FromSeconds(5);
      options.PermitLimit = 2;
   });
});

Реализация аутентификации и авторизации

Вы можете обеспечить аутентификацию и авторизацию в шлюзе API, используя следующий фрагмент кода в файле Program.cs.

builder.Services.AddAuthorization(options =>
{
   options.AddPolicy("secure", policy =>
   policy.RequireAuthenticatedUser());
});

Затем вам следует вызвать методы UseAuthentication и UseAuthorization, чтобы повысить безопасность конвейера обработки запросов.

app.UseAuthentication();
app.UseAuthorization();
app.MapReverseProxy();

Проверьте шлюз API

Чтобы протестировать шлюз API, который мы создали в этом примере, запустите все четыре приложения, т. е. шлюз API и микросервисы клиентов, поставщиков и продуктов. Теперь запустите Postman и выполните следующую конечную точку.

http://localhost:5198/customers/1

Предполагая, что вы установили точки останова в классе CustomerController, относящиеся к микросервису клиентов, вы увидите, что конечная точка достигнута, как показано на рисунке 1 ниже.

API-шлюз 01 ИДГ

Рисунок 1. Шлюз API в действии!

YARP прост в настройке и использовании. Вы можете узнать больше о YARP и всех его функциях из документации YARP.

Related Posts

Оставить комментарий