Čtenáři jako vy pomáhají podporovat MUO. Když provedete nákup pomocí odkazů na našich stránkách, můžeme získat provizi přidružené společnosti.

Jedním z faktorů, které můžete chtít vzít v úvahu při vytváření aplikace, je objem provozu, který očekáváte od uživatelů. Množství provozu možná rozhoduje o více faktorech, které mohou zahrnovat alokaci zdrojů, zejména pokud hostujete svou aplikaci u poskytovatele cloudových služeb.

Omezení rychlosti je jednou z technik, které můžete použít k řízení provozu ve vaší aplikaci nebo síti.

Co je omezení sazby?

Omezení rychlosti je rozšířená technika omezení přístupu pro omezení síťového provozu, především v rámci spekulovaných časových rámců nebo když uživatel provedl několik požadavků.

Omezení rychlosti je populární pro snížení kybernetických útoků, jako je hrubá síla a DDoS (Distributed Denial of Service), omezující škrábání webu, požadavky API a další nepravidelné uživatelské interakce, jako je automatizace robotů a zátěž serveru.

Go poskytuje prvotřídní podporu pro aplikace omezující rychlost v

instagram viewer
hodnotit balíček, který poskytuje omezovač rychlosti a spolupracuje s čas balík.

The hodnotit balíček je součástí projektu Go, ale balíček není dostupný ve standardní knihovně. Budete muset nainstalovat balíček s dostat příkaz.

Spusťte tento příkaz v terminálu vašeho pracovního adresáře a přidejte balíček do závislostí vašeho projektu.

jít získat "golang.org/x/time/rate"

Importujte tyto balíčky do svého souboru Go pro tento výukový program.

import (
"kódování/json"
"golang.org/x/time/rate"
"log"
"net/http"
)

The json balíček je pro zakódování struktury jako JSON klientovi. Budete používat log zabalit do log chyby do konzole a http balíček pro sestavení koncového bodu a middlewaru a spuštění serveru.

Vytvoření jednoduchého API s jedním koncovým bodem

Obvykle napíšete middleware pro funkce obsluhy, které chcete omezit. Pokaždé, když uživatel odešle požadavek, middleware ověří stav požadavku před předáním přístupu k funkci handleru, v závislosti na případu.

Zde je model struktury s řetězcovými poli, která zakódujete do klienta.

typ Zpráva strukturovat {
Odezva tětiva`json:"odpověď"`
Popis tětiva`json:"popis"`
}

Funkce handleru nastaví typ obsahu na JSON, zapíše úspěšný stavový kód a vrátí klientovi zakódovanou instanci struktury.

funckoncový bodPříklad(spisovatel http. ResponseWriter, požadavek *http. Žádost) {
spisovatel. Header().Set("Content-Type", "application/json")
spisovatel. WriteHeader (http. Stav OK)
zpráva := zpráva{
Odpověď: "Úspěšně",
Popis: "Úspěšně jste dosáhli koncového bodu API",
}
chyba := json. NewEncoder (zapisovatel).Encode(&zpráva)
-li chyba!= nula {
vrátit se
}
}

The koncový bodPříklad funkce handler zabírá http balík spisovatel a žádost instance metody a vrátí klientovi zprávu s spisovatel instance.

Sazba omezující aplikaci Simple Go

Omezení sazby na základě počtu požadavků uživatele nebo dostupného počtu požadavků je podobné. Před procesem autorizace budete vždy muset vytvořit omezovač.

Zde je návod, jak můžete vytvořit omezovač rychlosti a autorizovat uživatele na základě počtu požadavků.

funcrateLimiterMiddleware(další func(spisovatel http. ResponseWriter, požadavek *http. Žádost)) http.HandlerFunc {
omezovač := sazba. NewLimiter(3, 6) // max. 6 požadavků a poté další tři požadavky za sekundu
vrátit se http. HandlerFunc(func(spisovatel http. ResponseWriter, požadavek *http. Žádost) {
-li !omezovač. Dovolit() {
spisovatel. Napsat([]byte("překročen limit sazby"))
vrátit se
} jiný {
endpointExample (autor, požadavek)
}
})
}

The rateLimiterMiddleware handler function je middleware, který přijímá funkci handleru jako argument a vrací výsledek autorizace po vytvoření nového omezovače rychlosti pomocí Nový Limiter metoda, která přebírá dva parametry pro počet požadavků za sekundu po zadaném maximálním počtu požadavků.

The Dovolit metoda instance limiteru vrací boolean na základě stavu autorizovaných požadavků. The rateLimiterMiddleware vrátí zprávu JSON, pokud je požadavek autorizován nebo "překročen limit sazby" zprávu, když klient odeslal maximální počet požadavků.

funchlavní() {
http. HandleFunc("/home", rateLimiterMiddleware (endpointExample))
chyba := http. ListenAndServe(":8080", nula)
-li chyba!= nula {
log. Println("Došlo k chybě naslouchání na portu:8080", chyba)
}
}

The hlavní funkce připojí /home koncový bod k rateLimiterMiddleware handler funkce, která přebírá koncový bodPříklad funkce manipulátoru.

The ListenAndServe metoda spustí server na portu localhost 8080 a vrátí možné chyby.

Tento příkaz můžete spustit na terminálu vašeho pracovního adresáře nebo pomocí bash skript pro testování koncového bodu po spuštění serveru.

pro i v {1..10}; dělat kučera http://localhost: 8080/domov; Hotovo

Kód narazí na /home koncový bod desetkrát s požadavkem. Zde jsou výsledky žádostí.

Po šestém požadavku (maximálně) je klient neautorizovaný a ke koncovému bodu již nemůže přistupovat.

Omezení sazby je důležité

Omezení rychlosti je zásadní, zvláště pokud se snažíte snížit náklady na hostování své aplikace, chcete omezit rušení robotů nebo zabezpečit aplikaci před kybernetickými útoky. Podobné jako Go's hodnotit balíček, npm poskytuje expresní sazba-limit balíček pro expresní aplikace s omezením sazby.