REST (REpresentational State Transfer) merupakan standar arsitektur komunikasi berbasis web yang sering diterapkan dalam pengembangan layanan berbasis web. Umumnya menggunakan HTTP (Hypertext Transfer Protocol) sebagai protocol untuk komunikasi data.

Pada arsitektur REST, REST server menyediakan resources (sumber daya/data) dan REST client mengakses dan menampilkan resource tersebut untuk penggunaan selanjutnya. Setiap resource diidentifikasi oleh URIs (Universal Resource Identifiers) atau global ID. Resource tersebut direpresentasikan dalam bentuk format teks, JSON atau XML. Pada umumnya formatnya menggunakan JSON dan XML.

Pada umumnya REST memanfaatkan empat metode di HTTP, yaitu:

  1. GET
    Metod request GET merupakan representasi dari spesifik resource yang ditentukan. Request menggunakan GET hanya akan mengambil data HEAD, metod HEAD meminta respons yang identik dengan request GET, tetapi tanpa respon BODY.
  2. POST
    Metod POST digunakan untuk mengirimkan data ke resource yang ditentutkan, biasanya menyebabkan perubahan status atau data pada server.
  3. PUT
    Metod PUT digunakan untuk mengganti semua data pada spesifik resource target .
  4. DELETE
    Metod DELETE digunakan untuk menghapus spesifik resource target.

Untuk membuat Rest API dengan Django, yang perlu dipersiapkan yaitu :

  • Python (kita menggunakan python v3).
  • Vitual Environment Wrapper, kemudian buat vitual environment, setelah itu ketik perintah workon virtualenv_name utuk mengaktifkan dan berkerja pada vitualenv yang kita inginkan (pada sisi kiri terminal akan menampilkan vitualenv yang sedang aktif).
  • Instal Django pada vitual environment wrapper yang sedang aktif (kita menggunakan Django v3).
  • Instal Django Rest Framework pada vitual environment wrapper yang sedang aktif.
pip install djangorestframework

Setelah sudah selesai persiapan setting enviroment. Maka langsung saja memulai.

  1. Jalankan/aktifkan vitual environment yang sudah dipersiapkan.
  2. Buat project django terlebih dahulu melalui terminal/cmd dengan cara:
django-admin.py startproject project_name
  1. Selanjutnya kita akan menyimpan file database di folder proyek. Sekarang kita akan melakukan migrasi database untuk pertama kali dan ini hukumnya wajib bila kita ingin menggunakan halaman admin Django:
python manage.py migrate
  1. Masuk ke dalam direktori project (cd project_name), Kemudian buat app dengan cara:
django-admin.py startapp app_name
  1. Setelah project dan app sudah dibuat selanjutnya yaitu menambahkan app yang dibuat tadi dan app rest framework pada settings.py:
INSTALLED_APPS = (
        ...
    'rest_framework',
    'app_name'
)
  1. Buat model yang akan dibuat pada direktori app yang telah dibuat selelumnya, contoh kode pada models.py:
from __future__ import unicode_literals
from django.db import models

class Divisi (models.Model):
    nama = models.CharField(max_length=100)
    keterangan =models.TextField(blank=True)

    def __str__(self):
        return self.nama

class Jabatan (models.Model):
    nama = models.CharField(max_length=100)
    keterangan = models.TextField(blank=True)

    def __str__(self):
        return self.nama

class Karyawan (models.Model):
    JENIS_KELAMIN_CHOICES = (
        ('pria', 'Pria'),
        ('wanita', 'Wanita'),
    )

    JENIS_KARYAWAN_CHOICES = (
        ('magang', 'Magang'),
        ('kontrak', 'Kontrak'),
        ('tetap', 'Tetap'),
    )

    nama = models.CharField(max_length=100)
    alamat = models.TextField(blank=True)
    jenis_kelamin = models.CharField(max_length=10, choices=JENIS_KELAMIN_CHOICES)
    jenis_karyawan = models.CharField(max_length=10, choices=JENIS_KARYAWAN_CHOICES)
    no_telepon = models.CharField(max_length=30, blank=True)
    email = models.CharField(max_length=100, blank=True)
    no_rekening = models.CharField(max_length=100)
    pemilik_rekening = models.CharField(max_length=100)
    divisi = models.ForeignKey(Divisi, on_delete=models.CASCADE)
    jabatan = models.ForeignKey(Jabatan, on_delete=models.CASCADE)

    def __str__(self):
        return self.nama
  1. Sekarang saatnya kita akan menampilkan model tersebut menjadi sebuah “halaman khusus” di halaman admin Django. Silahkan salin source code berikut ke admin.py pada direktori app.
from __future__ import unicode_literals

from django.contrib import admin
from app_name.models import Divisi, Jabatan, Karyawan

# Register your models here.
class DivisiAdmin (admin.ModelAdmin):
    list_display = ['nama', 'keterangan']
    list_filter = ()
    search_fields = ['nama', 'keterangan']
    list_per_page = 25

admin.site.register(Divisi, DivisiAdmin)

