在网络选项卡中获取429 HTTP响应

时间:2016-09-16 17:18:06

标签: json zendesk-api http-status-code-429

这段代码有问题吗?获得429响应并受API限制。我的循环是否应该归咎于此?

function getCat(from_locat){

var art_count = 0,
section_to_display = '';
if (!from_local) {
    $.getJSON('/api/v2/help_center/sections.json').success(function(data) {
        sections = data.sections;
        sec_count = data.count;
    }).then(function() {
        $.each(sections, function(section) {
            if (document.location.toString().match(sections[section].id) !== null) {
                    sections[section].isactive = 'active'; // section heading active?
                }
                $.getJSON('/api/v2/help_center/sections/' + sections[section].id + '/articles.json?draft=false').success(function(data) {
                    $.each(data.articles, function() {
                        if (document.location.toString().match(this.id) !== null) {
                            this.isactive = 'active'; // activate this
                            section_to_display = this.section_id;
                        }
                    });
                    sections[section].articles = data;
                    art_count++;
                    if (art_count === sec_count) {
                        renderNav(sections, section_to_display);
                        if (typeof(Storage) !== "undefined") {
                            var cache_expiry = moment().add(20, 'minutes').format('X');
                            sessionStorage.setItem('cache_expiry', cache_expiry);
                            sessionStorage.setItem('sections', JSON.stringify(sections));
                        }
                    }
                });

});

1 个答案:

答案 0 :(得分:0)

首先,你有两个循环,所以程序的复杂性/大“O”以二次方式增长。因此,如果sections只有10个元素,那么您的代码至少会消耗所述API(10 ^ 2)= 100次。对于任何API,该消耗率很快将导致429。因此,请尝试降低代码的复杂性。

然而,现在,您的循环在给定时间范围内发出的请求超过了所述API允许的数量。要处理更多请求,某些API要求您是经过身份验证的用户或拥有身份验证令牌。例如,GitHub的API limits requests如下:

  

速率限制

     

对于使用基本身份验证或OAuth的请求,您每小时最多可以处理5,000个请求。对于未经身份验证的请求,速率限制允许您每小时最多发出60个请求。未经身份验证的请求与您的IP地址相关联,而不是与用户发出请求相关联。

因此,请检查API是否具有可以使您发出更多请求的身份验证系统。