Как сделать вызовы 2 API из одного действия контроллера в ядре asp.net? - PullRequest
0 голосов
/ 06 июля 2019

У меня есть ItemsController с действием Get (getItemSellers\{itemId}), которое вызовет метод в ItemServices (GetSellers(itemId)) и получит список продавцов, продающих определенный товар, от стороннего API,который я разбираю и создаю Item модель.Я хочу вызвать другой API, чтобы получить оценки для каждого продавца и добавить его в мой Item model.В конечном счете, я собираю кучу информации из одного API и превращаю ее в одну модель, а затем хочу обновить эту модель информацией, которую я получаю из другого API.У кого-нибудь есть идеи, как лучше всего это сделать?Я ничего не сохраняю в базу данных, просто передаю, как моя модель выглядит клиенту.

В основном, после первого вызова API:

{ 
   data: 
      { 
          itemId: 123, 
          sellers: [
              { 
                  seller1: abc 
              }, 
              { 
                  seller2: abc
              }
          ] 
      }
}

После второго вызова API, и чтоЯ хочу вернуться к своему контроллеру:

{ 
   data: 
      { 
          itemId: 123, 
          sellers: [
              { 
                  seller1: abc,
                  rating: 5
              }, 
              { 
                  seller2: abc,
                  rating: 3
              }
          ] 
      }
}

1 Ответ

0 голосов
/ 06 июля 2019
  1. Создайте класс SellerViewModel для хранения дополнительной информации (или используйте имеющуюся модель).

  2. Я рекомендую использовать JsonServiceClient (в пакете ServiceStack.Client) для десериализации API рейтинга продавца, который вы планируете вызвать.

пример использования (для каждого продавца)

using(var client = new JsonServiceClient("http://api.seller-ratings.com")
{
    // assuming SellerRatingModel has SellerID and Rating properties
    var result = client.Get<SellerRatingModel>("/sellers/1");
    // Do assignment here
}

Я должен отметить, что http-вызовы обходятся дорого для каждого продавца, и, таким образом, вам лучше передавать диапазон идентификаторов продавцов в API рейтинга и получать всю необходимую информацию за один раз. Затем вы можете выполнить соединение linq с данными, полученными из первого API. Конечно, ваш рейтинг API должен поддерживать это

using(var client = new JsonServiceClient("http://api.seller-ratings.com")
{
    // assuming SellerRatingModel has SellerID and Rating properties
    var result = client.Get<IEnumerable<SellerRatingModel>>("/sellers?Ids=1,2,3,4,5");
    // Do assignment here
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...