smaple.tr
GraphQL

GraphQL Federation ve API Birlestirme Rehberi [2026]

Mehmet Kurtipek
5 Temmuz 2026
10 dk okuma
GraphQL
federation
API
Apollo
subgraph
schema composition

GraphQL Federation Nedir ve Neden Onemlidir

Mikroservis mimarileri yayginlastikca, her servisin kendi API katmanini sunmasi karmasik bir entegrasyon sorununa donustu. Istemci tarafinda onlarca endpoint ile iletisim kurmak, veri birlestirme islemlerini frontend katmanina yiklemek ve tutarli bir API deneyimi saglamak giderek zorlasti. GraphQL Federation, bu soruna yapisal bir cozum sunar.

GraphQL Federation, birden fazla bagimsiz GraphQL servisini (subgraph) tek bir birlesik schema (supergraph) altinda toplayan bir mimari yaklasimdir. Her takim kendi subgraph'ini bagimsiz olarak gelistirir, deploy eder ve yonetir. Gateway katmani ise gelen sorgulari analiz ederek ilgili subgraph'lara yonlendirir ve sonuclari birlestirerek istemciye tek bir yanit dondurur.

Apollo Federation v2, bu alanda fiili standart haline gelmistir. Ilk surume kiyasla onemli iyilestirmeler sunar: @shareable direktifi ile birden fazla subgraph'in ayni alani sunabilmesi, @override ile alan sahipliginin transfer edilmesi ve @inaccessible ile dahili alanlarin supergraph'tan gizlenebilmesi gibi yetenekler eklenmistir.

Monolithic GraphQL ve Federated GraphQL Karsilastirmasi

Monolitik ve federated yaklasimlar arasindaki farklari net olarak anlamak, dogru mimari karari vermek icin kritiktir.

Kriter Monolithic GraphQL Federated GraphQL
Schema yonetimi Tek buyuk schema dosyasi Dagitik subgraph schemalari
Takim bagimsizligi Dusuk, tek repo baglimliligi Yuksek, her takim kendi subgraph'ini yonetir
Deploy sureci Tum schema birlikte deploy edilir Subgraph'lar bagimsiz deploy edilir
Olceklenebilirlik Dikey olceklendirme Yatay, subgraph bazinda olceklendirme
Performans overhead Dusuk, tek servis Orta, gateway ve network hop maliyeti
Karmasiklik Baslangicta dusuk Baslangicta yuksek, olcekte dusuk
Hata izolasyonu Tek hata noktasi Subgraph bazinda izolasyon

Kucuk ve orta olcekli projelerde monolitik GraphQL yeterli olabilir. Ancak birden fazla takimin calistigi, farkli deploy dongulerinin gerektigi ve servislerin bagimsiz olceklenmesi gereken ortamlarda federation kacinilmaz hale gelir.

Subgraph Tasarimi ve Entity Resolution

Federation mimarisinin temel yapi tasi subgraph'lardir. Her subgraph, belirli bir is alanini (domain) temsil eder ve kendi GraphQL schemasini tanimlar. Iyi bir subgraph tasarimi icin su ilkelere dikkat edilmelidir:

Domain Boundary Belirleme

Subgraph sinirlari, is alani sinirlarini takip etmelidir. Ornegin bir e-ticaret platformunda:

  • Users Subgraph: Kullanici yonetimi, profil, adresler
  • Products Subgraph: Urun katalogu, kategoriler, stok
  • Orders Subgraph: Siparis yonetimi, siparis durumu
  • Reviews Subgraph: Urun degerlendirmeleri, puanlama

Entity Tanimlama

Entity'ler, subgraph'lar arasinda paylasilan ve referans edilen tiplerdir. Bir entity, bir subgraph'ta tanimlanir ve diger subgraph'lar tarafindan genisletilir:

# Users Subgraph
type User @key(fields: "id") {
  id: ID!
  name: String!
  email: String!
  createdAt: DateTime!
}

# Orders Subgraph - User entity'sini genisletir
type User @key(fields: "id") {
  id: ID!
  orders: [Order!]!
  totalSpent: Float!
}

