Kodnos
Software Engineering

Surekli Gordugum REST API Tasarim Hatalari ve Nasil Duzeltilir

Aynı API tasarım hataları kod incelemelerinde sürekli karşıma çıkıyor. İşte en sık gördüğüm 10 hata, net örnekler, doğru HTTP durum kodları ve bugün kullanabileceğiniz bir yayın öncesi kontrol listesi.

A
admin
4 Nis 202614 dk okuma23 görüntülenme
Surekli Gordugum REST API Tasarim Hatalari ve Nasil Duzeltilir

Yıllar içinde yüzlerce REST API inceledim — bir geliştirici olarak, kod inceleyici olarak ve laptopumu pencereden atmak istemememe neden olan üçüncü parti API'lerle entegre olması gereken biri olarak. Aynı hatalar sürekli karşıma çıkıyor ve sinir bozucu olan şey, bunların çoğunu bildiğinizde düzeltmenin kolay olması.

İşte en sık gördüklerim ve bunun yerine ne yapılması gerektiğine dair net örnekler.

Hata 1: URL'lerde Fiiller

Özellikle ilk API'sini oluşturan geliştiricilerden en yaygın hata budur.

Yanlış:
POST   /api/createUser
GET    /api/getUsers

Doğru: POST /api/users (oluştur) GET /api/users (listele) GET /api/users/5 (bir tane al) PUT /api/users/5 (güncelle) DELETE /api/users/5 (sil)

HTTP metodu zaten eylemi söylüyor. URL kaynağı (ne) tanımlamalı, işlemi (nasıl) değil. URL'leri isim olarak düşünün, fiil olarak değil.

Bu sadece stil tercihi değil — REST'in temelidir. URL'ler kaynak tabanlı olduğunda istemciler API yapısını tahmin edebilir. /api/users endpoint'i olduğunu biliyorsam, /api/posts ve /api/comments in aynı şekilde çalıştığını tahmin edebilirim.

Hata 2: Tutarsız İsimlendirme

Aynı proje içinde isimlendirme kurallarını karıştıran API'ler gördüm:

Yanlış (karışık kurallar):
/api/blog-posts      (kebab-case)
/api/user_profiles   (snake_case)
/api/orderItems      (camelCase)

Doğru (tutarlı kebab-case): /api/blog-posts /api/user-profiles /api/order-items

Kebab-case URL'ler için en yaygın kuraldır çünkü okunabilir ve URL güvenlidir. Ama belirli kural tutarlılıktan daha az önemlidir. Birini seçin ve tüm API'nizde bağlı kalın.

Ayrıca koleksiyon endpoint'leri için çoğul isimler kullanın: /api/users, /api/user değil.

Hata 3: Uygun Durum Kodları Kullanmamak

Her şey için HTTP 200 döndüren ve gerçek durumu yanıt gövdesine koyan API'ler gördüm. Bu korkunçtur çünkü HTTP istemcileri, proxy'ler ve izleme araçlarının hepsi ne olduğunu anlamak için durum kodlarına güvenir.

Yanlış:
HTTP 200 { "success": false, "error": "Kullanıcı bulunamadı" }

Doğru: HTTP 404 { "message": "Kullanıcı bulunamadı" }

Bilmeniz gereken durum kodları:

  • 200 Başarılı GET, PUT
  • 201 Oluşturuldu (başarılı POST)
  • 204 İçerik Yok (başarılı DELETE)
  • 400 Geçersiz İstek (doğrulama hataları)
  • 401 Yetkisiz (kimlik doğrulanmamış)
  • 403 Yasaklı (doğrulanmış ama yetkili değil)
  • 404 Bulunamadı
  • 409 Çatışma (tekrar kaynak)
  • 429 Çok Fazla İstek (hız limiti aşıldı)
  • 500 Sunucu Hatası

401 ve 403 arasındaki farka özellikle dikkat edin. Bunu yanlış yapmak API'nizle entegre olan her frontend geliştiriciyi şaşırtır.

Hata 4: Aşırı İç İçe URL'ler

Yanlış:
/api/companies/5/departments/3/employees/42/projects/7/tasks

Daha iyi: /api/tasks?project_id=7 /api/projects/7/tasks

