Kurs
REST API'ler, internet üzerindeki entegrasyonların çoğunu güçlendirir. Back-end, full stack ya da yazılım mühendisliği pozisyonlarına başvururken, muhtemelen REST API tasarımı, HTTP yöntemleri ve kimlik doğrulama desenleri hakkında sorularla karşılaşacaksınız.
Bu rehberde, mülakatçilerin gerçekten sorduğu sorular üzerinden gideceğim. Hedef pozisyonunuza en uygun konulara odaklanabilmeniz için soruları zorluk seviyesine ve role göre düzenledim. Her yanıtta pratik örnekler ve ilgili yerlerde uyarlayabileceğiniz kod parçacıkları var.
Aklınızda tutmanız gereken bir nokta: mülakatçılar, ileri düzey konulardan çok temelleri test eder. Temelleri (HTTP yöntemleri, durum kodları, durum bilgisiz yapı) sağlam kavrarsanız, çoğu REST API mülakatını özgüvenle yönetirsiniz. Gösterişli mimari kalıplar daha sonra gelir.
Temel REST API Mülakat Soruları
Bu sorular temel bilginizi ölçer. Kıdem seviyesinden bağımsız olarak neredeyse her mülakatta karşınıza çıkar.
1. REST nedir ve kısıtları nelerdir?
REST, Temsili Durum Transferi (Representational State Transfer) anlamına gelir. Roy Fielding'in 2000 tarihli doktora tezinde tanımlanan, ağ tabanlı uygulamalar için bir mimari stildir.
REST'in altı kısıtı vardır:
- İstemci-Sunucu: Kullanıcı arayüzü ile veri depolamanın ayrılması
- Durum Bilgisiz: Her istek, tamamlanması için gereken tüm bilgileri içerir
- Önbelleğe Alınabilir: Yanıtlar, önbelleğe alınıp alınamayacağını belirtmelidir
- Katmanlı Sistem: Bileşenler, bulundukları katmanın ötesini göremez
- Tekdüze Arayüz: Kaynaklarla etkileşimin standartlaştırılmış yolu
- Talep Üzerine Kod (opsiyonel): Sunucular, istemcilere çalıştırılabilir kod gönderebilir
2. REST ve SOAP arasındaki fark nedir?
REST bir mimari stildir; SOAP ise bir protokoldür. REST genellikle HTTP üzerinde JSON kullanır ve standart HTTP yöntemlerinden yararlanır. SOAP yalnızca XML kullanır ve zarf ve başlıklarla kendi mesajlaşma formatını tanımlar.
|
Boyut |
REST |
SOAP |
|
Format |
JSON, XML, diğerleri |
Yalnızca XML |
|
Taşıma |
HTTP |
HTTP, SMTP, diğerleri |
|
Önbellekleme |
Yerleşik HTTP önbelleği |
Önbelleğe alınamaz |
|
Performans |
Hafif |
Daha yüksek ek yük |
SOAP, resmi sözleşmeler (WSDL) veya mesaj düzeyi güvenlik (WS-Security) gerektiren kurumsal sistemler için hâlâ mantıklıdır.
3. HTTP yöntemleri nelerdir ve her birini ne zaman kullanırsınız?
HTTP yöntemleri, bir kaynak üzerinde gerçekleştirilecek işlemi tanımlar.
|
Yöntem |
Amaç |
Örnek |
|
|
Bir kaynağı getirir |
|
|
|
Yeni bir kaynak oluşturur |
|
|
|
Bir kaynağı bütünüyle değiştirir |
|
|
|
Bir kaynağı kısmen günceller |
|
|
|
Bir kaynağı siler |
|
4. PUT ve POST arasındaki fark nedir?
POST, URI'yi sunucunun belirlediği yeni bir kaynak oluşturur. PUT, istemcinin belirttiği belirli bir URI'deki kaynağı değiştirir.
POST /users → Server creates user, returns /users/123
PUT /users/123 → Client specifies URI, replaces entire resource
Var olmayan bir URI'ye PUT yaparsanız, sunucu onu oluşturabilir. Mevcut bir URI'ye PUT yaparsanız, tüm kaynağı değiştirirsiniz.
5. PUT ve PATCH arasındaki fark nedir?
PUT tüm kaynağı değiştirir. PATCH kısmi değişiklikler uygular.
# PUT replaces everything
PUT /users/123
{"name": "Khalid", "email": "khalid@example.com", "role": "admin"}
# PATCH updates only specified fields
PATCH /users/123
{"role": "admin"}
6. REST'te "durum bilgisiz" ne anlama gelir?
Durum bilgisiz, her isteğin sunucunun işlemesi için gereken tüm bilgileri içermesi gerektiği anlamına gelir. Sunucu, istekler arasında herhangi bir istemci bağlamı saklamaz.
Bu, sunucu tarafı oturumların olmadığı anlamına gelir. Bir kullanıcı kimliği doğrulanmışsa, istemci her istekte kimlik bilgilerini (genellikle bir belirteç) göndermelidir.
7. Bir API'yi RESTful yapan nedir?
Bir API, HATEOAS (Application State'in Motoru Olarak Hipermedya) dahil tüm REST kısıtlarını sağladığında gerçekten RESTful sayılır. Pratikte, kendine "REST" diyen çoğu API aslında "REST-benzeri" ya da Richardson Olgunluk Modeli Seviye 2'dedir. Dürüst olmak gerekirse, çoğu kullanım senaryosu için bu yeterlidir.

REST API'leri için Richardson Olgunluk Modeli seviyeleri. Görsel: Yazar.
8. Bilmeniz gereken temel HTTP durum kodları nelerdir?
API senaryolarının çoğunu kapsayan en az şu yedi temel durum koduna aşina olmalısınız:
|
Kod |
Ad |
Ne Zaman Kullanılır |
|
200 |
OK |
Başarılı GET, PUT, PATCH |
|
201 |
Created |
Başarılı POST (Location başlığını ekleyin) |
|
204 |
No Content |
Başarılı DELETE |
|
400 |
Bad Request |
Bozuk sözdizimi |
|
404 |
Not Found |
Kaynak mevcut değil |
|
500 |
Internal Server Error |
Sunucu tarafı hata |
9. Kaynak ile uç nokta arasındaki fark nedir?
Bir kaynak, veri varlığıdır (kullanıcı, sipariş, ürün). Bir uç nokta, o kaynağa erişim sağlayan URL yoludur.
Resource: User
Endpoints: GET /users, GET /users/123, POST /users
10. URI tasarımı için en iyi uygulamalar nelerdir?
Fiiller değil, isimler kullanın. URI'leri küçük harfle ve birden çok kelimede kısa çizgiyle yazın. Koleksiyonlar için çoğul isimler kullanın.
Good: /users, /users/123, /order-items
Bad: /getUsers, /Users, /order_items
Derin iç içe yapıları kaçının. /users/123/posts/456/comments/789 yerine /comments/789 veya /comments?post_id=456 düşünün.
11. İdempotentlik nedir ve hangi HTTP yöntemleri idempotenttir?
Bir işlem, birden fazla kez yapılması tek sefer yapılmasıyla aynı sonucu üretiyorsa idempotenttir.
|
Yöntem |
İdempotent |
Neden |
|
|
Evet |
Okuma durum değiştirmez |
|
|
Evet |
Aynı veriyle değiştirmek aynı sonucu verir |
|
|
Evet |
İki kez silmek kaynağı silinmiş halde bırakır |
|
|
Hayır |
İki kez oluşturmak iki kaynak üretir |
|
|
Hayır* |
İşleme bağlıdır |
Bir değeri ayarlayan PATCH idempotenttir; bir sayacı artıran PATCH değildir.
12. Güvenli ve idempotent yöntemler arasındaki fark nedir?
Güvenli yöntemler kaynakları değiştirmez (GET, HEAD, OPTIONS). İdempotent yöntemler birden fazla kez çağrılsa da aynı etkiyi yaratır (GET, PUT, DELETE).
Tüm güvenli yöntemler idempotenttir, ancak tüm idempotent yöntemler güvenli değildir. DELETE idempotenttir fakat güvenli değildir çünkü durumu değiştirir.
13. Sorgu parametrelerini ne zaman, yol parametrelerini ne zaman kullanmalısınız?
Yol parametreleri belirli bir kaynağı tanımlar. Sorgu parametreleri koleksiyonları filtreler, sıralar veya sayfalar.
Path: /users/123 (specific user)
Query: /users?status=active (filtered collection)
/users?sort=name&limit=10
14. İçerik müzakeresi (content negotiation) nedir?
İçerik müzakeresi, istemcilerin bir kaynağın farklı temsillerini talep etmesine olanak tanır. İstemci bir Accept başlığı gönderir ve sunucu uygun formatla yanıt verir.
Accept: application/json → Server returns JSON
Accept: application/xml → Server returns XML
15. OPTIONS yönteminin amacı nedir?
OPTIONS, bir sunucunun belirli bir URL için desteklediği HTTP yöntemlerini döndürür. Tarayıcılar, çapraz kaynak isteklerine izin verilip verilmediğini kontrol etmek için CORS preflight isteklerinde kullanır.
Orta Düzey REST API Mülakat Soruları
Bu sorular, pratik uygulama ve karar alma yeteneğinizi ölçer. Orta düzey pozisyonlarda bekleyin.
16. 401 ile 403 arasındaki fark nedir?
Bu, en sık karıştırılan durum kodu ikilisidir. Kıdemli mühendislerin bile kod incelemelerinde bunları karıştırdığını gördüm.
401 Unauthorized
Kimliği doğrulanmamış demektir. Sunucu kimsiniz bilmiyor. Yanıtınız, kullanıcıyı oturum açmaya yönlendirmelidir.
403 Forbidden
Yetkisiz demektir. Sunucu kimsiniz biliyor ancak izniniz yok. Yeniden kimlik doğrulamak işe yaramaz.

Kimlik doğrulama ve yetkilendirme hata karar akış şeması. Görsel: Yazar.
17. 400 ile 422 arasındaki fark nedir?
Farkı açıklayan örnekler şunlardır:
400 Bad Request
Bozuk sözdizimini belirtir. Sunucu isteği ayrıştıramaz (geçersiz JSON yapısı, eksik zorunlu başlıklar).
422 Unprocessable Entity
Geçerli sözdizimi ancak anlamsal hatalar olduğunu belirtir. JSON geçerlidir ama veriler doğrulamadan geçmez (geçersiz e-posta formatı, çok kısa parola).
# 400: Cannot parse
{"name": "Khalid",} # Trailing comma breaks JSON
# 422: Valid JSON, invalid data
{"email": "not-an-email"} # Fails validation
18. 409 Conflict'i ne zaman kullanmalısınız?
İstek, kaynağın mevcut durumu ile çakıştığında 409 kullanın:
- İyimser kilitleme hataları (ETag uyuşmazlığı)
- Benzersizlik ihlalleri (çift kullanıcı adı)
- Geçersiz durum geçişleri (çoktan gönderilmiş bir siparişi iptal etmek)
19. Sayfalama nasıl uygulanır?
İki ana yaklaşım:
Offset tabanlı sayfalama
Basittir ancak büyük veri kümelerinde performans sorunları vardır.
GET /users?limit=20&offset=40
İmleç (cursor) tabanlı sayfalama
Daha iyi ölçeklenir ve veri değiştiğinde "sayfa kaymasını" önler.
GET /users?limit=20&cursor=eyJpZCI6MTIzfQ
Stripe, GitHub ve Slack gibi şirketler, büyük veri kümeleri için imleç tabanlı sayfalama kullanır.
20. Yaygın API versiyonlama stratejileri nelerdir?
Üç ana yaklaşım vardır, her birinin farklı ödünleşimleri bulunur:
URI versiyonlama
En yaygın olanıdır. Açık ve hata ayıklaması kolaydır.
GET /v1/users
GET /v2/users
Başlık ile versiyonlama
URL'ler daha temizdir ancak tarayıcılarda test etmesi zordur.
GET /users
Accept-Version: v2
Sorgu parametresi ile versiyonlama
Eklemek kolaydır ama URL'leri karmaşıklaştırır.
GET /users?version=2
21. ETag nedir ve önbellekleme nasıl çalışır?
ETag, bir kaynak için sürüm tanımlayıcıdır. Sunucu bunu yanıtlarda gönderir; istemci, kaynağın değişip değişmediğini kontrol etmek için sonraki isteklerde geri gönderir.
# First request
GET /users/123
Response: ETag: "abc123"
# Subsequent request
GET /users/123
If-None-Match: "abc123"
Response: 304 Not Modified (if unchanged)
22. REST API'leri için hangi kimlik doğrulama yöntemleri kullanılır?
En yaygın dört yöntem API Keys, Bearer Tokens, OAuth 2.0 ve JWT'dir:
|
Yöntem |
Kullanım Durumu |
Artılar |
Eksiler |
|
API Keys |
Sunucudan sunucuya |
Basit |
Süresi yok, sızması kolay |
|
Bearer Tokens |
Oturum kimlik doğrulaması |
Durum bilgisiz |
Güvenli saklama şart |
|
OAuth 2.0 |
Üçüncü taraf erişimi |
Delege kimlik doğrulama |
Karmaşık uygulama |
|
JWT |
Durum bilgisiz kimlik doğrulama |
Kendi kendine yeter |
Kara liste olmadan iptal edilemez |
23. JWT nedir ve nasıl çalışır?
JWT (JSON Web Token) üç parçadan oluşur: Header, Payload ve Signature. Python'da JSON ile çalışma hakkında daha fazla bilgi edinin.
Header: {"alg": "RS256", "typ": "JWT"}
Payload: {"sub": "user123", "exp": 1704153600}
Signature: RSASHA256(base64(header) + "." + base64(payload), privateKey)
Sunucu belirteci imzalar; istemciler isteklerle birlikte gönderir. Sunucu, veritabanı sorgusu yapmadan imzayı doğrular.
24. RS256 ile HS256 arasındaki fark nedir?
HS256 (simetrik): Aynı gizli anahtar imzalar ve doğrular. Birden fazla hizmetin belirteç doğrulaması yapması gerektiğinde risklidir.
RS256 (asimetrik): Özel anahtar imzalar, açık anahtar doğrular. Belirteçleri birden çok hizmetin doğruladığı dağıtık sistemler için önerilir.
25. HATEOAS nedir?
HATEOAS (Application State'in Motoru Olarak Hipermedya), yanıtlarda ilgili eylem ve kaynaklara bağlantılar bulunması demektir.
{
"id": 123,
"name": "Khalid",
"links": [
{"rel": "self", "href": "/users/123"},
{"rel": "orders", "href": "/users/123/orders"}
]
}
Pratikte, çoğu API HATEOAS'ı tam olarak uygulamaz. Kavramı bilin, ancak çoğu işte tam uyum beklemeyin. Büyük teknoloji şirketleri bile nadiren tamamen HATEOAS uyumlu API'ler oluşturur.
26. Hataları tutarlı bir şekilde nasıl ele alırsınız?
Tutarlı hata yanıtları için RFC 7807 Problem Details formatını kullanın:
{
"type": "https://api.example.com/errors/validation",
"title": "Validation Error",
"status": 422,
"detail": "Email format is invalid",
"instance": "/users"
}
27. Oran sınırlama (rate limiting) nedir ve neden önemlidir?
Oran sınırlama, API'nizi kötüye kullanıma karşı korur ve adil kullanımı sağlar. Yaygın bir yanıt:
HTTP/1.1 429 Too Many Requests
Retry-After: 3600
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 0
28. Filtreleme ve sıralamayı nasıl tasarlarsınız?
Açık kurallarla sorgu parametreleri kullanın:
# Filtering
GET /products?category=electronics&price[gte]=100&price[lte]=500
# Sorting (prefix - for descending)
GET /users?sort=-created_at,name
İleri Düzey REST API Mülakat Soruları
Bu sorular mimari düşünmeyi ölçer. Kıdemli pozisyonlar için bekleyin.
29. OAuth 2.0 ile OAuth 2.1 arasında neler değişti?
OAuth 2.1, güvenlik en iyi uygulamalarını birleştirir:
|
Özellik |
OAuth 2.0 |
OAuth 2.1 |
|
PKCE |
Opsiyonel |
TÜM istemciler için zorunlu |
|
Implicit Grant |
Desteklenir |
Kaldırıldı |
|
Password Grant |
Desteklenir |
Kaldırıldı |
|
Redirect URI |
Esnek eşleştirme |
Birebir eşleşme zorunlu |
Temel mesaj: Tüm istemci türleri için PKCE ile Yetkilendirme Kodu akışını kullanın.
30. Ödeme uç noktaları için idempotentliği nasıl uygularsınız?
POST isteklerini yeniden denemelere karşı güvenli kılmak için idempotency key'leri kullanın:
async def handle_payment(request: Request, payment: PaymentCreate):
idempotency_key = request.headers.get("Idempotency-Key")
# Check if already processed
cached = await redis.get(f"idem:{idempotency_key}")
if cached:
return JSONResponse(json.loads(cached))
# Process payment
result = await process_payment(payment)
# Cache result (24-hour TTL)
await redis.setex(f"idem:{idempotency_key}", 86400, json.dumps(result))
return result
İstemci bir UUID üretir ve istekle birlikte gönderir. Aynı anahtar tekrar gelirse, önbellekteki yanıtı döndürün.
31. Dağıtık bir oran sınırlayıcıyı nasıl tasarlarsınız?
Dağıtık sistemlerde, trafik örneklerde dengelendiği için bellek içi sayaçları kullanamazsınız. Bu, adayların sıklıkla takıldığı yaygın bir noktadır.
Mimari:
- Merkezi sayaç depolaması için Redis kullanın
- Patlamalara tolerans için Token Bucket algoritmasını uygulayın
- Yarış koşullarını önlemek için atomik işlemler (Lua betikleri) kullanın
# Pseudocode for Token Bucket
tokens = redis.get(user_id) or max_tokens
if tokens > 0:
redis.decr(user_id)
process_request()
else:
return 429
32. gRPC'yi REST yerine ne zaman seçersiniz?
gRPC ile REST arasındaki seçim, spesifik gereksinimlerinize bağlıdır.
gRPC'yi şunlar için seçin:
- Dahili mikro servis iletişimi (5-10x aktarım iyileşmesi)
- Gerçek zamanlı akış gereksinimleri
- Bant genişliği kısıtlı mobil-arka uç iletişimi
- Sıkı sözleşmeler gerektiren çok dilli ortamlar
REST'i şunlar için seçin:
- Farklı tüketicileri olan herkese açık API'ler
- Web uygulamaları (evrensel tarayıcı desteği)
- Basit CRUD işlemleri
- Protocol Buffers'a aşina olmayan ekipler
33. Uzun süreli işlemleri nasıl ele alırsınız?
Asenkron istek desenini kullanın:
-
İstemci isteği gönderir
-
Sunucu bir durum URL'siyle
202 Accepteddöndürür -
İstemci tamamlanana kadar durum URL'sini yoklar
POST /reports
Response: 202 Accepted
Location: /reports/abc123/status
GET /reports/abc123/status
Response: {"status": "processing", "progress": 45}
GET /reports/abc123/status
Response: {"status": "completed", "result_url": "/reports/abc123"}
34. Saga deseni nedir?
Saga, mikro servisler arasında kilitleme olmadan dağıtık işlemleri yönetir. Her servis yerel bir işlem yürütür ve bir olay yayınlar. Bir adım başarısız olursa, telafi işlemleri önceki adımları geri alır.
Order Created → Payment Processed → Inventory Reserved → Order Confirmed
↓ (failure)
Release Payment → Cancel Order
35. Yaygın JWT güvenlik açıkları nelerdir?
Algoritma karışıklığı: Saldırgan RS256'yı HS256'ya çevirir ve açık anahtarla imzalar. Çözüm: algoritmaları her zaman beyaz listeye alın.
# Vulnerable
jwt.decode(token, key)
# Secure
jwt.decode(token, key, algorithms=["RS256"])
"none" algoritması: Saldırgan imzayı tamamen kaldırır. Çözüm: "none" algoritmasını reddedin.
Back-end Geliştirici REST API Soruları
Bu sorular, sunucu tarafı uygulama ayrıntıları, veritabanı optimizasyonu ve back-end mühendislerinin günlük karşılaştığı performans kalıplarına odaklanır.
36. N+1 sorgu problemi nedir?
N+1 problemi, N kayıt getirdikten sonra her kaydın ilişkisi için ayrı bir sorgu çalıştırdığınızda ortaya çıkar.
# N+1 Problem: 101 queries for 100 users
users = User.query.all() # 1 query
for user in users:
print(user.posts) # 100 queries
Çözümler:
Django: Yabancı anahtarlar için select_related(), çok-çok için prefetch_related() kullanın.
# 2 queries instead of 101
users = User.objects.prefetch_related('posts').all()
SQLAlchemy: joinedload() veya selectinload() kullanın.
37. Bağlantı havuzlamasını nasıl yapılandırırsınız?
Bağlantı havuzlama, her istek için yeni bağlantı oluşturmak yerine veritabanı bağlantılarını yeniden kullanır.
# SQLAlchemy
engine = create_engine(
"postgresql://user:pass@host/db",
pool_size=5, # Permanent connections
max_overflow=10, # Temporary overflow
pool_timeout=30, # Wait timeout
pool_pre_ping=True # Validate before use
)
38. Hangi önbellekleme stratejilerini biliyorsunuz?
Farklı erişim kalıpları için optimize edilmiş üç temel önbellekleme stratejisi vardır:
|
Strateji |
Açıklama |
Kullanım Durumu |
|
Cache-Aside |
Uygulama önce önbelleği, sonra DB'yi kontrol eder |
Okuma ağırlıklı, eskimeye toleranslı |
|
Write-Through |
Önbellek ve DB'ye birlikte yazma |
Tutarlılığın kritik olduğu durumlar |
|
Write-Behind |
Önce önbelleğe yaz, DB'yi asenkron güncelle |
Yüksek yazma hacmi |
39. Webhook imza doğrulamasını nasıl uygularsınız?
Webhook imza doğrulaması, isteğin gerçekten beklenen gönderen tarafından geldiğini garantiler. İşte HMAC kullanan bir uygulama:
import hmac
import hashlib
def verify_webhook(payload: bytes, signature: str, secret: str) -> bool:
expected = 'sha256=' + hmac.new(
secret.encode(),
payload,
hashlib.sha256
).hexdigest()
return hmac.compare_digest(expected, signature)
40. API sağlığını gösteren metrikler nelerdir?
API'nizin sağlığını değerlendirmek için şu dört temel metriği izlemelisiniz:
|
Metrik |
Açıklama |
Alarm Eşiği |
|
P50 Gecikme |
Medyan yanıt süresi |
Baz değer |
|
P99 Gecikme |
En yavaş %1 |
> 2s, 5 dk boyunca |
|
Hata Oranı |
% olarak 4xx/5xx |
> %1, 5 dk boyunca |
|
Throughput |
Saniyedeki istek sayısı |
Kapasite planlama |
Full Stack Geliştirici REST API Soruları
Bu sorular, tarayıcı güvenliği, durum yönetimi ve çapraz kaynak iletişim başta olmak üzere hem istemci hem sunucu kaygılarını anlama düzeyinizi ölçer.
41. Tarayıcı ne zaman CORS preflight isteği gönderir?
Tarayıcılar şu durumlarda OPTIONS preflight gönderir:
- GET, HEAD, POST dışındaki yöntemler
- Özel başlıklar (Authorization, X-API-Key)
- form-urlencoded, multipart/form-data, text/plain dışındaki Content-Type
42. CORS'u güvenli şekilde nasıl yapılandırırsınız?
Güvenli CORS yapılandırması, kökenleri açıkça beyaz listelemeyi ve kimlik bilgilerini dikkatle ele almayı gerektirir. İşte güvenli bir Express.js kurulumu:
// Express.js
app.use(cors({
origin: ['https://yourdomain.com'], // Never use * with credentials
credentials: true,
methods: ['GET', 'POST', 'PUT', 'DELETE'],
allowedHeaders: ['Content-Type', 'Authorization']
}));
Kimlik bilgileriyle birlikte joker (*) asla kullanmayın. null origin'e asla izin vermeyin.
43. İstemci tarafında belirteçleri nerede saklamalısınız?
Belirteç saklama, XSS ve CSRF zafiyetleri arasında güvenlik ödünleşimleri içerir"
|
Saklama |
XSS Riski |
CSRF Riski |
Öneri |
|
localStorage |
Yüksek |
Yok |
Belirteçler için kaçının |
|
HttpOnly Cookie |
Düşük |
Önlem gerektirir |
Önerilir |
|
Bellek içi |
Düşük |
Düşük |
Erişim belirteçleri için en iyisi |
En iyi uygulama: Yenileme belirteçlerini HttpOnly çerezlerde SameSite=Strict ile saklayın. Erişim belirteçlerini bellekte tutun.
44. WebSocket yerine SSE'yi ne zaman kullanmalısınız?
Seçim, çift yönlü iletişime ihtiyaç duyup duymadığınıza ve yeniden bağlanmayı nasıl ele almak istediğinize bağlıdır:
|
Özellik |
WebSockets |
SSE |
|
Yön |
Çift yönlü |
Sunucudan istemciye |
|
Yeniden bağlanma |
Manuel |
Otomatik |
|
İkili veri |
Evet |
Hayır |
Bildirimler, canlı akışlar, hisse senedi verileri için SSE kullanın. Sohbet, çok oyunculu oyunlar, ortak düzenleme için WebSocket kullanın.
45. Dosya yüklemelerini nasıl ele alırsınız?
Büyük dosyalar için ilerleme takibiyle parçalı yüklemeler kullanın:
async function chunkedUpload(file, chunkSize = 5 * 1024 * 1024) {
const totalChunks = Math.ceil(file.size / chunkSize);
for (let i = 0; i < totalChunks; i++) {
const chunk = file.slice(i * chunkSize, (i + 1) * chunkSize);
await uploadChunk(uploadId, i, chunk);
}
}
Senaryo Bazlı REST API Soruları
Bu sorular, REST ilkelerini gerçek dünya problemlerine uygulayabilme yeteneğinizi değerlendirir. Mülakatçılar, tasarım sürecinizi ve mimari ödünleşimleri nasıl yaptığınızı görmek ister.
46. Bir otel rezervasyon sistemi için REST API tasarlayın
Bir otel rezervasyon sistemi, arama, uygunluk kontrolü ve rezervasyonları çifte rezervasyonları engelleyerek yönetebilmelidir. Çekirdek kaynaklar şunlardır:
Kaynaklar:
-
/hotels- Otelleri listele ve ara -
/hotels/{id}/rooms- Uygun odalar -
/bookings- Rezervasyon oluştur ve yönet -
/guests/{id}- Misafir profilleri
Kilit kararlar:
- Otel araması için imleç tabanlı sayfalama kullanın
- Oda uygunluğu için iyimser kilitleme uygulayın
- Çifte rezervasyon girişimlerinde 409 Conflict döndürün
- Ödeme işlemleri için idempotency key'leri kullanın
47. Yumuşak silmeleri (soft delete) nasıl uygularsınız?
Kayıtları kaldırmak yerine bir deleted_at zaman damgası ekleyin:
@app.delete("/users/{user_id}")
def delete_user(user_id: int):
user = db.get(user_id)
user.deleted_at = datetime.utcnow()
db.commit()
return Response(status_code=204)
@app.get("/users")
def list_users(include_deleted: bool = False):
query = User.query
if not include_deleted:
query = query.filter(User.deleted_at.is_(None))
return query.all()
48. Müşterileri bozmadan v1'den v2'ye nasıl geçiş yaparsınız?
Strangler Fig desenini kullanın:
- v2'yi v1 ile yan yana devreye alın
- Yeni özellikleri v2'ye yönlendirin
- Mevcut uç noktaları kademeli olarak taşıyın
- Sunset başlığıyla kullanım dışı bırakmayı duyurun
- Geçiş süresi sonrası v1'i kaldırın
49. Karmaşık filtrelemeli bir arama API'sini nasıl tasarlarsınız?
Birden çok filtreli ürün araması için:
GET /products?q=laptop&category=electronics&price[gte]=500&price[lte]=2000&brand=apple,dell&in_stock=true&sort=-rating&limit=20&cursor=abc123
Tasarım kararları:
- Tam metin arama için Elasticsearch kullanın (ilişkisel DB'ler bulanık eşleşmede zorlanır)
- Mevcut filtre seçeneklerini göstermek için yüzeysel (faceted) arama uygulayın
- Her filtre için sonuç sayısını döndürün ki kullanıcılar her filtrenin kaç sonuç ürettiğini bilsin
- Popüler arama kombinasyonlarını önbelleğe alın
50. Mikro servis mimarisinde API versiyonlamayı nasıl ele alırsınız?
Seçenekler:
-
Ağ geçidi (gateway) düzeyinde versiyonlama: API geçidi
/v1/*eski servislere,/v2/*yenilerine yönlendirir -
Servis düzeyinde versiyonlama: Her servis kendi sürüm uzlaşmasını yönetir
-
Tüketici güdümlü sözleşmeler: Uyumluluğu sağlamak için Pact veya benzeri araçlar kullanın
Çoğu ekip için ağ geçidi düzeyinde versiyonlama en temiz ayrımı sağlar.
51. Farklı kullanıcı katmanları için oran sınırlamayı nasıl uygularsınız?
Çözüm, katmana özel sınırları tanımlayıp bunları Redis sayaçlarıyla denetlemeyi içerir:
RATE_LIMITS = {
"free": {"requests": 100, "window": 3600},
"pro": {"requests": 1000, "window": 3600},
"enterprise": {"requests": 10000, "window": 3600}
}
async def rate_limit_middleware(request: Request):
user = get_current_user(request)
tier = user.subscription_tier
limits = RATE_LIMITS[tier]
key = f"rate:{user.id}:{current_hour()}"
count = await redis.incr(key)
if count == 1:
await redis.expire(key, limits["window"])
if count > limits["requests"]:
raise HTTPException(
status_code=429,
headers={
"X-RateLimit-Limit": str(limits["requests"]),
"X-RateLimit-Remaining": "0",
"Retry-After": str(seconds_until_reset())
}
)
Davranışsal REST API Soruları
Bu sorular, iletişim becerilerinizi ve gerçek dünya API zorluklarını nasıl ele aldığınızı değerlendirir. Sorun çözme sürecinizi ve paydaşlarla nasıl çalıştığınızı göstermeye odaklanın.
52. REST'i teknik olmayan bir kişiye açıklayın
"Bir REST API'yi, restorandaki bir garson gibi düşünün. Siz (müşteri) mutfağa doğrudan gidemezsiniz. Bunun yerine garsona menüden ne istediğinizi söylersiniz ve o da getirir. Menü, neleri sipariş edebileceğinizi listeleyen API dokümantasyonuna benzer. Garson belirli kuralları izler: bir şeyi istersiniz (GET), yeni bir şey sipariş edersiniz (POST) veya bir şeyi geri gönderirsiniz (DELETE). Mutfakta bir şey kalmadıysa, garson size söyler (404 Not Found) ki sonsuza kadar beklemeyesiniz."
Bu benzetme, paydaş toplantılarında şaşırtıcı derecede iyi çalışır.
53. Bir API'yi optimize ettiğiniz bir zamanı anlatın
STAR yöntemini kullanın:
- Durum: "Arama API'mız yoğun trafikte 3 saniyelik yanıt sürelerine sahipti"
- Görev: "Büyük mimari değişiklikler yapmadan gecikmeyi azaltmam gerekiyordu"
- Aksiyon: "Sık sorgular için Redis önbelleği ekledim, imleç tabanlı sayfalamayı uyguladım ve veritabanı indeksleri ekledim"
- Sonuç: "Yanıt süresi 200 ms'ye düştü ve 5 kat daha fazla trafiği karşıladık"
54. API tüketicilerine kırıcı değişiklikleri nasıl iletirsiniz?
-
Erken duyurun: Büyük değişiklikler için en az 6-12 ay önceden bildirin
-
Sunset başlığı kullanın:
Sunset: Sat, 31 Dec 2026 23:59:59 GMT -
Geçiş kılavuzları sağlayın: Tam olarak neyin değiştiğini ve nasıl uyarlanacağını belgeleyin
-
Her iki sürümü de çalıştırın: Geçiş sırasında eski sürümü açık tutun
-
Kullanımı izleyin: Hangi istemcilerin hâlâ eski sürümde olduğunu takip edin
55. API'ler için hangi dokümantasyonları oluşturursunuz?
Gerekli dokümantasyon şunları içerir:
- OpenAPI/Swagger şeması: Makinece okunabilir sözleşme
- Hızlı başlangıç kılavuzu: 5 dakikanın altında ilk API çağrısı
- Kimlik doğrulama kılavuzu: Kimlik bilgilerinin nasıl alınacağı ve kullanılacağı
- Hata referansı: Tüm olası hata kodları ve nasıl ele alınacakları
- Değişiklik günlüğü: Her sürümde nelerin değiştiği
- Oran sınırı dokümantasyonu: Katman başına limitler ve 429'ların nasıl ele alınacağı
56. REST'i ne zaman KULLANMAZSINIZ?
REST her zaman doğru seçim değildir. alternatifleri ne zaman kullanacağınızı bilmek mimari olgunluğu gösterir. Ekiplerin, REST'in sorun çözdüğünden çok daha fazla sorun yarattığı kullanım durumlarına zorlandığını gördüm.
|
Senaryo |
Daha İyi Alternatif |
|
Gerçek zamanlı sohbet veya oyun |
WebSockets |
|
Yüksek performanslı dahili servisler |
gRPC |
|
Karmaşık iç içe veri sorguları |
|
|
Olay güdümlü mimariler |
Mesaj aracılar (Kafka, RabbitMQ) |
|
Çift yönlü akış |
gRPC çift yönlü veya WebSockets |
REST API Hızlı Referans
HTTP yöntem özelliklerini, durum kodlarını veya yaygın kalıpları doğrulamanız gerektiğinde bu bölümü hızlı başvuru olarak kullanın; ister mülakat hazırlığında ister gerçek geliştirmede.
HTTP Yöntemleri Karşılaştırması
Bu tablo, her HTTP yönteminin kilit özelliklerini özetler ve kullanıcı durumunuza uygun olanı seçmenize yardımcı olur.
|
Yöntem |
Güvenli |
İdempotent |
Önbelleğe Alınabilir |
Tipik Kullanım |
|
GET |
Evet |
Evet |
Evet |
Kaynak getir |
|
POST |
Hayır |
Hayır |
Koşullu |
Kaynak oluştur |
|
PUT |
Hayır |
Evet |
Hayır |
Kaynağı değiştir |
|
PATCH |
Hayır |
Hayır |
Koşullu |
Kısmi güncelle |
|
DELETE |
Hayır |
Evet |
Hayır |
Kaynağı kaldır |
|
HEAD |
Evet |
Evet |
Evet |
Yalnızca başlıkları al |
|
OPTIONS |
Evet |
Evet |
Hayır |
CORS preflight |
Durum Kodları Referansı
En yaygın kullanılan HTTP durum kodları burada kategoriye göre düzenlenmiştir. Tüm spesifikasyonu ezberlemekten ziyade her birinin ne zaman kullanılacağını anlamaya odaklanın.
2xx Başarı
- 200 OK: Başarılı GET, PUT, PATCH
- 201 Created: Başarılı POST (Location başlığını ekleyin)
- 204 No Content: Başarılı DELETE
4xx İstemci Hataları
- 400 Bad Request: Bozuk sözdizimi
- 401 Unauthorized: Kimlik doğrulama gerekli
- 403 Forbidden: Kimliği doğrulanmış ancak yetkili değil
- 404 Not Found: Kaynak mevcut değil
- 409 Conflict: Durum çakışması
- 422 Unprocessable Entity: Doğrulama hatası
- 429 Too Many Requests: Oran sınırı aşıldı
5xx Sunucu Hataları
- 500 Internal Server Error: Genel sunucu hatası
- 502 Bad Gateway: Yukarı akış sunucu hatası
- 503 Service Unavailable: Geçici olarak aşırı yük
Kaçınılması Gereken Yaygın Hatalar
Deneyimli geliştiriciler bile bu tuzaklara düşer. REST API tasarlarken veya uygularken şu yaygın hatalara dikkat edin:
-
URL'lerde fiil kullanmak (ör.
/getUsersyerine/users) -
Hata durumları için 200 OK döndürmek; bu, istemci tarafı hata yönetimini bozar
-
401 ile 403'ü karıştırmak (Kimlik Doğrulama vs. Yetkilendirme)
-
URL'leri iki seviyeden fazla iç içe yapmak
-
Belirteçleri localStorage'da saklamak (XSS açıkları yaratır)
-
POST isteklerinde idempotentliği göz ardı etmek
-
Eyleme geçirilebilir ayrıntılar içermeyen genel hata mesajları döndürmek
Sonuç
Tanımları ezberlemenin her teknik mülakattan geçmenizi garanti etmeyeceğinin farkındayım. Gerçek şu ki, gerçek dünya mühendisliği sıklıkla az önce bahsettiğimiz "katı" kuralları esnetmeyi gerektirir ve mülakatçılar, RFC spesifikasyonlarını ezbere okumaktan ziyade muhakemenize önem verir. Çok uzmanlaşmış roller için, derin alan bilgisi veya belirli bir çerçevede uzmanlık yine belirleyici olabilir.
Ancak bu REST temellerine hâkim olmak, bu sorularla birebir karşılaşmasanız bile önemlidir. Bu, modern webin nasıl çalıştığını anlamak için bir plan görevi görür. Yeni bir sistem tasarlamanız ya da üretimde bir kesintiyi hata ayıklamanız istendiğinde, (daha önce açıkladığım gibi) 401 ile 403 arasındaki farkı anlamak, sorunları daha hızlı çözmenizi sağlar. Yalnızca çalışan kod yazmak değil, API etkileşimlerinizi standartlaştırmanın da kıdemli bir mühendisin alametifarikası olduğunu net biçimde görürsünüz.
Bu sistemleri derinlemesine inşa etmeye dalmak isterseniz, Python ile API'lere Giriş kursumuza göz atın.
Veri hatları, bulut ve YZ araçları üzerinde çalışan; aynı zamanda DataCamp ve gelişmekte olan geliştiriciler için pratik, yüksek etkili eğiticiler yazan bir veri mühendisi ve topluluk inşacısıyım.
SSS
HTTP yöntemleri için RFC spesifikasyonlarını ezberlemeli miyim?
Kesinlikle hayır. Mülakatçılar, dokümantasyonu ezberlemenizi değil, pratik sonuçlarını anladığınızı görmek ister. Bir ağ isteği başarısız olduğunda ve yeniden denemek gerektiğinde idempotentliğin neden önemli olduğuna odaklanın. İşte bu, junior ile senior bakışını ayırır.
2026'da SOAP veya XML-RPC sorulursa ne yaparım?
2026'da bile düşündüğünüzden daha sık olur; özellikle bankalar, sağlık sektörü veya kamu yüklenicileri için olan rollerde. Önemli olan, bu eski protokollerin neden hâlâ var olduğunu (katı sözleşmeler, mesaj düzeyi güvenlik) açıklamak; onları demode diye küçümsemek değil. Eğilimleri değil, ödünleşimleri anladığınızı gösterin.
Gerçek bir proje olmadan API tasarımını nasıl pratik ederim?
Her gün kullandığınız bir hizmeti seçin (Spotify, Twitter, spor salonunuzun rezervasyon sistemi) ve API'sini nasıl tasarlayacağınızı taslaklayın. Hangi uç noktaları oluştururdunuz? 10.000 şarkılık bir kullanıcının çalma listesinde sayfalamayı nasıl ele alırdınız? Bu egzersiz, bilgi boşluklarınızı hızla ortaya çıkarır.
Mülakatlarda gerçekten OAuth 2.1 mi soruluyor, yoksa OAuth 2.0 hâlâ baskın mı?
Çoğu şirket hâlâ OAuth 2.0 kullanıyor, ancak 2.1'in tüm istemciler için PKCE'yi zorunlu kıldığını bilmek, güvenlik en iyi uygulamalarını takip ettiğinizi gösterir. Bunu, herkesin zaten orada olduğunu varsaymak yerine "sektörün gittiği yön" olarak dile getirin.
Adayların en çok tökezlediği tek şey nedir?
Sistem tasarımında açıklayıcı sorular sormamak. "Bir API tasarlayın" denince, adaylar ölçek, tutarlılık gereksinimleri veya bunun dahili mi herkese açık mı olduğunu sormadan doğrudan uç noktalara atlıyor. En iyi yanıtlar çözümlerle değil, sorularla başlar.

