Membuat CRUD Django REST API

​Assalamualaikum Warahmatullahi Wabarakatuh, Pada kesempatan kali ini saya akan membahas tutorial lanjutan masih seputar cara membuat crud namun disini kita akan membuat restful API menggunakan DjangoRestFramework tetap menggunakan Database MySql. Karena ini adalah pengembangan tutorial sebelumnya, maka baiknya pembaca bisa menyimak tutorial yang dulu, tujuannya agar mudah paham step by step. Oke langsung saja ke tutorialnya, simak baik-baik.

Yang diperlukan:

  • MySql atau bisa juga MariaDB
  • Django v3.x
  • Project sebelumnya, Bisa di unduh disini.

On Action!

Install beberapa tambahan library seperti corsheaders, djangorestframework.
Karena restfull API kita menggunakan djangorestframework, maka install terlebih dahulu

pip install djangorestframework

Lalu kita  perlu mengizinkan request untuk aplikasi Django kita dari asal lain.
Dalam contoh ini, kita akan mengonfigurasi CORS untuk menerima request dari localhost:8080.

Pertama, instal library django-cors-header:

pip install django-cors-headers

Setelah keduanya sudah terinstall lalu kita ubah settings.py, tambahkan konfigurasi dibawah ini untuk INSTALLED_APPS:

INSTALLED_APPS = [
    ...
    # CORS
    'corsheaders',
    'rest_framework',
]

Kita juga perlu menambahkan middleware class untuk listen request:
Tambahkan diatas CommonMiddleware ya!, atau mungkin diatas sendiri juga gapapa

MIDDLEWARE = [
    ..
    # CORS
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    ...
]

Selanjutnya, atur CORS_ORIGIN_ALLOW_ALL dan tambahkan host ke CORS_ORIGIN_WHITELIST:

CORS_ORIGIN_ALLOW_ALL = False
CORS_ORIGIN_WHITELIST = (
    'http://localhost:8000',
)

Noted!
CORS_ORIGIN_ALLOW_ALL: Jika True, semua origin akan diterima (tidak menggunakan whitelist yang di bawah).
CORS_ORIGIN_WHITELIST: Daftar origin yang memiliki kewenangan untuk membuat permintaan HTTP lintas situs (cross-site).
Jadi saran saya, mending isikan url pada CORS_ORIGIN_WHITELIST untuk keamanan dalam konsumsi API

Membuat file Serializers

Buat file serializers.py didalam folder mahasiswa , kita buat kelas MahasiswaSerializer yang akan mengatur serialisasi dan deserialisasi dari JSON.

Ini inherit / turuanan dari superclass rest_framework.serializers.ModelSerializer yang secara otomatis mengisi satu set bidang dan validator default. Berikut adalah kode serializers.py,

from rest_framework import serializers
from .models import Data_mahasiswa

class MahasiswaSerializer(serializers.ModelSerializer):
    class Meta:
        model = Data_mahasiswa
        fields = '__all__'

Di Meta Class, kita mendeklarasikan 2 atribut:

model: model untuk Serializer
bidang: tuple of field names yang akan disertakan dalam serialisasi

Membuat FIle Views

buat file api_views.py didalam folder mahasiswa. Tambahkan kode berikut:

from rest_framework import viewsets
from .models import Data_mahasiswa
from .serializers import MahasiswaSerializer

class DataMhsViewset(viewsets.ModelViewSet):
    queryset = Data_mahasiswa.objects.all()
    serializer_class = MahasiswaSerializer

Disini kita menggunakan class viewsets, lalu turunan dari superclass rest_framework.viewsets.ModelViewSet
Kita inisialisasikan queryset dari model kita yaitu model Data_mahasiswa, kita ambil semua data
lalu insialisasikan serializer_class nya dengan serializer yang kita buat tadi yaitu MahasiswaSerializer
Kenapa saya menggunakan ModelViewSet ? dan kapan kita akan menggunakan ModelViewSet tersebut? akan saya bahas di kesimpulan

Membuat URL endpoint

Ubah pada file crudtutorial/urls.py tambahkan kode dibawah ini:

from rest_framework import routers
from mahasiswa import api_views as myapp_views

router = routers.DefaultRouter()
router.register(r'dtmhs', myapp_views.DataMhsViewset)

Tambahkan kode diatas tepat dibawah import views dari app mahasiswa.
Penjelasan:
Disini kita import routers dari rest_framework untuk menset router kita
Lalu kita juga import views kita yang didapatkan dari file api_views
Selanjutnya kita register endpoint url kita yaitu dtmhs.

Jangan lupa tambahkan di urlpatterns.

urlpatterns = [
    ...
    path('api/v1/', include(router.urls)),

]

Dengan begitu url bisa diakses seperti ini http://127.0.0.1:8000/api/v1/dtmhs/

Hasil akhir

OKe kita sudah selesai semua jalankan server di url

http://127.0.0.1:8000/api/v1/dtmhs/

Maka akan tampak seperti berikut

Dari hasil gambar diatas data kita masih kosong, untuk insert data bisa isi pada form dibawah pada html form, lalu klik post

Maka jika berhasil menambahkan data akan tampil datanya.
Untuk melihat detail data bisa tambahkan pada address bar yaitu npmnya, jadi hasilnya adalah
http://127.0.0.1:8000/api/v1/dtmhs/17081010092/
Maka hasilnya seperti berikut

Untuk menghapus data silahkan klik tombol delete pada halaman tersebut

Kesimpulan

Jadi url endpoint akan jadi seperti ini

GET /api/v1/dtmhs/ 
POST /api/v1/dtmhs/ 
GET /api/v1/dtmhs/<id:npm>
PUT /api/v1/dtmhs/<id:npm>
PATCH /api/v1/dtmhs/<id:npm>
DELETE /api/v1/dtmhs/<id:npm>

Mudah bukan cara Membuat CRUD Django REST API menggunakan ModelViewSet.

Ohya, di postingan atas saya bertanya, Kenapa saya menggunakan ModelViewSet ? dan kapan kita akan menggunakan ModelViewSet tersebut?
Oke saya jawab, saya menggunakan ModelViewSet karena ModelViewSet itu lebih cocok untuk operasi CRUD(Create, Read, Update dan Delete) biasa seperti halnya pada tutorial ini,
di djangorestframework itu selain ModelViewSet ada juga yang namanya APIView subclasses, generics.* subclasses.
nah enakan mana sih penggunaanya ?
Oke ini saya buat rulenya

Gunakan viewsets.ModelViewSet ketika kalian akan mengizinkan semua atau sebagian besar operasi CRUD pada model.
Gunakan generics.* Ketika kalian hanya ingin mengizinkan beberapa operasi pada model.
Gunakan APIView saat kalian ingin mencustomisasi sepenuhnya action tersebut.

Bagaimana paham sampai sini?
Maka dari itu kita pahami dulu alur dari program kita, baru kita tau mau pake apa.

Oke cukup sekian,
Kita telah mengetahui cara Membuat CRUD Django REST API. Jika kalian ingin mempelajari pelajari ini Django dan sampai jumpa di konten Django berikutnya

Wassalamualaikum Warahmatullahi Wabarakatuh.

File project bisa dilihat disini

​

Apabila artikel ini membantu kamu, dan jika kamu memiliki sedikit rezeki, mohon dukungannya dalam bentuk segelas kopi melalui URL dibawah ini:

Last Updated: Minggu, 15 Agustus 2021 11:40 GMT+7

Comments