Поток из одного REST API в ответ на клиентский веб-API - PullRequest
1 голос
/ 09 июня 2019

У меня есть API покоя вендора, которому мы возвращаем значительные объемы данных json.Мы не можем позволить нашим клиентам напрямую обращаться к этому API, поэтому мы создали собственный REST API (C # WebAPI), который принимает запросы от наших клиентов.

Затем наш веб-API манипулирует данными и отправляет запрос в API отдыха вендора вместе с необходимыми учетными данными.

Мы не делаем никаких манипуляций с данными, возвращаемыми от вендора.API.

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

Это обеспечит огромное преимущество в производительности и значительно сократит затраты наscaling.

Клиент ------ вызывает наш REST API ----> {НАШ REST API} ------- вызывает поставщик REST API ------> {поставщик RESTAPI}

Как мы можем сделать что-то подобное в C #?

        [HttpGet]
        public async Task<IActionResult> Get([FromQuery]SearchQuery queryParam)
        {
            string apiKey = _configuration.GetValue<string>("VendorAPIKey");
string restUrl = "https://vendorresturl.com/api/search?kajhfjhsdf";

            var hclient = new HttpClient();
            hclient.DefaultRequestHeaders.Add("api-key", apiKey);

            var responseMessage = await hclient.GetAsync(restUrl.ToString());

            var c = new ContentResult();
            c.ContentType = "application/json";
            c.Content = await responseMessage.Content.ReadAsStringAsync();

            return c;
    }

1 Ответ

0 голосов
/ 09 июня 2019

Я предлагаю вам изменить две вещи в вашем коде:

1) Получите этот API только один раз, включите его в службу, которая сохраняет этот ключ в виде одноэлементной переменной. Таким образом, контроллер в первый раз выполнит простой запрос, после чего значение ключа будет доступно в хранимой переменной singleton.

2) Сделайте ваш поток завершенным асинхронным с использованием шаблонов обратного вызова события, обеспечивающих URL обратного вызова, чтобы после завершения процесса веб-крючок мог отправить результат процесса.

Прочтите эти статьи, чтобы помочь вам:

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