Tantangan Merancang REST API Menggunakan Django REST Framework (DRF)

Muhammad Syukur Abadi
5 min readAug 20, 2021
Photo by Tim Gouw on Unsplash

Pada kesempatan ini, saya akan menceritakan kendala apa saja yang saya hadapi ketika membangun aplikasi https://batamlawancoronaapi.herokuapp.com/ dan bagaimana saya menyelesaikan kendala tersebut. Saya tidak akan menulis banyak bagaimana aplikasi ini dirancang, sebab tutorial untuk membangun aplikasi ini saya tulis di sini.

Pre Deployment

Pada proses pre deployment atau proses ngoding, saya kebingungan mengimplementasikan authentication dan authorization di aplikasi dalam hal view. Saya kebingunan menentukan bagaimana view untuk admin dan untuk user. Alasan saya memisahkan view antara admin dengan user karena pada aplikasi ini, yang saya inginkan adalah user hanya bisa melihat/GET, sedangkan hanya admin saja yang bisa mengisi data/POST, mengubah data/PUT, atau menghapus data/DELETE.

Setelah saya coba membaca dokumentasi tentang view, ternyata dengan menggunakan generic view, saya bisa menyuguhkan view tanpa memusingkan apakah pengakses terotentikasi (authenticated) dan memiliki hak akses terhadap data yang ada di dalam database (authorized). Contoh dari penggunaan generic view seperti gambar di bawah, di mana generic view ini akan mengambil semua data pada database (rujukan).

ListAPIView untuk menampilkan semua data dari database

Kendati saya memisah view untuk user dan admin, saya tetap menggunakan fitur authentication dari DRF untuk menjaga keamanan data.

Deployment

Ini adalah tahap yang paling menguras tenaga dan emosi — aplikasi sudah jadi, tapi apa gunanya jika tidak di-deploy?.

Saya mencari tutorial bagaimana men-deploy aplikasi Django dan platform apa saja yang bisa dijadikan tempat untuk men-deploy. Setelah selesai mencari referensi, pilihan saya jatuh ke Heroku, sebab saya punya project yang sudah di-deploy di sana.

Heroku punya dokumentasi yang cukup lengkap tentang bagaimana men-deploy aplikasi, sebagai contoh, berikut ini adalah link tata cara men-deploy aplikasi Django dan link untuk bekerja dengan file Python. Pada dasarnya, Heroku butuh dua file jika ingin men-deploy aplikasi Python : Procfile dan requirements.txt. Kedua file ini disimpan dalam root folder seperti yang ditampilkan pada gambar di bawah.

Procfile dan requirements.txt berada di root folder

Jika teman-teman membuat Procfile dan requirements.txt seperti gambar di bawah, maka akan terjadi error ketika aplikasi sudah di-deploy.

Letak Procfile dan requirements.txt yang salah

Intinya adalah : Procfile dan requirements.txt harus diletakkan di root folder atau di mana folder aplikasi Django berada!

Post Deployment

Pesan ‘Build Success’ bukan jaminan aplikasi bisa berjalan sesuai yang kita mau

Saya sangat senang ketika mendapat pesan ‘Build Success’. Namun, kesenangan itu langsung lenyap ketika saya membuka aplikasi dan mendapat pesan Server Error(500). Setelah saya cari tahu, setidaknya ada beberapa penyebab error tersebut berdasarkan link ini.

  • Masalah pada file settings.py
    File settings.py adalah file yang berisi setting aplikasi Django. File ini terletak di dalam folder aplikasi Django bersama dengan file WSGI seperti pada gambar di bawah (pada tulisan ini, folder aplikasi Django yang dimaksud adalah folder batamlawancorona_api).

Hal yang diperhatikan pada file tersebut ketika melakukan deployment adalah SECRET_KEY, static folder, DEBUG, dan ALLOWED_HOST.

  1. SECRET_KEY : Variabel ini menyimpan kode unik untuk sebuah aplikasi Django. Variabel ini harus disembunyikan atau diamankan. Cara saya mengamankan variabel ini merujuk pada artikel berikut.
  2. Static folder : Folder ini menyimpan static file atau aset seperti gambar. Ketika saya men-deploy aplikasi ini untuk pertama kali, saya mendapat pesan error karena tidak ada static folder dan static file pada repositori yang saya deploy. Saya tidak menggunakan static folder, sebab untuk view pada aplikasi ini, saya menggunakan generic view bawaan DRF. Solusi yang saya gunakan adalah dengan menggunakan package django-heroku pada artikel berikut.
  3. DEBUG dan ALLOWED_HOST : Debug adalah variabel yang menampung nilai boolean. Variabel ini berfungsi untuk menampilkan exception ketika terjadi kesalahan pada aplikasi. Ketika aplikasi di-deploy, nilai variabel ini haruslah False.
    Allowed host berisi domain yang di-handle oleh Django. Ketika men-setting nilai variabel Debug dengan False, variabel allowed host harus diisi. Saya mengisi variabel ini dengan ‘batamlawancoronaapi.herokuapp.com’, di mana nilai tersebut bisa digunakan setelah aplikasi berhasil di-deploy. Kode di bawah ini adalah kode yang saya gunakan ketika deploy aplikasi.
  • Migrasi setelah aplikasi berhasil di-deploy
    Ketika saya melihat logging, di dashboard project, saya tidak menemukan adanya permasalahan pada database yang mengharuskan saya untuk melakukan migrasi. Jawaban dari masalah ini saya temukan di https://stackoverflow.com/questions/54890791/django-deploy-to-heroku-server-error500 , yaitu ketika saya mencoba melakukan migrasi (migrate) setelah aplikasi berhasil di-deploy. Solusi lain saya temukan di github yang linknya bisa teman-teman akses di sini.

Aftermath

Dorongan utama saya membuat aplikasi ini karena saya tidak cukup pandai mengatur tampilan website dan banyaknya kakas (tools) yang digunakan untuk front end engineering yang mengharuskan saya belajar bahasa pemrograman baru. Dorongan lain datang dari developer tanah air yang bahu-membahu membuat sistem informasi seperti KawalCovid dan WargaBantuWarga. Dengan ilmu yang saya miliki saat ini, setidaknya saya bisa membuat aplikasi ini sebagai bentuk pengabdian untuk tanah di mana saya dibesarkan.

Di samping itu, ngoding backend membuka kesempatan bagi saya untuk terhubung dengan stack lain, misalnya mobile programming atau cloud computing. Seperti yang dikatakan Imre Nagi, membuat API adalah cara memulai belajar backend programming. Belajar membuat API benar-benar menambah pengetahuan dan pengalaman belajar ngoding saya, terutama bagaimana saya menangani error yang sebelumnya belum pernah saya hadapi.

Tulisan ini dibuat untuk berbagi pengalaman tentang tantangan dan hal-hal yang menghambat saya ketika men-develop aplikasi dan bagaimana saya menyelesaikan tantangan dan permasalahan tersebut.

--

--

Muhammad Syukur Abadi

Ordinary computer science student and a gundam geek. Also hugging psychology, math, and physics stuffs. I can be reached on my instagram @sykrabadi