Как я могу агрегировать запросы в Ocelot API Gateway?

У меня две конечные точки: Localhost: 5001 / api / packages? Storeid = {id} Localhost: 5002 / api / store / {id}

Как я могу их объединить с помощью Ocelot API Gateway?

у меня в настоящее время есть это:

    {
      "RouteKeys": [
        "Business",
        "Packages"
      ],
      "UpstreamPathTemplate": "/test"
    }
  ],

Но я не знаю, как это работает, когда одна конечная точка использует '/ {id}', а другая - '? Store = {id}'

Ниже представлена ​​моя полная конфигурация Ocelot:

  //Routing
  "Routes": [
    //Packages API with downroute
    {
      "DownstreamPathTemplate": "/api/Packages/{everything}",
      "DownstreamScheme": "https",
      "DownstreamHostAndPorts": [
        {
          "Host": "localhost",
          "Port": "5001"
        }
      ],
      "UpstreamPathTemplate": "/api/Packages/{everything}",
      "Key": "PackagesDownroute"
    },
    //Packages API
    {
      "DownstreamPathTemplate": "/api/Packages",
      "DownstreamScheme": "https",
      "DownstreamHostAndPorts": [
        {
          "Host": "localhost",
          "Port": "5001"
        }
      ],
      "UpstreamPathTemplate": "/api/Packages",
      "Key": "Packages"
    },
    //Orders API
    {
      "DownstreamPathTemplate": "/api/Orders/{everything}",
      "DownstreamScheme": "https",
      "DownstreamHostAndPorts": [
        {
          "Host": "localhost",
          "Port": "5002"
        }
      ],
      "UpstreamPathTemplate": "/api/Orders/{everything}"

    },

    //Business API with downroute
    {
      "DownstreamPathTemplate": "/api/Business/{everything}",
      "DownstreamScheme": "https",
      "DownstreamHostAndPorts": [
        {
          "Host": "localhost",
          "Port": "5003"
        }
      ],
      "UpstreamPathTemplate": "/api/Business/{everything}",
      "Key": "BusinessDownroute"
    },
    //Business API
    {
      "DownstreamPathTemplate": "/api/Business",
      "DownstreamScheme": "https",
      "DownstreamHostAndPorts": [
        {
          "Host": "localhost",
          "Port": "5003"
        }
      ],
      "UpstreamPathTemplate": "/api/Business",
      "Key": "Business"

    }
  ],
  "Aggregates": [
    {
      "RouteKeys": [
        "BusinessDownroute",
        "Packages"
      ],
      "UpstreamPathTemplate": "/test"
    }
  ],
  //GLOBAL CONFIG
  "GlobalConfiguration": {
    "BaseUrl": "https://localhost:4999"
  }
}

person Joep Van Diessen    schedule 12.01.2021    source источник
comment
У вас нет двух конечных точек. У вас есть запрос, в котором элементы после вопросительного знака являются параметрами запроса. Итак, у вас есть параметр storeid. У вас должен быть амперсанд, разделяющий параметры. Также фигурные скобки следует заменить фактическими значениями.   -  person jdweng    schedule 12.01.2021
comment
@jdweng, что вы имеете в виду, когда у вас нет двух конечных точек? У меня есть бизнес-микросервис и микросервис Packages. Мне нужно объединить результаты конечной точки обоих   -  person Joep Van Diessen    schedule 12.01.2021
comment
Вы можете подключаться только к одному URL-адресу за раз. Второй URL-адрес - это параметр, который передается на сервер. Прочтите следующее: devblogs.microsoft.com/cesardelatorre/   -  person jdweng    schedule 12.01.2021
comment
@jdweng Я не слежу за тобой. Я знаю, что мне нужно сделать 1 запрос к шлюзу, например gateway.com/store/{id}, результат этого должен быть агрегирован с двух конечных точек нижестоящего уровня, мне нужно знать, как получить переменную {id}, и передать его вниз по потоку в '/? id = {id}' и 'store / {id}'   -  person Joep Van Diessen    schedule 12.01.2021
comment
@jdweng Может ли отдельный микросервис-агрегатор стать потенциальным решением?   -  person Joep Van Diessen    schedule 12.01.2021
comment
Вам нужно два подключения к серверу (-ам). Вот еще одна ссылка: docs.microsoft.com/en-us/dotnet/architecture/microservices/   -  person jdweng    schedule 12.01.2021
comment
@jdweng, я все еще не понимаю, что ты имеешь в виду. Я обновил свой вопрос с помощью файла ocelot json.   -  person Joep Van Diessen    schedule 12.01.2021
comment
Похоже, что конечные точки - это маршруты в файле JSON.   -  person jdweng    schedule 13.01.2021
comment
@jdweng Ну да ладно Маршруты, чем, как я могу объединить результаты этих двух маршрутов, когда один маршрут занимает '/ {id}', а другой - '? id = {id}'   -  person Joep Van Diessen    schedule 13.01.2021
comment
Вы смотрели ссылку: docs.microsoft.com/en-us/dotnet/architecture/microservices/   -  person jdweng    schedule 14.01.2021


Ответы (1)


Я решаю эту проблему, используя аналогичный идентификатор, это невозможно с другим именем конечной точки или другим идентификатором

  first endpoint : http://localhost:5002/Orders/123456
  second endpoint : http://localhost:5003/api/Business/123456

{
      "DownstreamPathTemplate": "/api/Orders/{everything}",
      "DownstreamScheme": "http",
      "DownstreamHostAndPorts": [
        {
          "Host": "localhost",
          "Port": "5002"
        }
      ],
      "UpstreamPathTemplate": "/Orders/{everything}",
      "UpstreamHttpMethod": [ "GET" ],
      "key": "OrdersId"
    },{
      "DownstreamPathTemplate": "/api/Business/{everything}",
      "DownstreamScheme": "http",
      "DownstreamHostAndPorts": [
        {
          "Host": "localhost",
          "Port": "5003"
        }
      ],
      "UpstreamPathTemplate": "/Business/{everything}",
      "UpstreamHttpMethod": [ "GET" ],
      "key": "BusinessId"
    }],
  "Aggregates": [
    {
      "RouteKeys": [ "OrdersId", "BusinessId" ],
      "UpstreamPathTemplate": "/ExampleMultipleEndpoint/v1/{everything}"
    }
  ]

это пример ответа

 {
        "OrdersId": {
           //
        },
        "BusinessId": {
            //
        }
    }
person Daniel    schedule 14.04.2021