Week 7: REST Framework

Ahmad Elang
println-mic
Published in
5 min readMar 21, 2018

Saya membuat model, serializers dan view untuk endpoint API kelompok kami. Untuk pembuatan endpoint digunakan best practice Django Rest Framework yakni menggunakan serializer. Serializer sangat mempermudah pembuatan method yang sering dipakai seperti create, update, delete, get.

Model & Serializers
Endpoint kurang lebih akan menerima 2 field yakni nama dan path di dropbox. Nama dibuat agar jika user hanya ingin mengganti nama file, tidak perlu menembak ke API Dropbox. Path adalah argumen yang dibutuhkan untuk mengakses file di API Dropbox. Tentunya kedua field ini masih dapat diubah/dikurangi dengan mudah untuk menyesuaikan dengan kebutuhan project atau apabila API Dropbox berubah di masa depan.

Kemudahan untuk mengubah field tanpa harus mengganti kode di views (most of the time) adalah salah satu kelebihan menggunakan model dan serializers

Views

Views saya menggunakan banyak anotasi dari Django Rest Framework.

authentication_classes dan permission_classes adalah anotasi yang digunakan untuk membatasi akses ke endpoint tersebut hanya oleh user dengan tingkat authentikasi tertentu. Contoh penggunaan authentikasi dan permission ketika hanya user dengan role admin yang dapat mengakses suatu endpoint, atau semua user yang sudah login dapat menggunakan fungsionalitas print dan sebagainya.

Terdapat hal menarik yang saya pelajari ketika membuat views untuk endpoint ini. Yakni serializer harus memanggil is_valid sebelum memanggil save() atau mengambil data serializers. Berikut error yang akan terjadi kalau hal itu tidak dilaksanakan

Untuk mengetest views. digunakan beberapa hal baru seperti

APIRequestFactory dan force_authentication. APIRequestFactory digunakan untuk memocking objek request palsu untuk dilempar ke views. force_authentication digunakan untuk memaksa authentikasi ketika test karena di view didefinisikan bahwa hanya user yang sudah login yang dapat mengakses endpoint tersebut.

Ada beberapa hal yang sempat saya riset untuk views namun tidak jadi saya masukkan karena kurang pas dengan definisi dari task upload_file atau memang masih belum diperlukan sekarang. Yakni

download dan delete file di dropbox.

dan membuat permission yang berbeda untuk admin dan user. Namun karena PO bisa saja menginginkan admin dapat mengakses endpoint ini, akhirnya tidak digunakan, berikut kodenya (sebelum saya scrap)

Berikut cara melakukan testnya

Version Control dan Quality Assurance (QA)

Pada minggu ini terdapat hal yang membahagiakan. Yakni semua task di register sudah selesai sehingga merge request dimulai oleh hacker kami Gunawan. Karena saya tidak dapat menemukan kesalahan di story tersebut. Saya memberikan approval terhadap merge requestnya

Untuk keperluan individual review minggu ini. Saya mempelajari beberapa hal yang penting bagi pengembangan diri saya sebagai pengembang perangkat lunak, yakni version control, approach to software development, dalam kasus ini scrum dan Importance of Testing

Agile: Scrum

Berikut ilmu saya mengenai Scrum yang saya pelajari dari mencoba scrum ketika magang di Pusilkom UI dan PPL dan membaca literatur.

Sebelum melihat apa itu Scrum. Akan lebih baik untuk memahami kenapa menggunakan Scrum. Dengan scrum yang memaksa release sering dilakukan, PO menjadi tahu kemana arah project dan dapat memberikan koreksi. Tidak seperti menggunakan waterfall dimana PO hanya bisa melihat project ketika sudah selesai dan sulit melakukan perubahan. Menurut salah seorang supervisor di Pusilkom UI, Scrum juga memberikan kelebihan di lingkungan pengembangan perangkat lunak Indonesia yang terkadang masih belum dapat mengapresiasi Software Analyst dan sering mepet ketika memberikan project sehingga sulit mengumpulkan requirment yang mumpuni untuk menggunakan Waterfall

Scrum sendiri adalah proses agile yang ditujukan agar tim dapat memberikan bisnis value tertinggi ke PO dalam waktu tersingkat. Dengan menggunakan model iterative development, scrum membuat program dapat dicek setiap selesai sprint (umumnya 1 minggu sekali, tapi di PPL di adjust menjadi sekitar 5 minggu)

Beberapa Definisi:
Product Backlog: sebuah Priority List yang berisi semua yang diinginkan dari suatu produk dan akan digunakan untuk mendefinisikan kerja sprint.
Sprint Backlog: List task (hasil breakdown Product Backlog) yang akan dan akan diselesaikan dalam satu sprint.
(PO) Product Owner: Pemilik produk dan pada umumnya pembayar software house yang nantinya akan menjadi gaji programmer (meskipun di PPL tidak ada yang namanya gaji programmer)
Scrum Master: Dilaksanakan oleh asisten dosen di PPL. rolenya adalah mengorganisasi dan mengecek progress tim. (sayangnya) tidak ikut develop
Tim: Semua orang (tidak hanya programmer) yang dibutuhkan untuk membuat product.

Version Control

Berikut ilmu saya mengenai Version Control yang saya pelajari dari mencoba memahami GIT sepanjang hidup saya di Fasilkom.

Kegunaan version control adalah agar hidup developer lebih baik ketika mendevelop program. Version Control berguna untuk kolaborasi, menyimpan versi, kembali ke versi sebelumnya, backup dan memahami apa yang terjadi dalam development program (dengan asumsi git lognya messagenya baik-baik saja tentunya)

Commiting
Commit bukan sekedar melaksanakan ‘git add .’ lalu ‘git commit -m “lol kelar”’. Commit yang baik adalah commit yang terbagi menjadi bagian yang tepat dan dengan message yang baik. Contohnya jika sedang mendebug fitur A, maka ubah fitur A saja, commit, lalu baru memasukkan perubahan untuk fitur B. Dengan commit yang baik, versioning tidak hanya menjadi lebih mudah, memahami program juga lebih mudah bagi developer karena jelas suatu perubahan digunakan untuk apa.

Branching
Main branch pada suatu repo adalah master dan develop (sit_uat di PPL). Master adalah branch untuk production, dan develop adalah main branch untuk development sebelum di masukan production. Pada Scrum salah satu syarat branch develop masuk ke master adalah disetujui oleh PO. Di Scrum ada juga branch user_story, atau terkadang juga pertask sehingga masing-masing task lebih independent. dan Hotfix serta Coldfix. Hotfix adalah untuk perbaikan dari master dan Coldfix adalah perbaikan di branch user_story, seperti ketika ditolak oleh PO.

Merge Request
Pada PPL terdapat 1 lagi yang digunakan, yakni merge request. merge request atau pull request di github, adalah standar ketika seseorang membuat branch, develop disana lalu ingin menggabungkan branch tersebut dengan branch aslinya. Pada umumnya MR dilakukan ketika ingin menambah fitur (atau story) atau mendebug kode ke branch master.

Dengan MR, developer lain dan master dari project tersebut dapat menentukan apakah kode yang ingin di merge request sesuai dengan tujuan produk dan sudah ditulis dengan baik dan memenuhi standar proyek.

Importance of Testing

Berikut ilmu saya mengenai Importance of Testing yang saya dapatkan dari mengambil dan lulus (atau lolos) Mata Kuliah Advanced Programming, menjadi Asdos PPW Semester Ganjil 2017–2018 dan membaca literature.

Testing ada karena semua manusia membuat kesalahan. Namun pada development kesalahan ini dapat berharga mahal. Apalagi apabila kesalahan itu masuk ke production.

  • Membuat produk menjadi lebih reliable dan lebih memuaskan untuk customer karena bebas dari bug
  • Memastikan kualitas dari program. Kualitas yang baik akan membuat program menjadi lebih mudah di maintance
  • Testing membuat bug lebih mudah dideteksi. Sehingga bug tidak terlupa dan baru tersadari di akhir development atau bahkan setelah produksi, dimana menemukan bug tersebut bisa sulit dan memakan waktu

Namun Testing tidak terbatas pada TDD. Terdapat development yang melakukan test setelah kode selesai dibuat. Namun kelebihan melakukan test terlebih dahulu adalah agar bias dan asumsi dari programmer setelah membuat kode tidak mempengaruhi pembuatan test

--

--