İkiden fazla iç içe seviye API'nizi kullanmayı zorlaştırır. Daha derine inmeye cazip olduğunuzda kendinize sorun: bu alt kaynak doğrudan erişilebilir mi?

Hata 5: Sayfalama Yok

Tüm kayıtları döndürmek saatli bir bombadır:

JSON
{
  "content": [...20 kullanıcı...],
  "totalElements": 50000,
  "totalPages": 2500,
  "number": 0,
  "size": 20
}

Liste endpoint'lerini her zaman sayfalayın. Makul bir varsayılan sayfa boyutu (20 yaygındır) ve bir maksimum (100 makuldür) belirleyin.

Yüksek performanslı API'ler için offset tabanlı yerine imleç tabanlı sayfalamayı düşünün.

Hata 6: Dahili Sıralı ID'leri Göstermek

Bu hem tasarım hem güvenlik sorunudur. Sıralı ID'ler kaç kullanıcınız olduğunu, büyüme hızını ortaya çıkarır ve tüm kaynakları numaralandırmayı önemsiz hale getirir. UUID kullanın.

Hata 7: Sürümlemeyi Çok Geç Olana Kadar Görmezden Gelmek

Bir gün API'nizde kırıcı bir değişiklik yapmanız gerekecek. Sürümleme planlamadıysanız tüm mevcut istemcileri kırmak veya çirkin geriye uyumlu hack'leri sürdürmek arasında seçim yapmak zorunda kalırsınız.

URL sürümleme (en yaygın, en kolay):
/api/v1/users
/api/v2/users

Hata 8: Tutarsız Hata Yanıtları

API'nizdeki her hata aynı yapıyı takip etmelidir:

JSON
{
  "status": 400,
  "message": "Doğrulama başarısız",
  "errors": [
    {
      "field": "email",
      "message": "geçerli bir e-posta adresi olmalıdır"
    },
    {
      "field": "password",
      "message": "en az 8 karakter olmalıdır"
    }
  ]
}

Backend'inizde bir hata yanıtı sınıfı oluşturun ve global exception handler aracılığıyla tutarlı kullanın.

Hata 9: Hız Sınırlama Olmadan Genel Endpoint'ler

Hız sınırlaması olmayan herhangi bir genel API kötüye kullanıma davetiyedir. Tek bir istemci saniyede binlerce istekle sunucunuzu doldurabilir.

Hata 10: Çok Fazla veya Çok Az Veri Döndürmek

Tam olarak neyin döndürüleceğini kontrol etmek için DTO'lar kullanın. Dahili uygulama detaylarını, hassas verileri veya veritabanı entity'lerini doğrudan asla göstermeyin.

Yayın Öncesi Kontrol Listesi

Bir API göndermeden önce kontrol edin: İsim URL'ler, tutarlı isimlendirme, doğru HTTP metotları, doğru durum kodları, tüm listelerde sayfalama, girdi doğrulama, tutarlı hata formatı, kimlik doğrulama ve yetkilendirme, hız sınırlama, API belgeleri, yanıtlarda hassas veri yok, CORS doğru yapılandırılmış.

Sonuç

İyi API tasarımı kuralları körü körüne takip etmek değildir. API'nizi tahmin edilebilir yapmaktır. Geliştiriciler belgeleri okumadan bir endpoint'in nasıl çalıştığını tahmin edebildiğinde, hata mesajları tam olarak neyin yanlış gittiğini söylediğinde — bu iyi tasarlanmış bir API'dir.

API tasarımına koyduğunuz çaba her gün geri öder — daha az destek sorusu, daha hızlı entegrasyonlar ve daha az hata.

14 DkBu makaleyi paylaşın
Oğuzhan Berke Özdil
Yazar

Oğuzhan Berke Özdil

Çocukluğumdan beri bilgisayarlarla iç içeyim. Bu sitede, yazılımı daha sağlam temellerle öğrenme yolculuğumda edindiğim bilgi ve deneyimleri paylaşıyorum. AGH University of Krakow'da Bilgisayar Bilimleri lisansımı tamamladım ve şu anda aynı üniversitede AI & Data Analysis odaklı yüksek lisansıma devam ediyorum.

Yorumlar (