---
title: "Obmedzenie požiadaviek — Geolocation for Laravel | Roundly"
description: "Spomaľte každého HTTP poskytovateľa podľa vlastného limitu s adaptívnym Retry-After alebo nechajte volanie po prekročení stropu rýchlo zlyhať."
url: https://roundly-consulting.com/sk/open-source/navody/geolocation-for-laravel/obmedzenie-poziadaviek
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Geolocation for Laravel](https://roundly-consulting.com/sk/open-source/navody/geolocation-for-laravel.md)

# Obmedzenie požiadaviek

Každý HTTP poskytovateľ — google, ipinfo, ip2location a maxmind\_web — posiela požiadavky cez http-client-rate-limits-for-laravel, takže volania sa spomalia skôr, než narazia na API tretej strany, namiesto zbytočných odpovedí 429. Každý poskytovateľ má vlastný limit s kľúčom geolocation:{provider}:{owner}. Offline poskytovatelia maxmind\_database a default nerobia sieťové volania a nikdy sa nespomaľujú.

## Predvolené limity

| Poskytovateľ | limit / per | Env |
| --- | --- | --- |
| `google` | 50 / second | `GEOLOCATION_GOOGLE_RATELIMIT, …_PER` |
| `ipinfo` | 60 / minute | `GEOLOCATION_IPINFO_RATELIMIT, …_PER` |
| `ip2location` | 60 / minute | `GEOLOCATION_IP2LOCATION_RATELIMIT, …_PER` |
| `maxmind_web` | 60 / minute | `GEOLOCATION_MAXMIND_WEB_RATELIMIT, …_PER` |

Všetky limity sú adaptívne a predvolene čakajú.

## Kľúče pre každého poskytovateľa

Každý HTTP poskytovateľ má blok rate\_limits v services.<provider>:

```php
'ipinfo' => [
    // ...
    'rate_limits' => [
        'enabled' => env('GEOLOCATION_IPINFO_RATELIMIT_ENABLED', true),
        'owner' => env('GEOLOCATION_RATELIMIT_OWNER', 'app'),
        'limit' => env('GEOLOCATION_IPINFO_RATELIMIT', 60),
        'per' => env('GEOLOCATION_IPINFO_RATELIMIT_PER', 'minute'), // second|minute|hour|day
        'adaptive' => env('GEOLOCATION_IPINFO_RATELIMIT_ADAPTIVE', true),
        'max_wait' => env('GEOLOCATION_IPINFO_RATELIMIT_MAX_WAIT'), // ms; null = pace, set = fail fast
        'jitter' => env('GEOLOCATION_IPINFO_RATELIMIT_JITTER'), // ms; null = none
    ],
],
```

| Kľúč | Predvolené | Env (pre google) | Účel |
| --- | --- | --- | --- |
| `enabled` | true | `GEOLOCATION_GOOGLE_RATELIMIT_ENABLED` | false posiela bežným klientom bez obmedzenia. |
| `owner` | app | `GEOLOCATION_RATELIMIT_OWNER` | Segment vlastníka v kľúči limitu (spoločný pre všetkých poskytovateľov). Prázdna hodnota sa považuje za nenastavenú (platí predvolená); hodnota, ktorá nie je reťazcom, vyhodí výnimku. |
| `limit` | 50 (google) / 60 | `GEOLOCATION_GOOGLE_RATELIMIT` | Max počet požiadaviek za okno, najmenej 1. |
| `per` | second (google) / minute | `GEOLOCATION_GOOGLE_RATELIMIT_PER` | Okno: second, minute, hour alebo day; prázdna hodnota sa považuje za nenastavenú (platí predvolená); iná hodnota vyhodí InvalidConfigurationException. |
| `adaptive` | true | `GEOLOCATION_GOOGLE_RATELIMIT_ADAPTIVE` | Rešpektovať Retry-After z odpovede 429. |
| `max_wait` | null | `GEOLOCATION_GOOGLE_RATELIMIT_MAX_WAIT` | Strop na rýchle zlyhanie v ms (0 alebo viac); null alebo prázdna hodnota = čakať. |
| `jitter` | null | `GEOLOCATION_GOOGLE_RATELIMIT_JITTER` | Náhodný rozptyl v ms pridaný k odkladu (0 alebo viac); null alebo prázdna hodnota nepridá žiadny. |

```bash
GEOLOCATION_RATELIMIT_OWNER=app
GEOLOCATION_GOOGLE_RATELIMIT=50
GEOLOCATION_GOOGLE_RATELIMIT_PER=second
GEOLOCATION_IPINFO_RATELIMIT=60
GEOLOCATION_IPINFO_RATELIMIT_PER=minute
GEOLOCATION_IPINFO_RATELIMIT_MAX_WAIT=2000   # fail fast instead of waiting more than 2 s
```

## Čakať alebo rýchlo zlyhať

Predvolene limiter počká, kým sa okno uvoľní, a potom odošle. Ak nastavíte max\_wait (v milisekundách), volanie radšej rýchlo zlyhá: keď by odklad prekročil strop, vyhodí sa RateLimitExceededException. Dedí z GeolocationException, nesie ->provider a implementuje kontrakt HasRetryAfter z toolkitu:

```php
use RoundlyConsulting\Geolocation\Exceptions\RateLimitExceededException;

try {
    $location = Geolocation::locateIp($request->ip());
} catch (RateLimitExceededException $e) {
    $e->provider;   // e.g. 'ipinfo'

    return response('Location lookup is busy, please retry.', 429)
        ->header('Retry-After', (string) $e->retryAfterSeconds());
}
```

Pri zapnutom adaptive nastaví Retry-After z odpovede 429 limiter pre ďalšie volanie, pričom samotná neúspešná odpoveď sa stále zmení na null a pipeline pokračuje.

## Hromadná práca

batch() aj distanceMatrix() idú cez rovnaký limiter, takže hromadné vyhľadávania sa automaticky spomalia podľa limitu poskytovateľa. Matica vzdialeností rozdelená na viac požiadaviek zaberie v limite jedno miesto za každú požiadavku.

## Spoločné limity pre viac workerov

Balík na limity predvolene používa úložisko v pamäti — jeden limit na proces, čo stačí pre jeden worker alebo beh v CLI. Pre kvótu účtu zdieľanú medzi workermi a servermi ho v jeho vlastnej konfigurácii nasmerujte na zdieľané úložisko (HTTP\_CLIENT\_RATE\_LIMITS\_STORE); tento balík žiadne nevynucuje:

```php
// config/http-client-rate-limits.php — one budget across every worker and server
'store' => \RoundlyConsulting\HttpClientRateLimits\Store\RedisStore::class,
```

Natívne ->retry(times, delay) Laravelu naďalej platí, no len pre prechodné chyby: chyba spojenia alebo odpoveď 5xx sa zopakuje najviac toľkokrát, koľko určuje services.<provider>.retry, kým odpoveď 4xx — zlý kľúč, neznáma IP, 429 — sa vráti hneď a znova sa neposiela. Všetky pokusy jedného volania zdieľajú jedno miesto v limite; limiter je dodatočná vrstva na tempo odchádzajúcich požiadaviek, nie náhrada.

## Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

[Ďalšie spôsoby podpory vrátane kryptomien](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/geolocation-for-laravel.md)
