REST vs GraphQL: API Mimarisi Karsilastirmasi
API tasarimi, her web uygulamasinin temellerinden biridir. Iki devi: REST ve GraphQL. Hangisi projeniz icin dogru?
REST Nedir?
REST (Representational State Transfer), kaynak tabanli (resource-based) bir API mimarisidir. Her kaynak bir URL ile temsil edilir.
GET /api/users -- Tum kullanicilar
GET /api/users/1 -- Tek kullanici
POST /api/users -- Yeni kullanici
PUT /api/users/1 -- Kullanici guncelle
DELETE /api/users/1 -- Kullanici sil
GraphQL Nedir?
GraphQL, Facebook tarafindan gelistirilen bir sorgu dilidir. Tek endpoint uzerinden tam olarak ihtiyaciniz olan veriyi istemenizi saglar.
query {
user(id: 1) {
name
email
posts {
title
}
}
}
Detayli Karsilastirma
| Kriter | REST | GraphQL | |--------|------|---------| | Endpoint | Birden fazla | Tek endpoint | | Veri getirme | Sabit yapilar | Istemci belirler | | Over-fetching | Var | Yok | | Under-fetching | Var | Yok | | Caching | HTTP cache dahili | Ozel caching gerekli | | Dosya yukleme | Kolay | Karmasik | | Ogrenme egrisi | Dusuk | Orta | | Hata yonetimi | HTTP status kodlari | Ozel hata formatı | | Gerec zamanlı | Webhook/polling | Subscription | | Dokumantasyon | Swagger/OpenAPI | Introspection (otomatik) |
Over-fetching ve Under-fetching
Over-fetching (Fazla veri)
REST'te bir kullanicinin sadece adini istiyorsunuz ama tum verisi geliyor:
// GET /api/users/1 -- Sadece isim istiyordunuz
{
"id": 1,
"name": "Ali",
"email": "ali@test.com",
"address": "...",
"phone": "...",
"preferences": "..."
}
GraphQL'de sadece ihtiyaciniz olani istersiniz:
query {
user(id: 1) {
name
}
}
Under-fetching (Eksik veri)
REST'te bir sayfayi olusturmak icin birden fazla istek gerekebilir:
GET /api/users/1
GET /api/users/1/posts
GET /api/users/1/followers
GraphQL'de tek istekle tum veriyi alin:
query {
user(id: 1) {
name
posts { title }
followers { name }
}
}
Ne Zaman REST Secmeli?
- Basit CRUD islemleri
- HTTP caching onemli
- Dosya yukleme/indirme yogun
- Ekip REST'e asina
- Kucuk-orta olcekli projeler
- Public API (ucuncu taraf entegrasyonu)
Ne Zaman GraphQL Secmeli?
- Karmasik veri iliskileri
- Mobil + web farkli veri ihtiyaci
- Performans kritik (minimal veri transferi)
- Hizli degisen gereksinimler
- Buyuk, karmasik uygulamalar
- Frontend-driven gelistirme
Populer Araclar
REST
- Express.js, Fastify
- Swagger/OpenAPI
- Postman
GraphQL
- Apollo Server/Client
- Relay
- GraphQL Playground
- Hasura (otomatik GraphQL)
Sonuc
REST ve GraphQL birbirinin yerine gecen degil, tamamlayan teknolojiler. Basit projelerde REST yeterli. Karmasik veri gereksinimleri olan modern uygulamalarda GraphQL buyuk avantaj saglar. Bazi projeler ikisini birlikte kullanir.
REST veya GraphQL ile API gelistirmek isterseniz benimle iletisime gecin: info@cagribilgehan.com. Projelerime goz atin: cagribilgehan.com