Читаоци попут вас помажу у подршци МУО. Када обавите куповину користећи везе на нашем сајту, можда ћемо зарадити провизију за партнере.

Један од фактора који бисте можда желели да узмете у обзир приликом израде апликације је количина саобраћаја коју очекујете од корисника. Количина саобраћаја можда одлучује о више фактора који могу укључити доделу ресурса, посебно ако своју апликацију хостујете на добављачу услуга у облаку.

Ограничавање брзине је једна од техника које можете користити за контролу саобраћаја на вашој апликацији или мрежи.

Шта је ограничавање стопе?

Ограничавање брзине је широко распрострањена техника ограничења приступа за ограничавање мрежног саобраћаја, првенствено унутар спекулисаних временских оквира или када је корисник извршио неколико захтева.

Ограничавање брзине је популарно за смањење сајбер напада попут грубе силе и ДДоС (Дистрибутед Дениал оф Сервице), ограничавајући веб стругање, АПИ захтеви и друге нерегуларне интеракције корисника као што су аутоматизација ботова и оптерећење сервера.

Го пружа првокласну подршку за апликације које ограничавају брзину стопа пакет који обезбеђује лимитатор брзине и интероперише са време пакет.

Тхе стопа пакет је део Го пројекта, али пакет није доступан у стандардној библиотеци. Мораћете да инсталирате пакет са добити команда.

Покрените ову команду у терминалу вашег радног директоријума да додате пакет у зависности вашег пројекта.

иди добити "голанг.орг/к/тиме/рате"

Увезите ове пакете у своју Го датотеку за овај водич.

увоз (
"кодирање/јсон"
"голанг.орг/к/тиме/рате"
"Пријава"
"нет/хттп"
)

Тхе јсон пакет је за кодирање структуре као ЈСОН за клијента. Користићете Пријава пакет до Пријава грешке на конзоли и хттп пакет за изградњу крајње тачке и међувера и покретање сервера.

Прављење једноставног АПИ-ја са једном крајњом тачком

Конвенционално ћете написати средњи софтвер за функције руковаоца које желите да ограничите. Сваки пут када корисник пошаље захтев, средњи софтвер потврђује статус захтева пре него што пренесе приступ функцији руковаоца, у зависности од случаја.

Ево модела структуре са пољима стрингова које ћете кодирати клијенту.

тип Порука струцт {
Одговор низ`јсон:"одговор"`
Опис низ`јсон:"опис"`
}

Функција руковаоца ће поставити тип садржаја на ЈСОН, написати успешан статусни код и вратити кодирану инстанцу структуре клијенту.

фунцендпоинтЕкампле(писац хттп. РеспонсеВритер, захтев *хттп. Захтев) {
писац. Хеадер().Сет("Цонтент-Типе", "апплицатион/јсон")
писац. ВритеХеадер (хттп. Статус ОК)
порука := Порука{
Одговор: "Успешно",
Опис: "Успешно сте погодили АПИ крајњу тачку",
}
ерр := јсон. НевЕнцодер (писач).Енцоде(&мессаге)
ако ерр != нула {
повратак
}
}

Тхе ендпоинтЕкампле функција руковаоца преузима ан хттп пакет писац и захтев инстанцу методе и враћа поруку клијенту са писац инстанце.

Ограничавање брзине апликације Симпле Го

Ограничавање стопе преко броја захтева корисника или доступног броја захтева је слично. Увек ћете морати да креирате лимитер пре процеса ауторизације.

Ево како можете да креирате ограничавач брзине и овластите кориснике на основу броја захтева.

фунцратеЛимитерМиддлеваре(следећи фунц(писац хттп. РеспонсеВритер, захтев *хттп. Захтев)) хттп.ХандлерФунц {
лимитер := стопа. НевЛимитер(3, 6) // највише 6 захтева, а затим још три захтева у секунди
повратак хттп. ХандлерФунц(фунц(писац хттп. РеспонсеВритер, захтев *хттп. Захтев) {
ако !лимитер. Дозволи() {
писац. напиши([]бајт("ограничење стопа премашила "))
повратак
} друго {
ендпоинтЕкампле (писац, захтев)
}
})
}

Тхе ратеЛимитерМиддлеваре функција руковаоца је међувера која прихвата функцију руковаоца као аргумент и враћа резултат ауторизације након креирања новог лимитатора брзине са НевЛимитер метод који узима два параметра за број захтева у секунди након наведеног максималног броја захтева.

Тхе Дозволи метода инстанце лимитера враћа логичку вредност на основу статуса овлашћених захтева. Тхе ратеЛимитерМиддлеваре враћа ЈСОН поруку ако је захтев овлашћен или "ограничење стопа премашила " поруку када је клијент послао максималан број захтева.

фунцглавни() {
хттп. ХандлеФунц("/хоме", ратеЛимитерМиддлеваре (ендпоинтЕкампле))
ерр := хттп. ЛистенАндСерве(":8080", нула)
ако ерр != нула {
Пријава. Принтлн("Дошло је до грешке при слушању порта:8080", грешка)
}
}

Тхе главни функција монтира /home крајња тачка за ратеЛимитерМиддлеваре функција руковаоца која преузима ендпоинтЕкампле функција руковаоца.

Тхе ЛистенАндСерве метода покреће сервер на порту локалног хоста 8080 и враћа могуће грешке.

Ову команду можете покренути на терминалу вашег радног директоријума или са басх скрипта да тестирате крајњу тачку након покретања сервера.

за и ин {1..10}; урадите цурл http://localhost: 8080/хоме; Готово

Код погађа /home крајња тачка десет пута са захтевом. Ево резултата захтева.

Након шестог захтева (максимално), клијент је неовлашћен и више не може да приступи крајњој тачки.

Ограничавање стопе је важно

Ограничавање брзине је од суштинског значаја, посебно ако желите да смањите трошкове хостовања ваше апликације, желите да смањите сметње ботова или заштитите своју апликацију од сајбер напада. Слично Го'с стопа пакет, нпм обезбеђује експресно ограничење стопе пакет за експресне апликације са ограничењем стопе.