Otomasyon

Endüstriyel Robot Çeşitleri ve Uygulama Alanları

Fatih Algül
12.03.2026 208 görüntülenme

API Tasarımında Yeni Dönem

Modern yazılım geliştirme dünyasında API'ler, uygulamaların birbirleriyle iletişim kurmasının temel taşlarıdır. Yıllardır REST (Representational State Transfer) bu alanda standart olarak kabul edilirken, 2015 yılında Facebook tarafından açık kaynak olarak sunulan GraphQL, API tasarımına tamamen farklı bir yaklaşım getirdi. Peki hangi teknoloji hangi senaryoda daha uygun? Bu rehberde her iki yaklaşımı derinlemesine karşılaştıracağız.

REST Nedir?

REST, Roy Fielding tarafından 2000 yılında doktora tezinde tanımlanan bir mimari stildir. HTTP protokolü üzerine kurulu olan REST, kaynakları (resources) URL'ler aracılığıyla temsil eder ve standart HTTP metotlarını (GET, POST, PUT, DELETE) kullanarak bu kaynaklar üzerinde işlemler gerçekleştirir.

REST'in Temel Prensipleri

  • Kaynak odaklı tasarım: Her varlık benzersiz bir URI ile temsil edilir
  • Durumsuzluk (Stateless): Her istek, işlenmesi için gereken tüm bilgiyi içerir
  • Standart HTTP metotları: CRUD işlemleri için GET, POST, PUT, DELETE kullanılır
  • Katmanlı sistem: İstemci, aradaki katmanlardan habersiz olabilir
  • Önbelleklenebilirlik: Yanıtlar önbelleğe alınabilir olarak işaretlenebilir

Tipik Bir REST API Örneği

GET /api/users/42
Host: api.example.com
Accept: application/json

---

HTTP/1.1 200 OK
Content-Type: application/json

{
  "id": 42,
  "name": "Ayşe Yılmaz",
  "email": "ayse@example.com",
  "department": "Mühendislik",
  "posts": "/api/users/42/posts",
  "profile": "/api/users/42/profile"
}

Kullanıcının yazılarını almak için ayrı bir istek gerekir:

GET /api/users/42/posts
Host: api.example.com
Accept: application/json

---

HTTP/1.1 200 OK
Content-Type: application/json

[
  {
    "id": 101,
    "title": "GraphQL ile Tanışma",
    "createdAt": "2026-03-15T10:30:00Z",
    "comments": "/api/posts/101/comments"
  },
  {
    "id": 102,
    "title": "REST API Best Practices",
    "createdAt": "2026-03-20T14:00:00Z",
    "comments": "/api/posts/102/comments"
  }
]

GraphQL Nedir?

GraphQL, bir API sorgu dili ve bu sorguları çalıştırmak için bir çalışma zamanıdır. REST'ten farklı olarak tek bir endpoint üzerinden çalışır ve istemcinin tam olarak hangi verilere ihtiyaç duyduğunu belirtmesine olanak tanır. Tip sistemi (type system) sayesinde API'nin yetenekleri önceden tanımlanır ve belgelenir.

GraphQL'in Temel Kavramları

  • Şema (Schema): API'nin tüm yapısını tanımlayan tip sistemi
  • Query: Veri okuma işlemleri
  • Mutation: Veri yazma/güncelleme/silme işlemleri
  • Subscription: Gerçek zamanlı veri güncellemeleri
  • Resolver: Her alan için veriyi çözen fonksiyonlar

GraphQL Şema Tanımı

type User {
  id: ID!
  name: String!
  email: String!
  department: String
  posts: [Post!]!
  profile: Profile
}

type Post {
  id: ID!
  title: String!
  content: String!
  createdAt: DateTime!
  author: User!
  comments: [Comment!]!
}

type Query {
  user(id: ID!): User
  users(limit: Int, offset: Int): [User!]!
}

type Mutation {
  createPost(input: CreatePostInput!): Post!
  updateUser(id: ID!, input: UpdateUserInput!): User!
}

GraphQL Sorgu Örneği

POST /graphql
Content-Type: application/json

{
  "query": "
    query GetUserWithPosts($userId: ID!) {
      user(id: $userId) {
        name
        email
        posts {
          title
          createdAt
          comments {
            content
            author {
              name
            }
          }
        }
      }
    }
  ",
  "variables": {
    "userId": "42"
  }
}

Bu tek sorgu ile kullanıcı bilgisi, yazıları, yorumları ve yorum yazarlarının adları tek bir istekte alınabilir. REST'te bu veriyi toplamak için en az 4-5 ayrı istek gerekebilirdi.

Detaylı Karşılaştırma

1. Veri Alma (Fetching)

REST'in sorunu — Over-fetching ve Under-fetching: REST endpoint'leri sabit bir veri yapısı döndürür. Mobil uygulamanız yalnızca kullanıcının adını ve profil fotoğrafını göstermek istese bile, GET /users/42 isteği tüm kullanıcı bilgilerini döndürür (over-fetching). Öte yandan, kullanıcının yazılarıyla birlikte profil bilgisini almak için birden fazla istek yapmanız gerekir (under-fetching).

GraphQL'in çözümü: İstemci tam olarak neye ihtiyaç duyduğunu belirtir. Fazla veri gelmez, eksik veri için ek istek gerekmez. Bu özellikle mobil uygulamalar ve düşük bant genişliğine sahip ortamlar için büyük avantaj sağlar.

2. Endpoint Yönetimi

REST API'lerde kaynak sayısı arttıkça endpoint sayısı da artar. Büyük bir uygulamada yüzlerce endpoint'i yönetmek, belgelemek ve versiyonlamak ciddi bir yük haline gelir. GraphQL'de ise tek bir /graphql endpoint'i bulunur ve tüm işlemler bu endpoint üzerinden gerçekleştirilir.

3. Tip Güvenliği ve Belgeleme

GraphQL'in güçlü tip sistemi, API'nin kendi kendini belgelemesini sağlar. Introspection özelliği sayesinde istemciler şemayı sorgulayabilir ve hangi sorguların mümkün olduğunu keşfedebilir. GraphiQL ve Apollo Studio gibi araçlar bu şema üzerinden otomatik tamamlama ve doğrulama sunar.

# Introspection sorgusu
{
  __schema {
    types {
      name
      fields {
        name
        type {
          name
        }
      }
    }
  }
}

REST tarafında ise OpenAPI (Swagger) gibi ek araçlarla benzer bir deneyim sağlanabilir, ancak bu şema kodu ile otomatik olarak senkronize olmaz ve ek bakım gerektirir.

4. Önbellekleme (Caching)

Bu alanda REST belirgin bir avantaja sahiptir. HTTP önbellekleme mekanizmaları REST ile doğal olarak çalışır. Her kaynak benzersiz bir URL'e sahip olduğundan, tarayıcı önbelleği, CDN'ler ve proxy sunucuları kolayca kullanılabilir:

GET /api/users/42
Cache-Control: max-age=3600
ETag: "abc123"

GraphQL'de tüm istekler aynı endpoint'e POST olarak gönderildiğinden, HTTP düzeyinde önbellekleme doğrudan çalışmaz. Apollo Client gibi kütüphaneler istemci tarafında normalize edilmiş önbellek sunar, ancak bu ek karmaşıklık getirir.

5. Hata Yönetimi

REST, HTTP durum kodlarını kullanarak hata durumlarını açıkça bildirir: 404 Not Found, 401 Unauthorized, 500 Internal Server Error gibi. Bu, hata yönetimini standart ve anlaşılır kılar.

GraphQL ise neredeyse her zaman HTTP 200 döndürür ve hataları yanıt gövdesindeki errors dizisinde bildirir:

{
  "data": {
    "user": null
  },
  "errors": [
    {
      "message": "Kullanıcı bulunamadı",
      "locations": [{ "line": 2, "column": 3 }],
      "path": ["user"],
      "extensions": {
        "code": "NOT_FOUND"
      }
    }
  ]
}

Bu yaklaşım, kısmi başarı senaryolarını desteklediği için avantaj sağlar — bir sorgunun bir kısmı başarılı olurken diğer kısmı hata verebilir. Ancak izleme ve hata takibi araçlarının yapılandırılması REST'e kıyasla daha fazla çaba gerektirir.

6. Performans ve Güvenlik

GraphQL'in esnekliği bazı güvenlik risklerini de beraberinde getirir. Kötü niyetli veya dikkatsizce yazılmış derin iç içe sorgular, sunucuyu aşırı yükleyebilir:

# Tehlikeli derinlikte iç içe sorgu
{
  user(id: "42") {
    posts {
      comments {
        author {
          posts {
            comments {
              author {
                posts {
                  title
                }
              }
            }
          }
        }
      }
    }
  }
}

