weather.gov API 过期预测网格

weather.gov API expired forecast grid

我有一个程序可以使用 weather.gov API Web Service 提取预报列表 link,然后调用每个 link 来提取和存储邮政编码的天气数据,可以根据用户邮政编码偏好在我们的主页上查看它们。最近我在我们的错误日志中看到了很多 503 错误,所以当我去检查它并使用 Postman 运行 一些 URL 时,我得到了以下响应:

{
    "correlationId": "36eb9a42-990d-4ca8-a24a-cd0c67985903",
    "title": "Forecast Grid Expired",
    "type": "https://api.weather.gov/problems/ForecastGridExpired",
    "status": 503,
    "detail": "The requested forecast grid was issued 2020-02-11T02:50:40+00:00 and has expired.",
    "instance": "https://api.weather.gov/requests/36eb9a42-990d-4ca8-a24a-cd0c67985903"
}

不幸的是,我不知道请求的预测网格过期意味着什么,而且我在他们的文档中也找不到任何相关信息。也许我错过了什么,或者我的代码中有问题导致了这个问题。

这是一个 java 程序,它使用 javax.net.ssl.HttpsURLConnection 和 java.net.URL:

URL url = new URL("https://api.weather.gov/gridpoints/BOX/21,35/forecast");
HttpsURLConnection httpsConn = (HttpsURLConnection)url.openConnection();
httpsConn.setRequestMethod(HttpMethod.GET);
httpsConn.setRequestProperty("Content-Type", "application/json");
httpsConn.setConnectTimeout((1000 * 60));
httpsConn.setReadTimeout((1000 * 60));
StringBuffer response = getApiResponse(httpsConn, 0);

private StringBuffer getApiResponse(HttpsURLConnection httpsConn, int counter){
    StringBuffer response = new StringBuffer();
    try{
        BufferedReader in = new BufferedReader(new InputStreamReader(httpsConn.getInputStream()));
        String inputLine;
        while((inputLine = in.readLine()) != null){
            response.append(inputLine);
        }
        in.close();
    }catch(Exception e){
        counter++;
        errorLog.add("ERROR: " + e.getMessage());
        errorLog.add("Number of attempted calls: " + counter);
        if(counter < 5){
            response = getApiResponse(httpsConn, counter);
        }else{
            errorLog.add("Max attempts made for this API Call.");
        }
    }
    return response;
}

我将调用包装在一个将尝试调用 5 次的函数中,正如我在构建此程序时注意到的那样,有时调用只是简单地超时。我使用的 url 恰好是我遇到的问题之一,似乎涉及 BOX 的任何地方都会导致上述 503 错误。

有没有其他人遇到过这样的问题 - 他们是如何解决的?

原来这不是我们自己能解决的。虽然 503 状态代码意味着被调用的服务器无法处理请求(而且我知道这不是我们的错误),但我对收到的错误消息感到困惑,想知道它是否与我设置调用该服务的方式。

此错误消息基本上归结为服务中断,这意味着除了报告中断并等待结果外,我们无法做任何事情。

我觉得将其标记为答案很愚蠢,因为它归结为 "contact their support system" 但也许如果将来有人遇到这个问题,他们至少会知道推理 - 但希望他们会改进他们的错误消息,以便更清楚什么是服务中断以及您拨打的电话有什么问题。