Everion Consulting
Everion Consulting
Ana SayfaBlogModel'den JSON'a: Django REST Framework ile Modern API Geliştirme

Model'den JSON'a: Django REST Framework ile Modern API Geliştirme

Model'den JSON'a: Django REST Framework ile Modern API Geliştirme
Gökçe Güler

Gökçe Güler

27 Temmuz 2025

Veritabanı YönetimiDjangoAPI Geliştirme

Django REST Framework (kısaca DRF) Django tabanlı projelerde API (Application Programming Interface) geliştirmeyi kolaylaştıran güçlü ve esnek bir araçtır. Django’nun geleneksel yaklaşımı genellikle HTML şablonları üzerinden kullanıcıya içerik sunmaya yöneliktir. Ancak günümüz uygulamaları özellikle mobil uygulamalar ve tek sayfa uygulamaları (SPA) için HTML yerine JSON tabanlı veri alışverişine ihtiyaç duyar. İşte bu noktada DRF devreye girer.

DRF veritabanında saklanan verileri JSON formatında dış dünyaya sunan ve aynı zamanda dışarıdan gelen JSON verileri güvenli biçimde içeri alıp işleyebilen bir yapıdır. Böylece React, Vue.js veya mobil bir Flutter uygulaması Django tabanlı backend ile kolaylıkla konuşabilir.

DRF yalnızca veri gönderip almakla kalmaz; aynı zamanda bu işlemleri güvenli, yönetilebilir ve standartlara uygun şekilde yapmanızı sağlar. Kimlik doğrulama (authentication), yetkilendirme (permissions), veri filtreleme (filtering), sayfalama (pagination) gibi gelişmiş özelliklerle donatılmıştır.

Klasik Django’da bir API geliştirmek için çok fazla elle işlem yapılması gerekirken DRF bu süreci standartlaştırır ve kısaltır. Model → Serializer → View → Router yapısıyla hem okunabilir hem de sürdürülebilir bir API mimarisi sunar.

DRF’in Temel Bileşenleri

Sıcak bir yaz gününde bir müşteri limonata siparişi verir. Masaya gelen bardak serinletici ve lezzetlidir ama bu tek adımda gerçekleşmez. Arka planda işleyen küçük ama etkili bir sistem vardır: limonata mutfakta hazırlanır, sürahiden bardağa dökülür, sipariş alınır ve doğru masaya ulaşır. Django REST Framework (DRF) içinde verinin frontend’e ulaşması da benzer bir düzenle işler.

Model – Veritabanındaki Limonata Bidonu

Limonatacının merkezinde büyük bir limonata bidonu yer alır. İçinde limon, şeker, su oranı önceden ayarlanmış şekilde bekler. Müşteri bu bidona doğrudan erişemez; bardaktaki içeceğin kaynağı burasıdır. İşte bu yapı Django'da Model kavramına karşılık gelir. Model veritabanında tutulan verinin tanımıdır. Django’nun models.Model sınıfı kullanılarak oluşturulur. Örneğin bir blog sisteminde Post modeli başlık, içerik, tarih gibi alanları içerir. DRF dış dünyaya sunacağı veriyi önce bu modelden alır.

Serializer – Limonatayı Bardağa Koyan Görevli

Ardından mutfakta bir görevli limonatayı sürahiden bardağa doldurur. Ölçüyü ayarlar, belki buz ekler. Böylece limonata artık servis edilebilir hale gelir yani müşterinin tüketebileceği bir forma bürünür. DRF’de bu görevi Serializer üstlenir. Model’den gelen Python nesnelerini, frontend’in anlayabileceği JSON formatına çevirir. Aynı zamanda kullanıcıdan gelen JSON verileri doğrular ve modeli güncelleyebilecek hale getirir. ModelSerializer kullanarak bu süreci oldukça pratik bir şekilde tanımlamak mümkündür.

View – Siparişi Yöneten Garson