Bu tür saldırılara karşı sorgu derinliği sınırlaması, sorgu karmaşıklığı analizi ve hız sınırlama (rate limiting) gibi önlemler alınmalıdır. REST'te ise endpoint bazlı hız sınırlama çok daha kolaydır.

Hangi Durumda Hangisini Seçmeli?

REST Tercih Edin:

  1. Basit CRUD uygulamaları: Kaynak yapısı düz ve ilişkiler sınırlıysa
  2. Güçlü önbellekleme gereksinimi: CDN ve HTTP önbellek katmanlarından faydalanmak istiyorsanız
  3. Dosya yükleme/indirme: Büyük dosya transferlerinde REST daha doğal bir seçimdir
  4. Üçüncü taraf entegrasyonu: Dış geliştiricilere açık API sunuyorsanız REST daha yaygın ve anlaşılırdır
  5. Mikro hizmet mimarisi: Servisler arası iletişimde REST'in basitliği avantajdır
  6. Ekip deneyimi: Ekip REST'e aşinaysa, öğrenme eğrisi olmadan hızlıca başlayabilirsiniz

GraphQL Tercih Edin:

  1. Farklı istemciler: Web, mobil ve IoT gibi farklı platformlar aynı API'yi farklı veri ihtiyaçlarıyla kullanıyorsa
  2. Karmaşık veri ilişkileri: Varlıklar arasında derin ilişkiler varsa ve bunları esnek biçimde sorgulamak gerekiyorsa
  3. Hızlı iterasyon: Frontend ekibi backend'den bağımsız olarak veri gereksinimlerini değiştirmek istiyorsa
  4. Gerçek zamanlı özellikler: Subscription desteği ile canlı güncelleme senaryoları varsa
  5. BFF (Backend for Frontend) katmanı: Birden fazla mikro hizmetten veri toplayan bir ara katman oluşturuyorsanız

Hibrit Yaklaşım: İkisini Birlikte Kullanmak

Pratikte birçok başarılı uygulama her iki teknolojiyi birlikte kullanır. Yaygın bir örüntü şudur:

  • GraphQL istemci uygulamalara yönelik ana API katmanı olarak kullanılır
  • REST mikro hizmetler arası iletişim, webhook'lar, dosya yükleme ve üçüncü taraf entegrasyonları için korunur

Apollo Federation veya GraphQL Mesh gibi araçlar, mevcut REST servislerinizi bir GraphQL katmanı arkasında birleştirmenize olanak tanır. Böylece mevcut altyapınızı yeniden yazmadan GraphQL'in avantajlarından faydalanabilirsiniz:

// Apollo RESTDataSource ile REST servisini GraphQL'e bağlama
import { RESTDataSource } from '@apollo/datasource-rest';

class UsersAPI extends RESTDataSource {
  override baseURL = 'https://api.example.com/';

  async getUser(id: string) {
    return this.get(`users/${id}`);
  }

  async getUserPosts(userId: string) {
    return this.get(`users/${userId}/posts`);
  }
}

// Resolver
const resolvers = {
  Query: {
    user: async (_, { id }, { dataSources }) => {
      return dataSources.usersAPI.getUser(id);
    },
  },
  User: {
    posts: async (parent, _, { dataSources }) => {
      return dataSources.usersAPI.getUserPosts(parent.id);
    },
  },
};

Sonuç

GraphQL ve REST birbirinin alternatifi olmaktan çok, farklı ihtiyaçlara cevap veren tamamlayıcı teknolojilerdir. Doğru seçim; projenizin ölçeğine, ekibinizin deneyimine, istemci çeşitliliğine ve veri modelinizin karmaşıklığına bağlıdır. Önemli olan, her iki yaklaşımın güçlü ve zayıf yönlerini anlayarak bilinçli bir karar vermektir. Küçük ve net kapsamlı projelerde REST'in basitliği öne çıkarken, birden fazla istemciye hizmet veren ve karmaşık veri ilişkilerine sahip uygulamalarda GraphQL ciddi verimlilik kazanımları sağlar.

Teknoloji seçiminde en iyi rehber, her zaman projenizin gerçek gereksinimleridir. Modaya kapılmak yerine, probleminizi en iyi çözen aracı seçin.

Yazar Hakkında
Fatih Algül
TechSoft Solutions
Proje mi var?

Yazılım, IoT veya otomasyon konularında destek almak ister misiniz?

İletişime Geç