Görüntülenme: 218
Yayın Tarihi: 12-03-2024
API, yazılım uygulamaları arasında iletişim kurmayı sağlayan bir arayüzdür. API’ler, uygulamaların verilerini paylaşmalarını, kullanmalarını veya etkileşimde bulunmalarını sağlar. İşte bu yüzden API’ler yazılım dünyasının vazgeçilmez bir parçasıdır. Django Rest Framework (DRF) ise RESTful API’ler oluşturmanıza yardımcı olur.
Bu yazıda, Django Rest Framework ile örnek bir RestAPI geliştireceğiz.
Django Rest Framework (DRF), Django tabanlı web uygulamaları için RESTful API’lerin hızlı bir şekilde oluşturulmasına ve yönetilmesine yardımcı olan bir Python kütüphanesidir. Django Rest Framework, Django’nun veri tabanı yeteneklerini kullanarak, API geliştirme sürecini kolaylaştırır.
ListCreateAPIView
ve RetrieveUpdateDestroyAPIView
gibi API view'lari, listeleme, oluşturma, okuma, güncelleme ve silme işlemlerini destekler.Başlamadan önce gerekli DRF modülünü kuralım:
pip install djangorestframework
Projenizin içerisinde bir uygulama oluşturalım:
python manage.py startapp API
Projenizin settings.py dosyasındaki INSTALLED_APPS
kısmını düzenleyelim:
INSTALLED_APPS = [ ... "rest_framework", "API", ]
API > models.py dosyasında bir model oluşturalım:
from django.db import models class Kitaplar(models.Model): kitap = models.CharField(max_length=200) yazar = models.CharField(max_length=100) sayfa = models.IntegerField() def __str__(self): return self.kitap
Şimdi verilerimizi doğrulayabilmek ve uygun veri türüne çevirebilmek için serileştirme işlemi yapmamız gerekiyor.
API > serializers.py adında dosya oluşturup aşağıdaki kodu yazalım:
from rest_framework import serializers from .models import Kitaplar class KitapSerializers(serializers.ModelSerializer): class Meta: model = Kitaplar fields = '__all__' def validate_sayfa(self, SAYI): if SAYI <= 0: raise serializers.ValidationError("Sayfa sayısı 0'dan büyük olmalı.") return SAYI
Bu işlem, gelen verileri doğrulamamızı sağlıyor. Yukarıda ki örneğe bakarsak, yazdığımız validate’e göre sayfa sayısının sıfırdan büyük olmasını istiyor. Gönderilen değer sıfır veya negatif bir sayı ise veriyi kabul etmiyor.
API -> views.py dosyasını açalım ve aşağıdaki kodları ekleyelim.
from rest_framework.generics import ListCreateAPIView, RetrieveUpdateDestroyAPIView from .models import Kitaplar from .serializers import KitapSerializers class KitapEkle(ListCreateAPIView): queryset = Kitaplar.objects.all() serializer_class = KitapSerializers class KitapGuncelle(RetrieveUpdateDestroyAPIView): queryset = Kitaplar.objects.all() serializer_class = KitapSerializers
Bu kısımda DRF’de dahili olarak gelen veri listeleme, oluşturma ve güncelleme fonksiyonlarını kullanarak views’ler oluşturduk.
Projenizin veya uygulamanızın urls.py dosyasına giderek API yolumuzu belirleyelim:
from django.urls import path from API import views urlpatterns = [ path('kitap-ekle/', views.KitapEkle.as_view(), name='kitap-ekle'), path('kitap-guncelle/<int:pk>/', views.KitapGuncelle.as_view(), name='kitap-guncelle'), ]
Son olarak veritabanımızı taşıyıp aktif edelim.
python manage.py makemigrations python manage.py migrate
Tüm işlemlerimiz bitti. Artık oluşturduğumuz API’mizi test edebiliriz.
Projemizi başlatalım.
python manage.py runserver
Örnek olarak bir kaç kitap ekleyebiliriz. Bunun için aşağıdaki adrese gidip POST isteği atalım.
http://127.0.0.1:8000/kitap-ekle/
Bu adrese gittiğimiz zaman DRF API döküman sayfası bizi karşılayacaktır.
Ben örnek olarak 2 veri ekledim. GET isteği atıldığı zaman verileri listeleriz, POST isteği attığımız da yeni veri ekleyebiliriz.
Serileştirme kısmında yazdığımız validate’i burada sıfır veya eksi değer yazarak kontrol edebiliriz.
Aşağıdaki adrese giderek kitapları güncelleyelim.
http://127.0.0.1:8000/kitap-guncelle/1/
Yine aynı şekilde adrese GET isteği atıldığı zaman ilgili veriyi listeleriz. PUT isteği ile veriyi güncelleyebiliriz.
Bu makalede, Django Rest Framework kullanarak RESTful API geliştirmenin temel adımlarını inceledik.
Ayrıca, API dökümantasyonunu otomatik olarak oluşturmak için DRF’in sunduğu araçları kullandık. Bu, API kullanıcılarının API’yi daha iyi anlamalarına yardımcı olacaktır.