type Order @key(fields: "id") {
  id: ID!
  user: User!
  items: [OrderItem!]!
  status: OrderStatus!
  createdAt: DateTime!
}

Entity Resolution

Gateway bir sorguyu islerken, farkli subgraph'lardan gelen verileri birlestirmek icin entity resolution mekanizmasini kullanir. Her subgraph, sahip oldugu entity'ler icin bir __resolveReference fonksiyonu tanimlar:

// Users Subgraph - reference resolver
const resolvers = {
  User: {
    __resolveReference(reference) {
      // reference.id ile kullaniciyi veritabanindan getir
      return usersService.findById(reference.id);
    }
  }
};

Bu mekanizma sayesinde gateway, User entity'sinin id alanini kullanarak ilgili subgraph'tan tam veriyi ceker ve diger subgraph'lardan gelen verilerle birlestirir.

Schema Composition ve Supergraph

Schema composition, birden fazla subgraph schemasinin tek bir supergraph schema'ya donusturulme surrecidir. Bu islem build zamaninda gerceklesir ve olusturulan supergraph schema dosyasi gateway'e yuklenir.

Composition Sureci

# Apollo Rover CLI ile schema composition
rover supergraph compose --config ./supergraph-config.yaml > supergraph.graphql

# supergraph-config.yaml ornegi
federation_version: =2.7
subgraphs:
  users:
    routing_url: http://users-service:4001/graphql
    schema:
      file: ./schemas/users.graphql
  products:
    routing_url: http://products-service:4002/graphql
    schema:
      file: ./schemas/products.graphql
  orders:
    routing_url: http://orders-service:4003/graphql
    schema:
      file: ./schemas/orders.graphql

Composition Hatalari ve Cozumleri

Schema composition sirasinda en sik karsilasilan hatalar ve cozumleri:

  • FIELD_TYPE_MISMATCH: Ayni alanin farkli subgraph'larda farkli tiplerle tanimlanmasi. Cozum olarak @shareable direktifi ile ortak alanlari isaretleyin.
  • EXTERNAL_MISSING_ON_BASE: Bir subgraph'ta @external olarak isaretlenen alanin kaynak subgraph'ta bulunmamasi. Kaynak subgraph'taki schema'yi kontrol edin.
  • OVERRIDE_COLLISION: Birden fazla subgraph'in ayni alani override etmeye calismasi. Alan sahipligini netlestirin.

Composition islemini CI/CD pipeline'ina entegre ederek, her subgraph degisikliginde otomatik dogrulama yapmak onemlidir. Bu sayede uyumsuz degisiklikler uretim ortamina ulasmadan tespit edilir.

Gateway ve Router Secenekleri

Gateway, federation mimarisinin merkezi bilesenidir. Gelen GraphQL sorgularini analiz eder, query plan olusturur ve ilgili subgraph'lara dagitir.

Apollo Router

Apollo Router, Rust tabanli yuksek performansli bir gateway cozumudur. Apollo Federation v2 ile tam uyumlu calisir ve production ortamlari icin onerilir:

# router.yaml konfigurasyonu
supergraph:
  listen: 0.0.0.0:4000
  path: /graphql

headers:
  all:
    request:
      - propagate:
          named: "authorization"
      - propagate:
          named: "x-request-id"

telemetry:
  instrumentation:
    spans:
      mode: spec_compliant
  exporters:
    tracing:
      otlp:
        enabled: true
        endpoint: http://otel-collector:4317

traffic_shaping:
  all:
    timeout: 30s
  subgraphs:
    products:
      timeout: 10s

GraphQL Mesh

GraphQL Mesh, farkli veri kaynaklarini (REST, gRPC, SOAP, veritabanlari) GraphQL olarak birlestirme yetenegine sahip bir alternatiftir. Ozellikle mevcut REST API'lerin federation'a dahil edilmesi gerektiginde guclu bir secenektir:

# .meshrc.yaml
sources:
  - name: LegacyREST
    handler:
      openapi:
        source: ./openapi-spec.yaml
        baseUrl: http://legacy-api:3000
  - name: ProductsGraphQL
    handler:
      graphql:
        endpoint: http://products-service:4002/graphql

Smart Maple olarak Ankara merkezli projelerimizde, mevcut REST API altyapilarini GraphQL federation'a gecirirken GraphQL Mesh'i gecis katmani olarak siklikla kullaniyoruz.

Performans Optimizasyonu

Federation mimarisinde performans, birden fazla network hop ve veri birlestirme islemleri nedeniyle ozenle yonetilmesi gereken bir konudur.

Query Planning

Gateway, gelen her sorgu icin bir query plan olusturur. Bu plan, hangi subgraph'larin hangi sirada cagirilacagini ve verilerin nasil birlestirilecegini belirler. Iyi tasarlanmis bir schema, paralel calisabilecek subgraph cagrilarini maksimize eder:

# Verimli sorgu - paralel fetch mumkun
query {
  user(id: "123") {
    name          # Users subgraph
    email         # Users subgraph
  }
  products(limit: 10) {
    title         # Products subgraph
    price         # Products subgraph
  }
}

# Seri bagimllik gerektiren sorgu
query {
  user(id: "123") {
    name          # 1. Users subgraph
    orders {      # 2. Orders subgraph (User entity resolution gerekir)
      items {
        product {
          title   # 3. Products subgraph (Product entity resolution gerekir)
        }
      }
    }
  }
}

DataLoader Pattern

N+1 sorgu problemini onlemek icin DataLoader pattern'i her subgraph'ta uygulanmalidir:

const DataLoader = require('dataloader');

const userLoader = new DataLoader(async (ids) => {
  const users = await db.users.findMany({
    where: { id: { in: ids } }
  });
  // ID sirasina gore sirala
  return ids.map(id => users.find(u => u.id === id));
});

const resolvers = {
  User: {
    __resolveReference(ref) {
      return userLoader.load(ref.id);
    }
  }
};

Cache Stratejileri

Cache Katmani Uygun Senaryo TTL Onerisi
CDN / Edge Cache Statik veya nadir degisen veriler 5-60 dakika
Gateway Response Cache Sikca tekrarlanan sorgular 1-5 dakika
Subgraph Cache (Redis) Entity bazinda onbellekleme 1-30 dakika
DataLoader (Request-scoped) Ayni request icinde tekrarlanan cagrilar Request suresi

Gateway seviyesinde Automatic Persisted Queries (APQ) kullanarak sorgu metinlerinin her istekte gonderilmesini onleyebilir, network trafikini onemli olcude azaltabilirsiniz.

Federation ve Schema Stitching Farklari

Schema stitching, federation oncesinde birden fazla GraphQL schemasini birlestirmek icin kullanilan yaklasimdi. Iki yaklasim arasindaki temel farklar:

Ozellik Schema Stitching Federation
Schema sahipligi Merkezi gateway tanimlar Her subgraph kendi schemasini tanimlar
Entity resolution Gateway'de resolver delegation Subgraph'larda __resolveReference
Bagimsizlik Dusuk, gateway bagimli Yuksek, subgraph bagimsiz
Standartlasma Her implementasyon farkli Apollo Federation spec standart
Tooling Sinirli Zengin ekosistem (Rover, Studio)
Performans Resolver delegation overhead Optimize edilmis query planning

Federation, schema stitching'in evrimsel bir sonraki adimi olarak dusunulebilir. Yeni projeler icin federation tercih edilmelidir. Mevcut schema stitching kullanan projeler icin ise kademeli bir gecis plani olusturulmalidir.

Authentication ve Authorization

Federated bir GraphQL mimarisinde kimlik dogrulama ve yetkilendirme, katmanli bir yaklasimla uygulanmalidir.

Gateway Katmaninda Authentication

Gateway, gelen her istekteki JWT token'i dogrular ve kullanici bilgilerini subgraph'lara iletir:

// Gateway middleware
const authenticateRequest = async (req) => {
  const token = req.headers.authorization?.replace('Bearer ', '');
  if (!token) return { authenticated: false };

  try {
    const decoded = await verifyJWT(token);
    return {
      authenticated: true,
      userId: decoded.sub,
      roles: decoded.roles,
      permissions: decoded.permissions
    };
  } catch (error) {
    return { authenticated: false };
  }
};

Subgraph Katmaninda Authorization

Her subgraph, kendi alanindaki yetkilendirme kurallarini uygular. Federation v2 ile @authenticated ve @requiresScopes direktifleri kullanilabilir:

# Products Subgraph
type Product @key(fields: "id") {
  id: ID!
  title: String!
  price: Float!
  costPrice: Float! @requiresScopes(scopes: [["admin"], ["finance"]])
  internalNotes: String @requiresScopes(scopes: [["admin"]])
}

type Mutation {
  createProduct(input: ProductInput!): Product! @authenticated
  deleteProduct(id: ID!): Boolean! @requiresScopes(scopes: [["admin"]])
}

Bu katmanli yaklasim, authentication'in merkezi olarak yapilmasini ve authorization'in ise ilgili domain'e yakin tutulmasini saglar.

Monitoring ve Observability

Dagitik bir federation mimarisinde gozlemlenebilirlik, sorun tespiti ve performans iyilestirmesi icin kritik oneme sahiptir.

Temel Metrikler

Izlenmesi gereken kritik metrikler sunlardir:

  • Query plan suresi: Gateway'in sorgu planini olusturma suresi
  • Subgraph yanit suresi: Her subgraph'in ortalama ve p99 yanit suresi
  • Entity resolution suresi: Entity cozumleme operasyonlarinin suresi
  • Hata oranlari: Subgraph bazinda hata oranlari ve tipleri
  • Cache hit orani: Her cache katmanindaki isabet orani

Distributed Tracing

OpenTelemetry entegrasyonu ile uctan uca izlenebilirlik saglanabilir:

// Subgraph'ta OpenTelemetry entegrasyonu
const { trace } = require('@opentelemetry/api');

const tracer = trace.getTracer('products-subgraph');

const resolvers = {
  Query: {
    product: async (_, { id }, context) => {
      const span = tracer.startSpan('resolve-product', {
        attributes: {
          'graphql.field': 'product',
          'product.id': id,
          'request.id': context.requestId
        }
      });
      try {
        const result = await productService.findById(id);
        span.setStatus({ code: SpanStatusCode.OK });
        return result;
      } catch (error) {
        span.setStatus({ code: SpanStatusCode.ERROR, message: error.message });
        throw error;
      } finally {
        span.end();
      }
    }
  }
};

Apollo Studio veya Grafana + Tempo gibi araclarla, bir GraphQL sorgusunun gateway'den subgraph'lara kadar tum yolculugunu gorsellestirebilirsiniz.

REST'ten Federated GraphQL'e Gecis Stratejisi

Mevcut REST API altyapisindan federated GraphQL'e gecis, buyuk bir donusumu ifade eder. Bu gecisi basarili kilmak icin kademeli bir strateji izlenmelidir.

Asamali Gecis Plani

Asama 1 - Analiz ve Planlama (2-4 hafta): Mevcut REST endpoint'lerini haritalandirin. Domain sinirlarini belirleyin ve subgraph planini olusturun. Takim yetkinliklerini degerlendirin.

Asama 2 - Pilot Subgraph (4-6 hafta): En az bagimliliga sahip bir domain secin. Ilk subgraph'i olusturun ve gateway'i kurun. CI/CD pipeline'ini yapilandirin.

Asama 3 - Kademeli Genisleme (sureklii): Diger domainleri birer birer subgraph olarak ekleyin. REST endpoint'lerini GraphQL Mesh ile sarmalayarak gecis surecinde iki API'yi paralel calistirin.

Asama 4 - REST Decommission: Tum istemciler GraphQL'e gectiginde eski REST endpoint'lerini kaldirabilisiniz. Bu asama genellikle en uzun suren asamadir.

Dikkat Edilmesi Gerekenler

Smart Maple olarak Ankara merkezli projelerimizde edindigimiz deneyimlerden yola cikarak, gecis surecinde su noktalarin kritik oldugunu soyleyebiliriz:

  • Istemci takimlarini erken dahil edin; sorgu ihtiyaclarini anlayin
  • Mevcut REST API'leri hemen kapatmayin, gecis suresi taniyin
  • Schema tasarimini REST endpoint yapisina degil, is alani modellerine dayandirin
  • Her subgraph icin ayri veritabani erisimi saglayin; paylasilan veritabani anti-pattern'dir
  • Load testing'i erken baslatin; federation overhead'ini olcun

Sonuc

GraphQL Federation, mikroservis mimarilerinde API katmanini birlestirmenin en olgun ve standartlasmis yoludur. Subgraph bazinda takim bagimsizligi, esnek schema composition ve guclu tooling ekosistemi ile buyuk olcekli projelerde onemli avantajlar saglar.

Basarili bir federation uygulamasi icin domain sinirlarinin dogru belirlenmesi, entity resolution stratejilerinin optimize edilmesi ve katmanli bir guvenlik modelinin olusturulmasi gerekir. Monitoring ve observability altyapisi ise dagitik mimarinin saglikli islemesini garanti altina alir.

REST'ten federation'a gecis surecinde sabir ve kademeli ilerleme esastir. Her asamada olcun, degerlendirin ve bir sonraki adima gecin. Dogru planlanmis bir gecis, hem gelistirici deneyimini hem de son kullanici performansini onemli olcude iyilestirir.

İlgili Makaleler

10 Ağustos 2026

MLOps Rehberi: Makine Öğrenmesi Modellerini Production'a Taşıma

Giriş: MLOps Nedir ve Neden Önemlidir? Makine öğrenmesi modelleri geliştirmek günümüzde nispeten kolaydır. Açık kaynak kütüphaneleri kullanarak son derece başarılı modeller oluşturabiliriz. Ancak bu modelleri production ortamına taşıyarak, ölçeklendirebilir, güvenilir ve sürdürülebilir şekilde çalıştırmak tamamen farklı bir hikayedir. Araştırmalara göre, veri bilimcileri tarafından geliştirilen makine öğrenmesi modellerinin %87'si hiçbir zaman production ortamına ulaşmaz. Bu başarısızlı

Devamını Oku: MLOps Rehberi: Makine Öğrenmesi Modellerini Production'a Taşıma
9 Ağustos 2026

LLM Fine-Tuning ve Özel Model Eğitimi Rehberi [2026]

LLM Fine-Tuning: Kurumsal Yapay Zeka Stratejisinin Temel Taşı Büyük dil modelleri (LLM), genel amaçlı metin üretimi ve anlama konusunda etkileyici performans sergiliyor. Ancak kurumsal ortamlarda belirli bir alan, terminoloji veya iş sürecine uyum sağlamaları gerektiğinde, genel bilgileri çoğu zaman yetersiz kalıyor. Bu noktada fine-tuning, yani ince ayar süreci devreye giriyor. Fine-tuning sayesinde mevcut bir temel modeli, kendi verileriniz ve ihtiyaçlarınız doğrultusunda özelleştirmek

Devamını Oku: LLM Fine-Tuning ve Özel Model Eğitimi Rehberi [2026]
8 Ağustos 2026

Bilgisayarlı Görü Uygulamaları: Nesne Tespiti, OCR ve Endüstriyel AI

Bilgisayarlı Görü Uygulamaları: Endüstriyel ve Medikal AI'nin Temel Teknolojisi Bilgisayarlı görü, makine öğrenmesinin en etkili alanlarından biridir. Türkiye'de yaşanan dijital dönüşüm sürecinde, özellikle üretim, sağlık ve lojistik sektörlerinde görü tabanlı otomasyon kritik hale gelmiştir. Smart Maple olarak Ankara'da geliştirdiğimiz çözümler, son beş yılda 150+ kuruluşunun üretim verimliliğini ortalama %35 oranında artırmıştır. Bu rehberde, bilgisayarlı görü teknolojisinin iş değeri

Devamını Oku: Bilgisayarlı Görü Uygulamaları: Nesne Tespiti, OCR ve Endüstriyel AI