Pembatasan Laju dan Perlindungan Kedalaman Kueri
Lindungi API GraphQL Spring Boot Anda dari penyalahgunaan dan penolakan layanan dengan membatasi frekuensi pemanggilan klien serta kedalaman susunan kuerinya.
Pembatasan Laju dan Perlindungan Kedalaman Kueri adalah pelajaran GraphQL APIs with Spring Boot gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar GraphQL APIs with Spring Boot, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus GraphQL APIs with Spring Boot mencakup 4 pelajaran total.
Bagian dari pelajaran ini belum diterjemahkan dan ditampilkan dalam bahasa Inggris.
Why GraphQL Needs Protection
A single GraphQL endpoint accepts arbitrarily complex queries. A malicious or careless client can request deeply nested data or hammer the server, exhausting resources.
Rate limiting and depth protection defend against these attacks.
The Nested Query Threat
Because GraphQL allows cyclic relationships, a client could ask for an author's books, each book's author, that author's books, and so on. This recursion can balloon into an enormous, expensive query.
query {
author {
books { author { books { author { name } } } }
}
}Limiting Query Depth
graphql-java provides MaxQueryDepthInstrumentation, which rejects any query that nests deeper than a set limit before execution begins.
@Bean
public Instrumentation depthLimit() {
return new MaxQueryDepthInstrumentation(10);
}Limiting Field Count
Beyond depth, a broad query can request thousands of fields. MaxQueryComplexityInstrumentation caps the total complexity score of a query.
@Bean
public Instrumentation complexityLimit() {
return new MaxQueryComplexityInstrumentation(200);
}What Is Rate Limiting?
Rate limiting caps how many requests a client may make in a time window. It prevents abuse and ensures fair resource sharing across clients.
The Token Bucket Idea
A common algorithm is the token bucket: each client has a bucket that refills at a steady rate. Every request consumes a token; if the bucket is empty, the request is rejected.
Rate Limiting with Bucket4j
The bucket4j library implements token buckets in Java. Configure a bucket with a refill rate and capacity.
Bandwidth limit = Bandwidth.simple(100, Duration.ofMinutes(1));
Bucket bucket = Bucket.builder().addLimit(limit).build();Enforcing the Limit
Before processing a request, try to consume a token. If none is available, return an error instead of executing the query.
if (!bucket.tryConsume(1)) {
throw new RateLimitException("Too many requests");
}Per-Client Buckets
Track a separate bucket per client, keyed by API key or authenticated user ID, so one heavy client cannot starve everyone else.
Bucket bucket = buckets.computeIfAbsent(userId, k -> newBucket());Combining Defenses
Layer your protections for full coverage:
- Depth limit stops recursive abuse
- Complexity limit stops broad expensive queries
- Rate limit stops request floods
- Timeouts stop slow runaway operations
Best Practices
Tune limits to your real traffic:
- Start strict, then relax based on monitoring
- Return clear errors so clients can back off
- Apply tighter limits to unauthenticated traffic
- Log rejected queries to spot abuse patterns
Quick Check
Test your API protection knowledge.
Recap
You hardened your GraphQL API:
- Depth and complexity instrumentation block expensive queries
- Rate limiting caps request frequency per client
- Token buckets (bucket4j) implement fair limits
- Layer depth, complexity, rate, and timeout defenses
These guards keep your API available and resilient under abuse.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pembatasan Laju dan Perlindungan Kedalaman Kueri” gratis?
Ya — teks lengkap “Pembatasan Laju dan Perlindungan Kedalaman Kueri” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus GraphQL APIs with Spring Boot, upgrade ke CoddyKit PRO. Kursus GraphQL APIs with Spring Boot mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pembatasan Laju dan Perlindungan Kedalaman Kueri”?
Lindungi API GraphQL Spring Boot Anda dari penyalahgunaan dan penolakan layanan dengan membatasi frekuensi pemanggilan klien serta kedalaman susunan kuerinya. Kamu berlatih GraphQL APIs with Spring Boot dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai GraphQL APIs with Spring Boot?
Tidak diperlukan pengalaman sebelumnya. GraphQL APIs with Spring Boot di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Pembatasan Laju dan Perlindungan Kedalaman Kueri” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran GraphQL APIs with Spring Boot ini?
Ya. Setiap pelajaran GraphQL APIs with Spring Boot menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Penanganan Galat Kustom di GraphQL
- Autentikasi dengan Spring Security
- Otorisasi dengan Direktif dan Konteks
- Pembatasan Laju dan Perlindungan Kedalaman Kueri