Pendahuluan
Dalam ebook ini, Anda akan belajar bagaimana membangun sebuah API mirip IMDB menggunakan Django REST Framework (DRF).
API ini akan memungkinkan Anda untuk mengelola data film, termasuk detail film dan review dari pengguna.
Django REST Framework adalah toolkit yang powerful dan fleksibel untuk membangun Web APIs dengan Django.
Dengan mengikuti langkah demi langkah, Anda akan memahami konsep dasar hingga lanjutan dalam membangun RESTful API.
Persiapan dan Setup Project
Langkah pertama adalah menyiapkan environment dan membuat project Django baru.
-
Install Python dan Virtual Environment
Pastikan Python sudah terinstall. Buat virtual environment untuk isolasi project:
python -m venv env
source env/bin/activate # Linux/Mac
env\Scripts\activate # Windows
-
Install Django dan Django REST Framework
Jalankan perintah berikut:
pip install django djangorestframework
-
Buat Project dan Aplikasi Baru
Buat project dan aplikasi bernama
imdb_clone
dan
movies
:
django-admin startproject imdb_clone
cd imdb_clone
python manage.py startapp movies
-
Tambahkan aplikasi ke
INSTALLED_APPS
Edit
imdb_clone/settings.py
dan tambahkan:
INSTALLED_APPS = [
...
'rest_framework',
'movies',
]
-
Jalankan server untuk memastikan setup berhasil
python manage.py runserver
Buka
http://127.0.0.1:8000/
di browser, Anda akan melihat halaman default Django.
Membuat Model untuk Film dan Review
Selanjutnya, kita buat model untuk menyimpan data film dan review pengguna.
Kode di
movies/models.py
:
from django.db import models
class Movie(models.Model):
title = models.CharField(max_length=255)
description = models.TextField()
release_year = models.PositiveIntegerField()
director = models.CharField(max_length=255)
genre = models.CharField(max_length=100)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
class Review(models.Model):
movie = models.ForeignKey(Movie, related_name='reviews', on_delete=models.CASCADE)
reviewer_name = models.CharField(max_length=100)
rating = models.PositiveSmallIntegerField()
comment = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f'Review for {self.movie.title} by {self.reviewer_name}'
Setelah membuat model, jalankan migrasi:
python manage.py makemigrations
python manage.py migrate
Membuat Serializers
Serializers mengubah data model menjadi format JSON dan sebaliknya. Buat file
movies/serializers.py
dan isi dengan:
from rest_framework import serializers
from .models import Movie, Review
class ReviewSerializer(serializers.ModelSerializer):
class Meta:
model = Review
fields = ['id', 'reviewer_name', 'rating', 'comment', 'created_at']
class MovieSerializer(serializers.ModelSerializer):
reviews = ReviewSerializer(many=True, read_only=True)
class Meta:
model = Movie
fields = ['id', 'title', 'description', 'release_year', 'director', 'genre', 'created_at', 'reviews']
Dengan serializer ini, kita bisa menampilkan film beserta review-reviewnya dalam satu response JSON.
Membuat Views dan API Endpoints
Kita akan menggunakan
ViewSets
untuk membuat endpoint CRUD secara otomatis.
Isi
movies/views.py
dengan:
from rest_framework import viewsets
from .models import Movie, Review
from .serializers import MovieSerializer, ReviewSerializer
class MovieViewSet(viewsets.ModelViewSet):
queryset = Movie.objects.all()
serializer_class = MovieSerializer
class ReviewViewSet(viewsets.ModelViewSet):
queryset = Review.objects.all()
serializer_class = ReviewSerializer
Dengan ini, Anda sudah memiliki API untuk mengelola film dan review dengan endpoint standar seperti GET, POST, PUT, DELETE.
Routing dan URL Configuration
Tambahkan routing otomatis menggunakan
routers
di
movies/urls.py
:
from rest_framework import routers
from django.urls import path, include
from .views import MovieViewSet, ReviewViewSet
router = routers.DefaultRouter()
router.register(r'movies', MovieViewSet)
router.register(r'reviews', ReviewViewSet)
urlpatterns = [
path('', include(router.urls)),
]
Kemudian, di
imdb_clone/urls.py
, tambahkan include untuk aplikasi movies:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include('movies.urls')),
]
Sekarang API Anda dapat diakses melalui
/api/movies/
dan
/api/reviews/
.
Testing API dengan Postman dan Curl
Anda dapat menguji API menggunakan Postman atau curl. Contoh curl untuk mendapatkan daftar film:
curl -X GET http://127.0.0.1:8000/api/movies/
Contoh menambahkan film baru dengan curl:
curl -X POST http://127.0.0.1:8000/api/movies/ \
-H "Content-Type: application/json" \
-d '{
"title": "Inception",
"description": "A mind-bending thriller by Christopher Nolan.",
"release_year": 2010,
"director": "Christopher Nolan",
"genre": "Sci-Fi"
}'
Di Postman, Anda bisa membuat request GET, POST, PUT, DELETE dengan mudah dan melihat response JSON secara interaktif.
Deployment dan Tips Lanjutan
Setelah API berjalan dengan baik di lokal, Anda bisa deploy ke platform seperti Heroku, DigitalOcean, atau AWS.
Tips penting:
-
Gunakan
django-environ
untuk mengelola environment variables.
-
Gunakan database production seperti PostgreSQL.
-
Amankan API dengan authentication (Token, JWT, OAuth).
-
Gunakan
django-cors-headers
untuk mengatur CORS jika API diakses dari frontend berbeda domain.
-
Optimalkan query dengan
select_related
dan
prefetch_related
untuk performa.
Sumber Belajar dan Referensi
Berikut beberapa sumber belajar yang sangat membantu untuk memperdalam Django REST Framework dan pengembangan API: