繁体   English   中英

这是从 API 检索数据的好方法吗?

[英]Is this a good way to retrieve data from an API?

有人能告诉我这是否是从 API 检索数据的好方法? 我是新手,想知道是否有人可以向我推荐某种设置和结构,以及是否可以以更正确的方式完成?

string baseUrl = "https://api.data.com/getITems/
//Create a new instance of HttpClient
using (HttpClient client = new HttpClient())
{
    var byteArray = Encoding.ASCII.GetBytes("username:password");
    client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
    using (HttpResponseMessage result = await client.GetAsync(baseUrl))
    using (HttpContent content = result.Content)
    {
        result.EnsureSuccessStatusCode();
        string data = await content.ReadAsStringAsync();

        var test1 = JsonConvert.DeserializeObject<Results>(data);

        foreach (var item in test1.results)
        {
            foreach (var item1 in item.result)
            {
                Console.WriteLine("Result: {0}", item1.Symbol);
            }
        }
    }

你的代码看起来不错。 您可以使用 nuget 包来简化某些操作或将其转换为辅助类。 您唯一应该做的不同是不要每次都创建一个新的HttpClient ,这是违反惯例的。 您应该只创建一次并多次使用它。

确定您的实现是否是一种好方法超出了我的范围,因为我不知道您的需求,而且通常您总是可以将某些功能提取到其他类中,同时将您投入的努力与您所获得的预期价值进行调整它。

话虽如此,我将只讨论一件事,那就是您对HttpClient本身的使用。

如果这是一个长期存在的应用程序并且您不断调用代码的那部分,您将始终新建一个HttpClient的新实例,然后处理它。 这将立即TIME_WAIT与您的端点的连接,但将端口保留在TIME_WAIT状态。 这样做几百或几千次,你很可能会遇到SocketException ,因为你的机器已经用完了可用的套接字。

文档

HttpClient 旨在实例化一次并在应用程序的整个生命周期中重复使用。

如果所有 HttpClient 共享相同的标头和基地址,则可以在整个应用程序中重复使用该客户端的单个实例。 如果您有不同的标头,请创建一个新的静态客户端。 在这两种情况下,您都希望在整个应用程序中将它们用作单例。

一些进一步的阅读:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM