GraphQL APIs with Spring Boot · Ders

Hız Sınırlama ve Sorgu Derinliği Koruması

İstemcilerin ne sıklıkta çağrı yapabileceğini ve sorgularının ne kadar iç içe olabileceğini sınırlayarak Spring Boot GraphQL API'nizi kötüye kullanım ve hizmet reddi saldırılarına karşı koruyun.

4. ders / 413 adım

Hız Sınırlama ve Sorgu Derinliği Koruması, CoddyKit'te ücretsiz bir GraphQL APIs with Spring Boot dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, GraphQL APIs with Spring Boot öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. GraphQL APIs with Spring Boot kursu toplamda 4 dersten oluşur.

Bu dersin bazı bölümleri henüz çevrilmemiş olup İngilizce olarak gösterilmektedir.

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.

Başlamak ücretsiz

Yapay zeka eğitmeniyle GraphQL APIs with Spring Boot öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
12
Dersler
48

Sıkça Sorulan Sorular

“Hız Sınırlama ve Sorgu Derinliği Koruması” dersi ücretsiz mi?

Evet — “Hız Sınırlama ve Sorgu Derinliği Koruması” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve GraphQL APIs with Spring Boot kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. GraphQL APIs with Spring Boot kursu toplamda 4 dersten oluşur.

“Hız Sınırlama ve Sorgu Derinliği Koruması” dersinde ne öğreneceğim?

İstemcilerin ne sıklıkta çağrı yapabileceğini ve sorgularının ne kadar iç içe olabileceğini sınırlayarak Spring Boot GraphQL API'nizi kötüye kullanım ve hizmet reddi saldırılarına karşı koruyun. GraphQL APIs with Spring Boot ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

GraphQL APIs with Spring Boot öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te GraphQL APIs with Spring Boot, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Hız Sınırlama ve Sorgu Derinliği Koruması” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu GraphQL APIs with Spring Boot dersinde kod yazıp çalıştırabilir miyim?

Evet. Her GraphQL APIs with Spring Boot dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. GraphQL'de Özel Hata Yönetimi
  2. Spring Security ile Kimlik Doğrulama
  3. Yönergeler ve Bağlam ile Yetkilendirme
  4. Hız Sınırlama ve Sorgu Derinliği Koruması
← GraphQL APIs with Spring Boot Sayfasına Dön