Skip to content

Limite de requisições

Todos os clientes possuem um limite de requisições simultâneas que podem ser enviadas para a api.

O limite de requisições deve ser validado através do header x-ratelimit-limit Caso algum destes limite seja excedido você receberá uma resposta com um código HTTP 429 (Too Many Requests).

Para controlar o limite de requisições, toda resposta retornará os headers abaixo. Você poderá utilizá-los para medir o tempo de espera das próximas requisições.

HeaderDescrição
x-ratelimit-limitO limite máximo de requisições.
x-ratelimit-remainingA quantidade atual de requisições que podem ser enviadas.
x-ratelimit-resetTempo até o limite resetar.
retry-afterTempo que a aplicação deverá esperar para enviar a próxima requisição, se recebeu um status 429.

Exemplos em NODE, PHP E PYTHON

  • nesses exemplos vamos utilizar o header retry-after que é retornado quando atingimos os limites

Node

javascript

const axios = require('axios');

try {
    const response = await axios.get('https://api.chavesnamao.com.br/integration/v2/vehicles');
    
    // Verifica os headers de controle de taxa
    const limit = response.headers['x-ratelimit-limit'];
    const remaining = response.headers['x-ratelimit-remaining'];
    const resetTime = response.headers['x-ratelimit-reset'];
    
    console.log(`Limite: ${limit}`);
    console.log(`Restante: ${remaining}`);
    console.log(`Tempo de reset: ${resetTime} segundos`);

    // Verifica se atingiu o limite de taxa
    if (response.status === 429) {
        const retryAfter = response.headers['retry-after'];
        console.log(`Esperando ${retryAfter} segundos...`);
        await new Promise(resolve => setTimeout(resolve, retryAfter * 1000));
    }

    // Continue com as próximas requisições ou lógica de negócios aqui
} catch (error) {
    console.error('Erro na requisição:', error.message);
}

const axios = require('axios');

try {
    const response = await axios.get('https://api.chavesnamao.com.br/integration/v2/vehicles');
    
    // Verifica os headers de controle de taxa
    const limit = response.headers['x-ratelimit-limit'];
    const remaining = response.headers['x-ratelimit-remaining'];
    const resetTime = response.headers['x-ratelimit-reset'];
    
    console.log(`Limite: ${limit}`);
    console.log(`Restante: ${remaining}`);
    console.log(`Tempo de reset: ${resetTime} segundos`);

    // Verifica se atingiu o limite de taxa
    if (response.status === 429) {
        const retryAfter = response.headers['retry-after'];
        console.log(`Esperando ${retryAfter} segundos...`);
        await new Promise(resolve => setTimeout(resolve, retryAfter * 1000));
    }

    // Continue com as próximas requisições ou lógica de negócios aqui
} catch (error) {
    console.error('Erro na requisição:', error.message);
}

PHP

php
<?php

$url = 'https://api.chavesnamao.com.br/integration/v2/vehicles';

// Faz a requisição
$response = file_get_contents($url, false, stream_context_create([
    'http' => [
        'method' => 'GET',
    ],
]));

// Verifica os headers de controle de taxa
$limit = $http_response_header['x-ratelimit-limit'];
$remaining = $http_response_header['x-ratelimit-remaining'];
$resetTime = $http_response_header['x-ratelimit-reset'];

echo "Limite: $limit\n";
echo "Restante: $remaining\n";
echo "Tempo de reset: $resetTime segundos\n";

// Verifica se atingiu o limite de taxa
if (strpos($http_response_header[0], '429') !== false) {
    $retryAfter = $http_response_header['retry-after'];
    echo "Esperando $retryAfter segundos...\n";
    sleep($retryAfter);
}

// Continue com as próximas requisições ou lógica de negócios aqui
<?php

$url = 'https://api.chavesnamao.com.br/integration/v2/vehicles';

// Faz a requisição
$response = file_get_contents($url, false, stream_context_create([
    'http' => [
        'method' => 'GET',
    ],
]));

// Verifica os headers de controle de taxa
$limit = $http_response_header['x-ratelimit-limit'];
$remaining = $http_response_header['x-ratelimit-remaining'];
$resetTime = $http_response_header['x-ratelimit-reset'];

echo "Limite: $limit\n";
echo "Restante: $remaining\n";
echo "Tempo de reset: $resetTime segundos\n";

// Verifica se atingiu o limite de taxa
if (strpos($http_response_header[0], '429') !== false) {
    $retryAfter = $http_response_header['retry-after'];
    echo "Esperando $retryAfter segundos...\n";
    sleep($retryAfter);
}

// Continue com as próximas requisições ou lógica de negócios aqui

Python

python

import requests
import time
from datetime import datetime

url = 'https://api.chavesnamao.com.br/integration/v2/vehicles'

# Faz a requisição
response = requests.get(url)

# Verifica os headers de controle de taxa
limit = response.headers['x-ratelimit-limit']
remaining = response.headers['x-ratelimit-remaining']
reset_time = response.headers['x-ratelimit-reset']

print(f"Limite: {limit}")
print(f"Restante: {remaining}")
print(f"Tempo de reset: {reset_time} segundos")

# Verifica se atingiu o limite de taxa
if response.status_code == 429:
    retry_after = response.headers['retry-after']
    print(f"Esperando {retry_after} segundos...")
    time.sleep(int(retry_after))

# Continue com as próximas requisições ou lógica de negócios aqui

import requests
import time
from datetime import datetime

url = 'https://api.chavesnamao.com.br/integration/v2/vehicles'

# Faz a requisição
response = requests.get(url)

# Verifica os headers de controle de taxa
limit = response.headers['x-ratelimit-limit']
remaining = response.headers['x-ratelimit-remaining']
reset_time = response.headers['x-ratelimit-reset']

print(f"Limite: {limit}")
print(f"Restante: {remaining}")
print(f"Tempo de reset: {reset_time} segundos")

# Verifica se atingiu o limite de taxa
if response.status_code == 429:
    retry_after = response.headers['retry-after']
    print(f"Esperando {retry_after} segundos...")
    time.sleep(int(retry_after))

# Continue com as próximas requisições ou lógica de negócios aqui