Pembaca seperti Anda membantu mendukung MUO. Saat Anda melakukan pembelian menggunakan tautan di situs kami, kami dapat memperoleh komisi afiliasi.

Salah satu faktor yang mungkin ingin Anda pertimbangkan saat membuat aplikasi adalah jumlah lalu lintas yang Anda harapkan dari pengguna. Jumlah lalu lintas mungkin menentukan lebih banyak faktor yang mungkin mencakup alokasi sumber daya, terutama jika Anda menghosting aplikasi di penyedia layanan cloud.

Pembatasan kecepatan adalah salah satu teknik yang dapat Anda gunakan untuk mengontrol lalu lintas pada aplikasi atau jaringan Anda.

Apa itu Pembatasan Tarif?

Pembatasan kecepatan adalah teknik pembatasan akses yang tersebar luas untuk membatasi lalu lintas jaringan, terutama dalam kerangka waktu yang diperkirakan atau ketika pengguna telah menjalankan beberapa permintaan.

Pembatasan nilai populer untuk mengurangi serangan dunia maya seperti kekerasan dan DDoS (Penolakan Layanan Terdistribusi), membatasi pengikisan web, permintaan API, dan interaksi pengguna tidak teratur lainnya seperti otomatisasi bot dan beban server.

Go menyediakan dukungan kelas satu untuk aplikasi pembatasan kecepatan di kecepatan paket yang menyediakan pembatas laju dan beroperasi dengan waktu kemasan.

Itu kecepatan paket adalah bagian dari proyek Go, tetapi paket tersebut tidak tersedia di pustaka standar. Anda harus menginstal paket dengan mendapatkan memerintah.

Jalankan perintah ini di terminal direktori kerja Anda untuk menambahkan paket ke dependensi proyek Anda.

pergi dapatkan "golang.org/x/time/rate"

Impor paket-paket ini ke file Go Anda untuk tutorial ini.

impor (
"pengkodean/json"
"golang.org/x/time/rate"
"catatan"
"net/http"
)

Itu json paket adalah untuk menyandikan struct sebagai JSON ke klien. Anda akan menggunakan catatan paket ke catatan kesalahan ke konsol dan http paket untuk membangun titik akhir dan middleware dan memulai server.

Membangun API Sederhana Dengan Satu Titik Akhir

Secara konvensional, Anda akan menulis middleware untuk fungsi penangan yang ingin Anda nilai batasnya. Setiap kali pengguna mengirim permintaan, middleware memvalidasi status permintaan sebelum meneruskan akses ke fungsi penangan, tergantung pada kasusnya.

Inilah model struct dengan bidang string yang akan Anda enkode ke klien.

jenis Pesan struct {
Tanggapan rangkaian`json:"respons"`
Keterangan rangkaian`json:"deskripsi"`
}

Fungsi handler akan menyetel tipe konten ke JSON, menulis kode status yang berhasil, dan mengembalikan instance struct yang disandikan ke klien.

fungsicontoh titik akhir(penulis http. ResponseWriter, minta *http. Meminta) {
penulis. Header().Set("Content-Type", "application/json")
penulis. WriteHeader (http. StatusOK)
pesan := Pesan{
Tanggapan: "Berhasil",
Deskripsi: "Anda telah berhasil mencapai titik akhir API",
}
salah := json. NewEncoder (penulis).Encode(&pesan)
jika salah!= nol {
kembali
}
}

Itu contoh titik akhir fungsi handler mengambil sebuah http kemasan penulis Dan meminta contoh metode dan mengembalikan pesan ke klien dengan penulis contoh.

Tingkat Membatasi Aplikasi Simple Go

Pembatasan tarif melalui jumlah permintaan pengguna atau jumlah permintaan yang tersedia serupa. Anda harus selalu membuat pembatas sebelum proses otorisasi.

Inilah cara Anda dapat membuat pembatas tarif dan mengotorisasi pengguna berdasarkan jumlah permintaan.

fungsirateLimiterMiddleware(Berikutnya fungsi(penulis http. ResponseWriter, minta *http. Meminta)) http.HandlerFunc {
pembatas := laju. BatasBaru(3, 6) // maksimal 6 permintaan dan kemudian tiga permintaan lagi per detik
kembali http. HandlerFunc(fungsi(penulis http. ResponseWriter, minta *http. Meminta) {
jika !pembatas. Mengizinkan() {
penulis. Menulis([]byte("batas tarif terlampaui"))
kembali
} kalau tidak {
endpointExample (penulis, permintaan)
}
})
}

Itu rateLimiterMiddleware fungsi handler adalah middleware yang menerima fungsi handler sebagai argumen dan mengembalikan hasil otorisasi setelah membuat pembatas laju baru dengan Batas Baru metode yang mengambil dua parameter untuk jumlah permintaan per detik setelah permintaan maksimum yang ditentukan.

Itu Mengizinkan metode instance limiter mengembalikan boolean berdasarkan status permintaan resmi. Itu rateLimiterMiddleware mengembalikan pesan JSON jika permintaan diotorisasi atau "batas tarif terlampaui" pesan ketika klien telah mengirimkan jumlah maksimum permintaan.

fungsiutama() {
http. HandleFunc("/rumah", rateLimiterMiddleware (endpointExample))
salah := http. DengarkanDanServis(":8080", nol)
jika salah!= nol {
catatan. Println("Ada kesalahan saat mendengarkan port :8080", salah)
}
}

Itu utama fungsi me-mount /home titik akhir ke rateLimiterMiddleware fungsi handler yang mengambil di contoh titik akhir fungsi penangan.

Itu Dengarkan Dan Sajikan metode memulai server di port localhost 8080 dan mengembalikan kemungkinan kesalahan.

Anda dapat menjalankan perintah ini di terminal direktori kerja Anda atau dengan skrip bash untuk menguji titik akhir setelah menjalankan server.

untuk Saya di dalam {1..10}; Mengerjakan keriting http://localhost: 8080/rumah; Selesai

Kode menyentuh /home titik akhir sepuluh kali dengan permintaan. Berikut hasil requestnya.

Setelah permintaan keenam (maksimum), klien tidak sah dan tidak dapat lagi mengakses titik akhir.

Pembatasan Tarif Itu Penting

Pembatasan tarif sangat penting, terutama jika Anda ingin memotong biaya hosting aplikasi Anda, ingin mengurangi gangguan bot, atau mengamankan aplikasi Anda dari serangan dunia maya. Mirip dengan Go kecepatan paket, npm menyediakan batas-tingkat-ekspres paket ke aplikasi ekspres dengan batas tarif.