class JabatanAdmin (admin.ModelAdmin):
    list_display = ['nama', 'keterangan']
    list_filter = ()
    search_fields = ['nama', 'keterangan']
    list_per_page = 25

admin.site.register(Jabatan, JabatanAdmin)

class KaryawanAdmin (admin.ModelAdmin):
    list_display = ['nama', 'alamat', 'jenis_kelamin', 'jenis_karyawan', 'jabatan', 'divisi', 'email', 'no_telepon']
    list_filter = ('jenis_kelamin', 'jenis_karyawan', 'jabatan', 'divisi')
    search_fields = ['nama', 'alamat', 'email', 'no_telepon']
    list_per_page = 25

admin.site.register(Karyawan, KaryawanAdmin)
  1. Kemudian migrasi database karena ada penambahan model yang akan berimbas pada penambahan tabel di database. Silahkan eksekusi perintah python manage.py makemigrations untuk menelusuri perubahan apa sajakah yang harus dilakukan. Kemudian setelah Anda membaca output yang dikeluarkan, silahkan lanjut dengan mengeksekusi perintah python manage.py migrate untuk membuat tabel dan perubahan apapun terhadap database:
python manage.py makemigrations

python manage.py migrate
  1. setelah membuat model selanjutnya membuat serializers , ini adalah bagian penting pembuatan endpoint API. Serializer berfungsi untuk mengatur data-data apa saja yang akan kita keluarkan melalui endpoint API, conntohnya di model Karyawan kita punya field nama, alamat, jenis_kelamin dst. nah Kita bisa membuat output API ini mengeluarkan field sesuai dengan ke inginan kita atau isi fields = (‘__all__’) untuk menampilkan samua field. Buat file dengan nama serializers.py kemudian salin kode dibawan ini ke dalam file tersebut.
from app_name.models import Karyawan, Jabatan, Divisi
from rest_framework import serializers

class KaryawanSerializer(serializers.ModelSerializer):
    class Meta:
        model = Karyawan
        fields = ['nama', 'alamat', 'jenis_kelamin', 'jenis_karyawan', 'no_telepon', 'email', 'no_rekening', 'pemilik_rekening', 'divisi', 'jabatan']
  1. Selanjutnya yaitu membuat View untuk menampilkan hasil dari serializers, pada direktori app file views.py.
from rest_framework import viewsets
from api.serializers import KaryawanSerializer
from app_name.models import Karyawan, Jabatan, Divisi
from rest_framework.response import Response

class KaryawanViewSet(viewsets.ModelViewSet):
    """
    API endpoint that allows groups to be viewed or edited.
    """
    queryset =  Karyawan.objects.all()
    serializer_class = KaryawanSerializer
  1. Membuat urls endpoint API yang telah dibuat di project_name/urls.py.
from django.contrib import admin
from django.urls import path, include
from rest_framework import routers
from api import views

router = routers.DefaultRouter()
router.register(r'karyawan', views.KaryawanViewSet)

urlpatterns = [
    path('api/', include(router.urls)),
    path('admin/', admin.site.urls),
]
  1. Setelah selesai maka kita bisa langsung menjalankan url tersebut tpi sebelumnya kita akan membuat super user terlebih dahulu untuk masuk ke halaman admin, isi sesuai yang diinginkan
python manage.py createsuperuser
  1. Selanjutnya kita bisa mencoba run dengan cara:
python manage.py runserver

Masuk ke url yang ada pada output di terminal, kemudian untuk masuk ke halaman admin tambahkan /admin pada url.

Klik add pada Karyawan kemudia masukkan data yang sesuai untuk insert ke tabel karywan.

Selanjutnya kita akan akses API yang sudah dibuat sebelumnya dengan cara, pada url tambahkan /api/karyawan (sesuai dengan yang didaftarkan pada url.py). contoh: http://127.0.0.1:8000/api/karyawan/

Api tersebut untuk metod GET semua data pada tabel karywan. Untuk mencoba method POST masukkan data seperti pada gambar (inputan data tidak harus sama) kemudian klik POST.

Jika method POST berhasil maka outputnya seperti pada gambar.

Selanjutnya kita coba untuk method PUT dan DELETE. Pada url sebelumnya tambahkan /id_karywan. Contoh : http://127.0.0.1:8000/api/karyawan/2/

Api tersebut untuk GET data pada tabel karywan dengan id = 2, klik DELETE untuk menjalankan method DELETE atau isi form form dan klik PUT untuk melakukan perubahan data karywan dengan id = 2.

Method PUT berhasil.
Method DELETE berhasil.

Untuk memastikan data berhasil dikelola menggunakan REST API yang dibuat kamu bisa melihat perubahan pada halaman admin.

Ada banyak cara untuk mendefinisikan serializers, melakukan setting auth and permission , dan masih banyak teknik lebih lanjut silahkan lihat dokumentasi pada https://www.django-rest-framework.org/

Semoga tutorial ini mudah dimengerti dan bermanfaat yah guys 🙂 .