已回答 网站购买解决方案

Raysefo

知名会员
已加入
2019年2月22日
留言内容
197
编程经验
10+
嗨,大家好,

您会记得,我有一个Web API,该API调用第三方Web API以获取在市场链上有效的在线游戏代码。现在,我想将我的Web API集成到这个本地网站,该网站出售很多东西,包括在线游戏代码。在市场链中,我的Web API是通过使用付款终端从收银员处调用的。但另一方面,我必须查询在线网站Web API才能获得已支付的在线游戏代码订单。我打算编写一份工作,每10分钟查询此在线网站Web API,以检查是否有已付款的订单。然后调用第3个Web API并继续其他操作。您有什么建议/解决方案?

最好的祝福。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,598
地点
弗吉尼亚州切萨皮克
编程经验
10+
按需而不是每10分钟查询一次第三方API的成本(时间,内存,金钱)有多昂贵?您是因为每天要打给第三方的电话而设置数量吗?
 

Raysefo

知名会员
已加入
2019年2月22日
留言内容
197
编程经验
10+
我不知道何时购买在线游戏代码,我必须查询在线网站API才能确定是否从其网站上购买了在线游戏代码。这就是为什么我打算写一份工作。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,598
地点
弗吉尼亚州切萨皮克
编程经验
10+
如果您确实与该网站集成在一起,为什么他们不能像市场链调用您的Web API那样调用您的Web API?为什么需要轮询网站的Web API以确定是否需要做任何事情?您的Web API是否如此复杂,以致网站无法调用您?
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,598
地点
弗吉尼亚州切萨皮克
编程经验
10+
这样看来,除了轮询之外,您别无选择。但是,您确实可以选择在轮询然后正常调用Web服务API(通常依次调用第3方)或轮询然后再调用第三方之间进行选择。
 

Raysefo

知名会员
已加入
2019年2月22日
留言内容
197
编程经验
10+
假设我通过调用本地网站的API获得游戏订单。 (一个出售游戏代码的本地网站,当用户在该网站上进行购买时,我正在从该网站的API获取订单。)我将使用.net核心控制台应用程序执行此操作,该应用程序将每隔一次检查该网站的API 10分钟。现在假设我从网站的API获得了5个游戏订单。在此.net核心控制台应用程序内部,我将调用我的API,以完成对这5个游戏订单的购买,如下所示。 (我正在调用第三方Rest API以获取游戏代码。)
您能否检查我的代码并给我一些反馈\建议?有什么地方可以引起问题吗?

C#:
static async Task Main(string[] args)
{
    const int numberOfProducts = 3;
    try
    {
        for (var i = 0; i < numberOfProducts; i++)
        {
            var product = "000000001585";
            //DEV
            var request =
                        (HttpWebRequest)WebRequest.Create("http://test//api/v2/purchase");

            var svcCredentials =
                        Convert.ToBase64String(
                            Encoding.ASCII.GetBytes("username" + ":" + "password"));

            request.Headers.Add("Authorization", "Basic " + svcCredentials);
            request.Method = "POST";
            request.KeepAlive = false;
            request.ContentType = "application/x-www-form-urlencoded";

            var content = new FormUrlEncodedContent(new[]
            {
                  new KeyValuePair<string, string>("productCode", product),
                  new KeyValuePair<string, string>("quantity", "1"),
                  new KeyValuePair<string, string>("shopNo", "test"),
                  new KeyValuePair<string, string>("safeNo", "test"),
                  new KeyValuePair<string, string>("cashierNo", "test")

            });


            var formUrlEncodedContent = content;
            var urlEncodedString = await formUrlEncodedContent.ReadAsStringAsync();

            using (var streamWriter = new StreamWriter(await request.GetRequestStreamAsync()))
            {
                   await streamWriter.WriteAsync(urlEncodedString);
            }

            var httpResponse = (HttpWebResponse)(await request.GetResponseAsync());

            var response = new HttpResponseMessage
            {
                  StatusCode = httpResponse.StatusCode,
                  Content = new StreamContent(httpResponse.GetResponseStream()),
            };

            //Read response
            var htmlResponse = await response.Content.ReadAsStringAsync();
            var deserializedResult = JObject.Parse(htmlResponse);
                    
            Console.WriteLine((string)deserializedResult["coupons"]?[0]?["Serial"] + ":" + (string)deserializedResult["coupons"]?[0]?["Pin"]);
        }

            
    }
    catch (Exception e)
    {
            
         Console.WriteLine(e.Message);
         throw;
    }
}
 

Raysefo

知名会员
已加入
2019年2月22日
留言内容
197
编程经验
10+
为了重试,我想使用Polly。我想知道哪个更合理,在控制台应用程序中使用Polly(就像我以前的文章中那样),还是应该在我的Web API中编写一个新的控制器并在调用第三方Web API时在其中使用Polly?
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,974
地点
英国
编程经验
10+
我假设您是在谈论polly那些编程不良并将其用作错误代码自动处理程序的人使用的弹性框架?

如果没有,请在提及时说明您的意思 波利.

而且,如果这是最重要的,那么您是否最能确定自己是否对应用程序有此要求?

考虑到您以前的文章,复杂的项目规模以及使用其他人的API,很难回答这个问题。

通常,在我学习的前几年中,如果我创建的应用程序可以带给我完整的知识,那么我将对该项目进行分类并重新开始。您在这个项目上工作了一年,仍然在努力中。也许是时候重新考虑您的设计了吗?
 

Raysefo

知名会员
已加入
2019年2月22日
留言内容
197
编程经验
10+
@谢平 嗨,是的,是波莉。但是我看不到糟糕的程序员部分;)
Polly是一个.NET弹性和瞬态故障处理库,允许开发人员以流畅和线程安全的方式表达诸如重试,断路器,超时,隔离头和回退之类的策略。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,598
地点
弗吉尼亚州切萨皮克
编程经验
10+
我觉得 @谢平 我想说的是,您应该真正编写自己的弹性代码,因为您非常了解故障情况,这与依赖于通用弹性库不同,在通用库中,您可能只是随机选择了一个弹性策略,而不是仔细选择一个弹性策略。

定制解决方案,尤其是在您需要可靠性时,通常会更好地工作。
 
最佳 底部