קוראים כמוך עוזרים לתמוך ב-MUO. כאשר אתה מבצע רכישה באמצעות קישורים באתר שלנו, אנו עשויים להרוויח עמלת שותף.
אחד הגורמים שאולי תרצה לקחת בחשבון בעת בניית האפליקציה שלך הוא כמות התנועה שאתה מצפה מהמשתמשים. כמות התעבורה עשויה להחליט על גורמים נוספים שעשויים לכלול הקצאת משאבים, במיוחד אם אתה מארח את האפליקציה שלך אצל ספק שירותי ענן.
הגבלת קצב היא אחת הטכניקות שבהן תוכל להשתמש כדי לשלוט על התעבורה באפליקציה או ברשת שלך.
מהי הגבלת תעריפים?
הגבלת קצב היא טכניקת הגבלת גישה נרחבת להגבלת תעבורת רשת, בעיקר במסגרת זמן משוער או כאשר המשתמש ביצע מספר בקשות.
הגבלת קצב פופולרית לצמצום התקפות סייבר כמו כוח גס ו DDoS (מניעת שירות מבוזרת), מגביל גירוד רשת, בקשות API ואינטראקציות לא סדירות אחרות של משתמשים כמו אוטומציה של בוט ומתח שרת.
Go מספקת תמיכה מהשורה הראשונה עבור יישומים מגבילי קצב ב- ציון חבילה המספקת מגביל תעריף ופועלת הדדית עם זְמַן חֲבִילָה.
ה ציון החבילה היא חלק מפרויקט Go, אך החבילה אינה זמינה בספרייה הרגילה. תצטרך להתקין את החבילה עם ה לקבל פקודה.
הפעל פקודה זו בטרמינל של ספריית העבודה שלך כדי להוסיף את החבילה לתלות של הפרויקט שלך.
ללכת קבל "golang.org/x/time/rate"
ייבא חבילות אלה לקובץ ה-Go שלך עבור הדרכה זו.
יְבוּא (
"קידוד/json"
"golang.org/x/time/rate"
"עֵץ"
"נטו/http"
)
ה json החבילה מיועדת לקידוד struct בתור JSON ללקוח. אתה תשתמש ב- עֵץ חבילה ל עֵץ שגיאות בקונסולה וב- http חבילה לבניית נקודת הקצה והתווך והפעלת שרת.
בניית ממשק API פשוט עם נקודת קצה אחת
באופן קונבנציונלי, אתה תכתוב תוכנת ביניים עבור פונקציות המטפל שאתה רוצה להגביל. בכל פעם שהמשתמש שולח בקשה, התווך מאמת את סטטוס הבקשה לפני העברת גישה לפונקציית המטפל, בהתאם למקרה.
הנה מודל ה-struct עם שדות מחרוזת שתקודד ללקוח.
סוּג הוֹדָעָה struct {
תְגוּבָה חוּט`json:"תגובה"`
תיאור חוּט`json:"תיאור"`
}
פונקציית המטפל תגדיר את סוג התוכן ל-JSON, תכתוב קוד סטטוס מוצלח ותחזיר מופע struct מקודד ללקוח.
funcנקודת קצהExample(כותב http. כותב תגובה, בקשה *http. בַּקָשָׁה) {
סוֹפֵר. Header().Set("Content-Type", "application/json")
סוֹפֵר. WriteHeader (http. סטטוס אישור)
הודעה := הודעה{
תגובה: "מוצלח",
תיאור: "הגעת בהצלחה לנקודת הקצה של ה-API",
}
טעות := json. NewEncoder (סופר).Encode(&message)
אם טעות != אֶפֶס {
לַחֲזוֹר
}
}
ה נקודת קצהExample פונקציית המטפל לוקחת ב-an http חֲבִילָה סוֹפֵר ו בַּקָשָׁה מופע שיטת ומחזיר הודעה ללקוח עם ה סוֹפֵר למשל.
תעריף הגבלת יישום Simple Go
הגבלת התעריפים באמצעות מספר הבקשות של משתמש או מספר הבקשות הזמין דומה. תמיד תצטרך ליצור מגביל לפני תהליך ההרשאה.
כך תוכל ליצור מגביל תעריף ולאשר משתמשים על סמך מספר הבקשות.
funcrateLimiter תוכנת אמצעית(הַבָּא func(כותב http. כותב תגובה, בקשה *http. בַּקָשָׁה)) http.HandlerFunc {
מגביל := שיעור. NewLimiter(3, 6) // מקסימום 6 בקשות ולאחר מכן שלוש בקשות נוספות בשנייה
לַחֲזוֹר http. HandlerFunc(func(כותב http. כותב תגובה, בקשה *http. בַּקָשָׁה) {
אם !מַגְבִּיל. להתיר() {
סוֹפֵר. לִכתוֹב([]בייט("חריגה ממגבלת התעריף"))
לַחֲזוֹר
} אַחֵר {
endpointExample (כותב, בקשה)
}
})
}
ה rateLimiter תוכנת אמצעית פונקציית מטפל היא תוכנת ביניים שמקבלת פונקציית מטפל כארגומנט ומחזירה את תוצאת ההרשאה לאחר יצירת מגביל קצב חדש עם ה- NewLimiter שיטה שלוקחת שני פרמטרים למספר הבקשות בשנייה לאחר הבקשות המקסימליות שצוינו.
ה להתיר השיטה של מופע המגביל מחזירה ערך בוליאני על סמך מצב הבקשות המורשות. ה rateLimiter תוכנת אמצעית מחזירה את הודעת ה-JSON אם הבקשה מורשית או "חריגה ממגבלת התעריף" הודעה כאשר הלקוח שלח את המספר המרבי של בקשות.
funcרָאשִׁי() {
http. HandleFunc("/home", rateLimiterMiddleware (endpointExample))
טעות := http. ListenAndServe(":8080", אֶפֶס)
אם טעות != אֶפֶס {
עֵץ. Println("היתה שגיאה בהאזנה ביציאה:8080", טעות)
}
}
ה רָאשִׁי הפונקציה מעלה את /home נקודת קצה אל rateLimiter תוכנת אמצעית פונקציית מטפל שמקבלת את נקודת קצהExample פונקציית מטפל.
ה ListenAndServe השיטה פותחת שרת ביציאת localhost 8080 ומחזיר שגיאות אפשריות.
אתה יכול להפעיל פקודה זו במסוף של ספריית העבודה שלך או עם תסריט bash כדי לבדוק את נקודת הקצה לאחר הפעלת השרת.
ל אני ב {1..10}; לַעֲשׂוֹת סִלְסוּל http://localhost: 8080/בית; בוצע
הקוד פוגע ב- /home נקודת קצה עשר פעמים עם בקשה. להלן התוצאה של הבקשות.
לאחר הבקשה השישית (מקסימום), הלקוח אינו מורשה ואינו יכול יותר לגשת לנקודת הקצה.
הגבלת תעריפים חשובה
הגבלת תעריפים היא הכרחית, במיוחד אם אתה מחפש להוזיל את העלות של אירוח האפליקציה שלך, רוצה להפחית את הפרעות הבוטים או לאבטח את האפליקציה שלך מפני התקפות סייבר. דומה לזה של Go ציון חבילה, npm מספקת את מגבלת שיעור אקספרס חבילה להגבלת שיעור יישומים אקספרס.