Teiesugused lugejad aitavad MUO-d toetada. Kui teete ostu meie saidil olevate linkide abil, võime teenida sidusettevõtte komisjonitasu.

Üks tegureid, mida võiksite rakenduse loomisel arvestada, on kasutajatelt oodatav liiklus. Liikluse hulk võib-olla määrab rohkem tegureid, mis võivad hõlmata ressursside eraldamist, eriti kui hostite oma rakendust pilveteenuse pakkuja juures.

Kiiruse piiramine on üks tehnikatest, mida saate oma rakenduses või võrgus liikluse juhtimiseks kasutada.

Mis on määra piiramine?

Kiiruse piiramine on laialt levinud juurdepääsupiirangu tehnika võrguliikluse piiramiseks, peamiselt spekuleeritud ajavahemike jooksul või siis, kui kasutaja on täitnud mitu päringut.

Kiiruse piiramine on populaarne küberrünnakute vähendamiseks, nagu toore jõud ja DDoS (hajutatud teenuse keelamine), piirates veebikraapimine, API päringud ja muud ebaregulaarsed kasutaja interaktsioonid, nagu robotite automatiseerimine ja serveri pinge.

Go pakub esmaklassilist tuge kiirust piiravate rakenduste jaoks määra pakett, mis pakub kiiruse piirajat ja töötab koos aega pakett.

instagram viewer

The määra pakett on osa Go projektist, kuid pakett pole standardteegis saadaval. Peate installima paketi koos saada käsk.

Käivitage see käsk oma töökataloogi terminalis, et lisada pakett oma projekti sõltuvustesse.

mine hankige "golang.org/x/time/rate"

Importige need paketid selle õpetuse jaoks oma Go-faili.

importida (
"kodeering/json"
"golang.org/x/time/rate"
"logi"
"net/http"
)

The json pakett on mõeldud struktuuri kodeerimiseks JSON-ina kliendile. Sa kasutad logi pakkida logi vead konsooli ja http pakett lõpp-punkti ja vahevara loomiseks ning serveri käivitamiseks.

Ühe lõpp-punktiga lihtsa API loomine

Tavaliselt kirjutate vahevara käitleja funktsioonide jaoks, mille piiranguid soovite piirata. Iga kord, kui kasutaja saadab päringu, kontrollib vahevara päringu olekut enne töötleja funktsioonile juurdepääsu edastamist, olenevalt juhtumist.

Siin on stringiväljadega struktuurimudel, mille kliendile kodeerite.

tüüp Sõnum struktuur {
Vastus string`json:"vastus"`
Kirjeldus string`json:"kirjeldus"`
}

Töötleja funktsioon määrab sisutüübiks JSON, kirjutab eduka olekukoodi ja tagastab kliendile kodeeritud struktuurieksemplari.

funclõpp-punktNäide(kirjanik http. ResponseWriter, päring *http. taotlus) {
kirjanik. Header().Set("Content-Type", "application/json")
kirjanik. WriteHeader (http. Olek OK)
sõnum := sõnum{
Vastus: "Edukad",
Kirjeldus: "Olete edukalt tabanud API lõpp-punkti",
}
eksitus := json. NewEncoder (kirjutaja). Kodeeri (&sõnum)
kui eks!= null {
tagasi
}
}

The lõpp-punktNäide käitleja funktsioon võtab sisse an http pakett kirjanik ja nõuda meetodi eksemplar ja tagastab kliendile sõnumi koos kirjanik näiteks.

Lihtsat käiku rakendust piirav hind

Määra piirang kasutaja päringute arvu või saadaoleva taotluste arvu kaudu on sarnane. Enne autoriseerimisprotsessi peate alati looma piiraja.

Siit saate teada, kuidas saate luua kiiruse piiraja ja volitada kasutajaid päringute arvu alusel.

funcrateLimiterMiddleware(järgmine func(kirjanik http. ResponseWriter, päring *http. taotlus)) http.HandlerFunc {
piiraja := määr. NewLimiter(3, 6) // max 6 päringut ja siis veel kolm päringut sekundis
tagasi http. HandlerFunc(func(kirjanik http. ResponseWriter, päring *http. taotlus) {
kui !piiraja. Lubama() {
kirjanik. Kirjuta ([]bait("määra piirang ületatud"))
tagasi
} muidu {
lõpp-punktNäide (kirjutaja, taotlus)
}
})
}

The rateLimiterMiddleware käitleja funktsioon on vahevara, mis aktsepteerib argumendina käitleja funktsiooni ja tagastab autoriseerimise tulemuse pärast uue kiiruse piiraja loomist Uus Limiter meetod, mis võtab pärast määratud maksimaalset taotluste arvu kaks parameetrit taotluste arvu jaoks sekundis.

The Lubama piiraja eksemplari meetod tagastab tõeväärtuse, mis põhineb volitatud päringute olekul. The rateLimiterMiddleware tagastab JSON-sõnumi, kui päring on volitatud või "määra piirang ületatud" teade, kui klient on saatnud maksimaalse arvu päringuid.

funcpeamine() {
http. HandleFunc("/home", rateLimiterMiddleware (endpointExample))
viga := http. ListenAndServe(":8080", null)
kui eks!= null {
logi. Println("Pordi kuulamisel tekkis viga:8080", eksitus)
}
}

The peamine funktsioon kinnitab /home lõpp-punktile rateLimiterMiddleware käitleja funktsioon, mis võtab sisse lõpp-punktNäide käitleja funktsioon.

The Kuula ja teeninda meetod käivitab serveri kohaliku hosti pordis 8080 ja tagastab võimalikud vead.

Saate selle käsu käivitada oma töökataloogi terminalis või koos bash-skript lõpp-punkti testimiseks pärast serveri käivitamist.

jaoks i sisse {1..10}; teha lokk http://localhost: 8080/kodu; tehtud

Kood tabab /home lõpp-punkt kümme korda taotlusega. Siin on taotluste tulemused.

Pärast kuuendat päringut (maksimaalselt) on klient volitamata ega pääse enam lõpp-punktile juurde.

Hindade piiramine on oluline

Kiiruse piiramine on oluline, eriti kui soovite vähendada oma rakenduse hostimise kulusid, vähendada robotite häireid või kaitsta oma rakendust küberrünnakute eest. Sarnane Go omale määra pakett, npm pakub kiirkiiruse piirmäär piiranguga kiirrakenduste paketti.