c# - 使用 WEB API HttpClient 使用外部 API 然后以角度显示反序列化结果是否可以接受?
问题描述
我需要检索 JSON 提要的内容。我想HttpClient
用于下载内容。为此,我创建了一个 WEB API 控制器,其Get
方法使用外部 API,HttpClient
然后返回List
反序列化内容:
using (HttpClient client = new HttpClient())
{
client.BaseAddress = new Uri("externalAPI");
MediaTypeWithQualityHeaderValue contentType =
new MediaTypeWithQualityHeaderValue("application/json");
client.DefaultRequestHeaders.Accept.Add(contentType);
HttpResponseMessage response = await client.GetAsync(client.BaseAddress);
string content = await response.Content.ReadAsStringAsync();
List<MyClass> data = JsonConvert.DeserializeObject<List<MyClass>>(content);
return data;
}
现在我将使用 Angular 在客户端显示这个列表,我知道我应该如何执行这些步骤,但我的问题是为什么我应该使用 WEB API 来使用另一个外部 API,因为我可以简单地使用 AngularHttpClient
来使用那个外部 API ? 是否使用此 WEB API 来使用外部 API,然后将 a 返回List
给 Angular 被视为最佳实践?如果不是,最好的方法是什么,如果我必须为此目的使用 MVC?
解决方案
在我的项目中,我通过 webapi 使用了外部 API(它返回 json 数据)。
我这样做是因为我的 Angular 项目只需要维护对 webapi 的引用,即只有一个 url。我项目中的另一种情况是 Dev、UAT 和 prod 环境中的外部 api url 更改,所以我不想在我的 angular 项目中维护。
所以我这样做有两个原因
- 不想维护外部 api 的引用(即外部 api 的 URL),我只有一个联系人来获取我的项目中的数据,即我的 webapi
- Dev、UAT 和 PROd 中外部 API 更改的 URL,因此我不想在我的 Angular 项目中维护该信息。
- 这使我的 Angular 代码更易于维护,就好像其他人查看我的代码一样,他/她得到的信息是 webapi 是他们应该寻找的唯一位置,数据来自哪里
想象一下您从多个外部 API 获取数据的场景,在这种情况下,您必须维护对 Angualr 项目中所有 API 的引用。所以最好遵循FACADE 设计模式,并且只保留一个点(在这种情况下是哪个 WebAPI)与所有外部 api 连接并返回数据。
要每 10 分钟获取一次数据,您需要使用 RxJs
var timer$ = Rx.Observable.interval(1000) // 1000 = 1 second
timer$
.subscribe((v)=> this.Service.CalltoExtnerlAPIToGetdata()
.subscribe(data=> this.values = data));
当您不打算使用 Rxjs Timer 以避免内存泄漏时,请取消订阅它。http://brianflove.com/2016/12/11/anguar-2-unsubscribe-observables
推荐阅读
- ruby - 红宝石克隆一个对象
- python-3.x - 格式化列表以显示前导零 - Python 3.x
- android - 如何让 GSON 和 Retrofit 序列化数组并将其从 JSON 响应映射到字符串?
- julia - 在 Julia 中向 REPL 显示一个文本文件
- sql - 如何找到对 SQL Server Express 具有系统管理员访问权限的 Windows 用户和组?
- python-3.x - 给定一个节点,烧掉整棵二叉树需要多长时间?
- java - org.testng.TestNGException:无法实例化黄瓜测试运行器
- php - WooCommerce 存款和购物车总计算
- exception - memcpy() : 访问冲突写入位置
- java - 使用 for 循环从 CacheManger 检索数据的方法的单元测试