【发布时间】:2019-06-09 20:18:43
【问题描述】:
我有一个供应商休息 API,我们可以返回大量的 json 数据。我们不能让我们的客户直接访问这个 API,所以我们所做的是创建我们自己的 REST API (C# WebAPI) 来接收来自客户客户的请求。
然后,我们的 Web API 会处理数据,并向供应商 rest API 发出请求以及所需的凭据。
我们不对从供应商 API 返回的数据进行任何操作。
我想返回从供应商的 REST API 返回的相同流,但我不想等到流关闭。一旦我们开始接收来自供应商 REST API 调用的数据,我希望将相同的数据从我们的 REST API 返回给客户端调用者。
这将提供巨大的性能优势并大大降低扩展成本。
客户端 ------调用我们的 REST API----> {OUR REST API} --------调用供应商 REST API ------> {供应商的 REST API}
我们如何在 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;
}
【问题讨论】:
-
显示您已经拥有的读取他们响应的代码;这似乎是一个微不足道的“获取供应商响应流并开始从中读取,获取您自己的客户端的响应流并开始循环写入”场景
-
这看起来很简单,请显示一些代码。
-
好的。我添加了一个代码示例。在这里,您可以看到它读取了完整的响应,然后将其发送回客户端。问题是,这比客户端直接调用我们供应商的 REST API 慢 10 倍……如果我们可以在收到响应时流回响应,我们可以大大提高性能……
-
因此您希望您的 API 本质上使用您自己的凭据充当“反向代理”。我会建议现成的产品,如 Azure API 网关或 AWS API 网关或 APIgee。所有这些产品都相对便宜且不必担心维护性和可扩展性等。
标签: c# asp.net .net rest asp.net-web-api