Ograniczanie częstotliwości i ochrona przed zbyt głębokimi zapytaniami
Ochronią Państwo API GraphQL w Spring Boot przed nadużyciami i atakami typu denial-of-service, ograniczając częstotliwość wywołań klientów oraz głębokość zagnieżdżenia ich zapytań.
Ograniczanie częstotliwości i ochrona przed zbyt głębokimi zapytaniami to bezpłatna lekcja GraphQL APIs with Spring Boot na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej GraphQL APIs with Spring Boot, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs GraphQL APIs with Spring Boot zawiera 4 lekcji w sumie.
Części tej lekcji nie zostały jeszcze przetłumaczone i są wyświetlane po angielsku.
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.
Ucz się GraphQL APIs with Spring Boot dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 12
- Lekcje
- 48
Często zadawane pytania
Czy lekcja „Ograniczanie częstotliwości i ochrona przed zbyt głębokimi zapytaniami” jest bezpłatna?
Tak — pełny tekst „Ograniczanie częstotliwości i ochrona przed zbyt głębokimi zapytaniami” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu GraphQL APIs with Spring Boot, przejdź na CoddyKit PRO. Kurs GraphQL APIs with Spring Boot zawiera 4 lekcji w sumie.
Co nauczysz się w „Ograniczanie częstotliwości i ochrona przed zbyt głębokimi zapytaniami”?
Ochronią Państwo API GraphQL w Spring Boot przed nadużyciami i atakami typu denial-of-service, ograniczając częstotliwość wywołań klientów oraz głębokość zagnieżdżenia ich zapytań. Ćwiczysz GraphQL APIs with Spring Boot z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć GraphQL APIs with Spring Boot?
Nie wymagamy żadnego doświadczenia. GraphQL APIs with Spring Boot w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Ograniczanie częstotliwości i ochrona przed zbyt głębokimi zapytaniami”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji GraphQL APIs with Spring Boot?
Tak. Każda lekcja GraphQL APIs with Spring Boot zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Niestandardowa obsługa błędów w GraphQL
- Uwierzytelnianie za pomocą Spring Security
- Autoryzacja za pomocą dyrektyw i kontekstu
- Ograniczanie częstotliwości i ochrona przed zbyt głębokimi zapytaniami