Lesere som deg er med på å støtte MUO. Når du foretar et kjøp ved å bruke lenker på nettstedet vårt, kan vi tjene en tilknyttet provisjon.

En av faktorene du kanskje vil vurdere når du bygger applikasjonen din, er mengden trafikk du forventer fra brukere. Mengden trafikk avgjør muligens flere faktorer som kan inkludere ressursallokering, spesielt hvis du er vert for appen din hos en skytjenesteleverandør.

Hastighetsbegrensning er en av teknikkene du kan bruke for å kontrollere trafikken på applikasjonen eller nettverket ditt.

Hva er satsbegrensning?

Hastighetsbegrensning er en utbredt tilgangsbegrensningsteknikk for å begrense nettverkstrafikk, primært innenfor spekulerte tidsrammer eller når brukeren har utført flere forespørsler.

Ratebegrensning er populært for å redusere cyberangrep som brute force og DDoS (Distribuert Denial of Service), begrensende nettskraping, API-forespørsler og andre uregelmessige brukerinteraksjoner som botautomatisering og serverbelastning.

Go gir førsteklasses støtte for ratebegrensende applikasjoner i

vurdere pakke som gir en hastighetsbegrenser og samvirker med tid pakke.

De vurdere pakken er en del av Go-prosjektet, men pakken er ikke tilgjengelig i standardbiblioteket. Du må installere pakken med kommando.

Kjør denne kommandoen i terminalen i arbeidskatalogen din for å legge pakken til prosjektets avhengigheter.

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

Importer disse pakkene til Go-filen for denne opplæringen.

import (
"encoding/json"
"golang.org/x/time/rate"
"Logg"
"net/http"
)

De json pakken er for å kode en struktur som JSON til klienten. Du vil bruke Logg pakke til Logg feil på konsollen og http pakke for å bygge endepunktet og mellomvaren og starte en server.

Bygge et enkelt API med ett endepunkt

Konvensjonelt vil du skrive en mellomvare for behandlerfunksjonene du vil vurdere grense for. Hver gang brukeren sender en forespørsel, validerer mellomvaren forespørselsstatusen før den videresender tilgang til behandlerfunksjonen, avhengig av tilfellet.

Her er strukturmodellen med strengfelt du skal kode til klienten.

type Beskjed struktur {
Respons streng`json:"svar"`
Beskrivelse streng`json:"beskrivelse"`
}

Behandlerfunksjonen vil sette innholdstypen til JSON, skrive en vellykket statuskode og returnere en kodet strukturforekomst til klienten.

funcendepunkteksempel(skribent http. ResponseWriter, be om *http. Be om) {
forfatter. Header().Set("Content-Type", "application/json")
forfatter. WriteHeader (http. StatusOK)
melding := melding{
Svar: "Vellykket",
Beskrivelse: "Du har nådd API-endepunktet",
}
feil := json. NewEncoder (writer).Encode(&melding)
hvis feil!= null {
komme tilbake
}
}

De endepunkteksempel handlerfunksjon tar inn en http pakke forfatter og be om metodeforekomst og returnerer en melding til klienten med forfatter forekomst.

Satsbegrensende en Simple Go-applikasjon

Satsbegrensning via en brukers antall forespørsler eller tilgjengelig antall forespørsler er lik. Du må alltid opprette en begrenser før autorisasjonsprosessen.

Slik kan du opprette en hastighetsbegrenser og autorisere brukere basert på antall forespørsler.

funcrateLimiterMiddelvare(neste func(skribent http. ResponseWriter, be om *http. Be om)) http.HandlerFunc {
begrenser := rate. NewLimiter(3, 6) // maks 6 forespørsler og deretter tre flere forespørsler per sekund
komme tilbake http. HandlerFunc(func(skribent http. ResponseWriter, be om *http. Be om) {
hvis !begrenser. Tillat() {
forfatter. Skrive([]byte("takstgrensen overskredet"))
komme tilbake
} ellers {
endepunkteksempel (skribent, forespørsel)
}
})
}

De rateLimiterMiddelvare handlerfunksjon er en mellomvare som godtar en behandlerfunksjon som argumentet og returnerer resultatet av autorisasjonen etter å ha opprettet en ny hastighetsbegrenser med NewLimiter metode som tar to parametere for antall forespørsler per sekund etter de angitte maksimale forespørslene.

De Tillate metoden for limiter-forekomsten returnerer en boolsk basert på statusen til autoriserte forespørsler. De rateLimiterMiddelvare returnerer JSON-meldingen hvis forespørselen er autorisert eller "satsgrense overskredet" melding når klienten har sendt maksimalt antall forespørsler.

funchoved-() {
http. HandleFunc("/home", rateLimiterMiddleware (endpointExample))
feil := http. ListenAndServe(":8080", null)
hvis feil!= null {
Logg. Println("Det oppstod en feil under lytting på port:8080", feil)
}
}

De hoved- funksjonen monterer /home endepunkt til rateLimiterMiddelvare handlerfunksjon som tar inn endepunkteksempel handlerfunksjon.

De ListenAndServe metoden starter en server på localhost-porten 8080 og returnerer mulige feil.

Du kan kjøre denne kommandoen på terminalen til arbeidskatalogen din eller med et bash-manus for å teste endepunktet etter å ha kjørt serveren.

til Jeg i {1..10}; gjøre krølle http://localhost: 8080/hjem; ferdig

Koden treffer /home endepunkt ti ganger med en forespørsel. Her er resultatet av forespørslene.

Etter den sjette forespørselen (maksimalt) er klienten uautorisert og kan ikke lenger få tilgang til endepunktet.

Prisbegrensning er viktig

Satsbegrensning er viktig, spesielt hvis du ønsker å kutte kostnadene ved å hoste applikasjonen din, vil redusere botinterferens eller sikre appen din mot cyberangrep. Ligner på Go's vurdere pakke, npm gir ekspresstakstgrense pakke for å begrense ekspressapplikasjoner.