Læsere som dig hjælper med at støtte MUO. Når du foretager et køb ved hjælp af links på vores websted, kan vi optjene en affiliate-kommission.

En af de faktorer, du måske vil overveje, når du bygger din applikation, er mængden af ​​trafik, du forventer fra brugerne. Mængden af ​​trafik afgør muligvis flere faktorer, der kan omfatte ressourceallokering, især hvis du hoster din app hos en cloud-tjenesteudbyder.

Hastighedsbegrænsning er en af ​​de teknikker, du kan bruge til at kontrollere trafikken på din applikation eller dit netværk.

Hvad er satsbegrænsende?

Hastighedsbegrænsning er en udbredt adgangsbegrænsningsteknik til begrænsning af netværkstrafik, primært inden for spekulerede tidsrammer, eller når brugeren har udført flere anmodninger.

Takstbegrænsning er populær for at reducere cyberangreb som brute force og DDoS (Distribueret Denial of Service), begrænsende web skrabning, API-anmodninger og andre uregelmæssige brugerinteraktioner som botautomatisering og serverbelastning.

Go giver førsteklasses support til hastighedsbegrænsende applikationer i

instagram viewer
sats pakke, der giver en hastighedsbegrænser og interopererer med tid pakke.

Det sats pakken er en del af Go-projektet, men pakken er ikke tilgængelig i standardbiblioteket. Du skal installere pakken med kommando.

Kør denne kommando i terminalen i dit arbejdsbibliotek for at tilføje pakken til dit projekts afhængigheder.

 få "golang.org/x/time/rate"

Importer disse pakker til din Go-fil til denne øvelse.

importere (
"encoding/json"
"golang.org/x/time/rate"
"log"
"net/http"
)

Det json pakken er til kodning af en struktur som JSON til klienten. Du vil bruge log pakke til log fejl på konsollen og http pakke til at bygge slutpunktet og middlewaren og starte en server.

Opbygning af en simpel API med ét slutpunkt

Konventionelt vil du skrive en middleware for de håndtererfunktioner, du vil bedømme begrænse. Hver gang brugeren sender en anmodning, validerer middlewaren anmodningsstatus, før den videresender adgang til behandlerfunktionen, afhængigt af sagen.

Her er struct-modellen med strengfelter, du vil kode til klienten.

type Besked struktur {
Respons snor`json:"svar"`
Beskrivelse snor`json:"beskrivelse"`
}

Behandlerfunktionen indstiller indholdstypen til JSON, skriver en vellykket statuskode og returnerer en kodet struct-instans til klienten.

funcslutpunktEksempel(forfatter http. ResponseWriter, anmod om *http. Anmodning) {
forfatter. Header().Set("Content-Type", "application/json")
forfatter. WriteHeader (http. Status OK)
besked := besked{
Svar: "Vellykket",
Beskrivelse: "Du har nået API-endepunktet",
}
fejl := json. NewEncoder (writer).Encode(&besked)
hvis fejl!= nul {
Vend tilbage
}
}

Det slutpunktEksempel handlerfunktion tager i en http pakke forfatter og anmodning metodeforekomst og returnerer en besked til klienten med forfatter eksempel.

Prisbegrænsende en Simple Go-applikation

Takstbegrænsning via en brugers antal anmodninger eller det tilgængelige antal anmodninger er ens. Du skal altid oprette en begrænser før godkendelsesprocessen.

Sådan kan du oprette en hastighedsbegrænser og autorisere brugere baseret på antallet af anmodninger.

funcrateLimiterMiddleware(Næste func(forfatter http. ResponseWriter, anmod om *http. Anmodning)) http.HandlerFunc {
begrænser := rate. NewLimiter(3, 6) // maks. 6 anmodninger og derefter tre anmodninger mere i sekundet
Vend tilbage http. HandlerFunc(func(forfatter http. ResponseWriter, anmod om *http. Anmodning) {
hvis !begrænser. Give lov til() {
forfatter. Skrive([]byte("takstgrænse overskredet"))
Vend tilbage
} andet {
slutpunktEksempel (skribent, anmodning)
}
})
}

Det rateLimiterMiddleware handlerfunktion er en middleware, der accepterer en behandlerfunktion som argumentet og returnerer resultatet af autorisation efter oprettelse af en ny hastighedsbegrænser med New Limiter metode, der tager to parametre for antallet af anmodninger pr. sekund efter de angivne maksimale anmodninger.

Det Give lov til metoden for limiter-instansen returnerer en boolean baseret på status for autoriserede anmodninger. Det rateLimiterMiddleware returnerer JSON-meddelelsen, hvis anmodningen er godkendt eller "takstgrænse overskredet" besked, når klienten har sendt det maksimale antal anmodninger.

funcvigtigste() {
http. HandleFunc("/home", rateLimiterMiddleware (endpointExample))
fejl := http. ListenAndServe(":8080", nul)
hvis fejl!= nul {
log. Println("Der opstod en fejl under aflytning på port:8080", fejl)
}
}

Det vigtigste funktion monterer /home endepunkt til rateLimiterMiddleware handlerfunktion, der tager i slutpunktEksempel handlerfunktion.

Det ListenAndServe metode starter en server på localhost-porten 8080 og returnerer mulige fejl.

Du kan køre denne kommando på terminalen i dit arbejdsbibliotek eller med et bash-script for at teste slutpunktet efter at have kørt serveren.

til jeg i {1..10}; gør krølle http://localhost: 8080/hjem; Færdig

Koden rammer /home slutpunkt ti gange med en anmodning. Her er resultatet af anmodningerne.

Efter den sjette anmodning (maksimum) er klienten uautoriseret og kan ikke længere få adgang til slutpunktet.

Satsbegrænsning er vigtig

Satsbegrænsning er afgørende, især hvis du ønsker at reducere omkostningerne ved at hoste din applikation, vil reducere botinterferens eller sikre din app mod cyberangreb. Svarende til Go's sats pakke, npm giver ekspres-takst-grænse pakke til hastighedsbegrænsning af ekspresapplikationer.