Siparişi masadan alan, mutfağa ileten ve ardından doğru bardağı geri getiren kişi garsondur. Hangi limonatanın seçileceğine, ne kadar verileceğine dair kararlar bu kişi üzerinden yürür. Bu DRF’de View yapısına denk gelir. APIView, GenericAPIView veya ViewSet sınıfları gelen HTTP isteklerini karşılar. Kullanıcının ne talep ettiğine göre ilgili veriyi getirir, oluşturur, günceller ya da siler. View sistemin karar mekanizmasıdır.

Router – Masaların Haritası

Son olarak tüm bu sürecin düzgün işlemesi için garsonların hangi siparişi hangi masaya götüreceği bilinmelidir. Siparişlerin yönlendirildiği masa planı, sistemin düzgün işlemesini sağlar. DRF’de bu yönlendirme Router yapısıyla sağlanır. Router tanımlanan View’leri uygun URL'lere bağlar. Örneğin /api/posts/ gibi endpoint’ler otomatik olarak oluşturulur. DRF’in DefaultRouter sınıfı, RESTful yapıdaki URL’leri kolayca üretir.

Limonatacının iç işleyişi gibi DRF’in veri sunma süreci de organize çalışır. Model, Serializer, View ve Router birlikte çalışarak veritabanındaki ham veriyi kullanıcıya ulaşan yapılandırılmış ve güvenli bir JSON cevabına dönüştürür.

Serializer Çeşitleri: Veriyi Formatlamanın Farklı Yolları

Django REST Framework’te (DRF) veritabanı ile frontend arasında veri akışını yöneten en önemli katmanlardan biri serializer’lardır. Serializer veriyi JSON formatına çevirir veya gelen JSON verisini Python objelerine dönüştürür. DRF bu işlemler için geliştiricilere iki temel seçenek sunar: ModelSerializer ve Serializer.

ModelSerializer: Hızlı ve Otomatik

ModelSerializer,Django modeline dayanır ve tüm alanları otomatik olarak oluşturur. CRUD işlemleri gibi standart kullanım senaryoları için idealdir. Kod tekrarını azaltır ve geliştirme sürecini hızlandırır.

class PostSerializer(serializers.ModelSerializer):
class Meta:
model = Post
fields = '__all__'

Ne zaman kullanılır?

Eğer model doğrudan API’de kullanılacaksa ve özel bir iş mantığı gerekmiyorsa ModelSerializer hızlı bir başlangıç sağlar.

Serializer: Esnek ve Kontrollü

Serializer sınıfı modelden tamamen bağımsızdır. Tüm alanlar manuel tanımlanır ve create() / update() gibi işlemler elle yazılır. Bu nedenle daha fazla esneklik sağlar.

class CustomSerializer(serializers.Serializer):
name = serializers.CharField()
value = serializers.IntegerField()

Ne zaman kullanılır?

Model dışı veri yapılarıyla çalışırken özel doğrulama kuralları gerektiğinde ya da sadece belirli alanları dönmek istenildiğinde tercih edilir.

Hangisi daha hızlı?

DRF'de ModelSerializer ve Serializer arasında doğrudan bir hız karşılaştırması yapılmaz. Genel olarak ModelSerializer, CRUD işlemleri için hızlı ve kullanışlıdır çünkü alanları otomatik oluşturur. Ancak bazı senaryolarda özellikle büyük veri listelerinde veya tablo görünümlerinde Serializer kullanılarak yalnızca gerekli alanların manuel tanımlanması nested yapıların azaltılması gibi yöntemlerle daha optimize çözümler elde edilebilir.

Az veri ve basit yapı: ModelSerializer ile hızlı ve kolay bir çözüm

Çok veri ve özelleştirme ihtiyacı: Serializer ile daha kontrollü ve verimli bir yapı

View Çeşitleri: API'yi Yöneten Katmanlar

Django REST Framework’te (DRF) view sınıfları API’ye gelen HTTP isteklerini karşılayan ve bu isteklere uygun işlemleri gerçekleştiren yapılardır. Veriyi getirme, oluşturma, güncelleme ve silme gibi işlemler burada tanımlanır. DRF farklı ihtiyaçlara uygun esneklik sunan birkaç farklı view türü sağlar.

 APIView: Temelden Başlamak

