如何将应用程序与第三方 API 分离以处理停机时间

本文关键字:分离 处理 停机 时间 API 第三方 应用程序 | 更新日期: 2023-09-27 17:55:14

Current 我有一个进行第三方API调用的应用程序,返回的数据是我在网页上显示的主要数据。

如果 API 关闭,我的网站当前会关闭(因超时而崩溃,最终也会导致 IIS 关闭)。

我有哪些选择可以防止网站崩溃?

我倾向于某种监控服务,如果 API 关闭,我会重定向到解释我的应用程序也关闭的页面。

如何将应用程序与第三方 API 分离以处理停机时间

使用断路器模式。有关在 C# 中实现的一些建议,请参阅此处。

阅读Michael Nygard的书和这篇Netflix博客文章以获取很好的建议,这里有一个关于断路器的StackOverflow问题。

如果可能的话,我会亲自存储信息,并根据您的要求每 X 分钟同步一次。

如果 API 关闭,那么您仍然拥有最后一批同步数据,这意味着没有停机时间。

编辑

如果您需要实时数据,并希望在 Web 服务不可用时转发到页面,则可以执行以下操作:

internal bool WebServiceAvailable()
{
    bool Result = false;
    string Url = {ENTER URL}
    try
    {
        HttpWebRequest Req = (HttpWebRequest)WebRequest.Create(Url);
        Req.Timeout = 3000;
        using (HttpWebResponse Rsp = (HttpWebResponse)Req.GetResponse())
        {
            if (Rsp.StatusCode == HttpStatusCode.OK)
            {
                Result = true;   
            }
        }
    }
    catch (WebException) { }
    return Result;
}
if (!WebServiceAvailable() 
{
    //Redirect to Not Available page
}

我使用它,它似乎工作得很好。

使用HttpWebRequest.Timeout(在 MSDN 上)等待合理的时间,捕获异常以了解何时向用户提供诸如"稍后重试!"等内容。默认超时太长 (100s)。

如果您的企业允许,您甚至可以在发生故障时向用户提供旧的/缓存的数据。

您能否从网页中的 AJAX 调用调用您的服务器端代码(我认为称为第三方 API)(也许使用 jquery 来轻松)。这样,如果您从 AJAX 响应中收到错误或超时,您可以相应地更新您的页面,而不会破坏您的网站。

您可以为终结点设置常规 AJAX 轮询(进而轮询 API 以获取检测信号)