APIView DRF’in en temel view sınıfıdır. Her HTTP metodunu (GET, POST, PUT, DELETE vb.) manuel olarak tanımlamak gerekir. Django’nun class-based view (CBV) yapısına çok benzer.

Ne zaman kullanılır?
Özel iş mantığı gerekiyorsa veya her adımı tamamen kontrol etmek isteniyorsa APIView tercih edilir.

GenericAPIView ve Mixins: Esnek ve Kısayol

GenericAPIView APIView'in üzerine bazı ek yetenekler getirir. Tek başına kullanılmak yerine çoğunlukla Mixin sınıflarıyla birlikte çalışır. Bu yapılar CRUD işlemlerini hızlandırır ve kod tekrarını azaltır.

Ne zaman kullanılır?
CRUD işlemlerini özelleştirmek isteniyorsa ama temel yapı korunacaksa bu yapı tercih edilir.

ViewSet ve ModelViewSet: Otomatik ve Hızlı

ViewSet DRF’in sunduğu en yüksek seviyeli yapıdır. HTTP metodları yerine “eylem odaklı” (list, create, retrieve, update, destroy) metotlar kullanılır. ModelViewSet ise model tabanlı CRUD işlemlerini en kısa sürede ayağa kaldırmak için geliştirilmiştir. Router ile birlikte çalışır.

Ne zaman kullanılır?
CRUD işlemleri standartsa ve hızlı geliştirme öncelikliyse ModelViewSet idealdir.

ÖzellikapıvıewGenerıcAPIVıew + MıxınVıewSet / ModelVıewSet
Düşük seviye kontrolEvetOrta düzeyAz
Kod yazımı kısa mı?HayırDaha kısaEn kısa
Özelleştirme kolay mı?Tam kontrolKısmi kontrolBazı sınırlar var
Router ile çalışır mı?Manuel URLManuel URLOtomatik routing
Kullanım senaryosuÖzel iş mantığıYarı özelleştirmeStandart CRUD işlemleri

API Güvenliği: Authentication ve Permissions

Bir API dış dünyaya veri açıyorsa bu verinin kimlerle, hangi şartlarla paylaşıldığı son derece kritiktir. Django REST Framework (DRF) bu noktada güvenliği sağlamak için iki temel katman sunar:

  • Authentication (Kimlik Doğrulama): Sisteme kimin erişmeye çalıştığını belirler. Örneğin Token, Session veya JWT tabanlı kimlik doğrulama yöntemleri kullanılabilir.
  • Permissions (Yetkilendirme): Kimlik doğrulaması yapılmış kullanıcının hangi verilere erişebileceğini veya hangi işlemleri yapabileceğini denetler. Örneğin sadece yazarlara yazı düzenleme hakkı verilmesi gibi.

DRF IsAuthenticated, AllowAny, IsAdminUser gibi hazır permission sınıfları sunar. Daha karmaşık ihtiyaçlar için özel izinler (CustomPermission) tanımlamak da mümkündür.

Sonuç

Bir bardak limonata masaya öylece gelmez. Bir mutfak, bir düzen, bir sistem vardır arkasında. Django REST Framework de veriyi frontend’e ulaştırırken benzer bir düzen sunar. Modelde başlar, serializer’la şekillenir, view’la yol alır ve router’la doğru adrese ulaşır. DRF’yi öğrenmek sadece bir aracı kullanmayı değil veriyi düzenli ve anlaşılır şekilde aktarmayı da öğretir.

İster hobi projesi ister büyük bir uygulama geliştiriyor olun iyi kurulmuş bir API, sistemler arasında bilgi akışını güvenli ve sade biçimde sağlar. Bu yapıyı doğru kurmak yazılımın hem anlaşılabilirliğini hem de sürdürülebilirliğini artırır. Kodu sadece çalıştıran değil düzenli, anlaşılır ve paylaşılabilir hâle getiren herkes için: DRF güzel bir başlangıçtır.

Kaynakça

Django REST Framework

Model'den JSON'a: Django REST Framework ile Modern API Geliştirme | Everion Consulting