Membuat Fungsi CRUD Untuk REST API
Halo, ini adalah artikel kedua yang saya tulis mengenai proyek web scraper dan membuat sebuah REST API. Pada bagian kedua ini saya akan menuliskan langkah-langkah untuk membuat beberapa fungsi yang akan digunakan untuk berkomunikasi dengan database dari data yang telah kita scraping pada artikel pertama. Langsung saja kita mulai.
Buatlah dua buah file baru di dalam direktori yang sama tempat kita menyimpan file scraper.py. Beri nama file pertama dengan nama functions.py dan file kedua dengan nama routes.py. Dalam file bernama functions.py kita import flask dan sqlite3 kembali.
from flask import *
import sqlite3
Kemudian kita akan memulai dengan membuat fungsi get untuk meretrieve semua data typers yang tersimpan dalam database kita.
def get():
conn = sqlite3.connect("monkey_daily.sqlite”)
cur = conn.cursor()
query = cur.execute("SELECT * FROM daily_leaderboards;")
data = [{
"id" :data[0],
"name" :data[1],
"wpm" :data[2],
"raw" :data[3],
"time" :data[4],
"date" :data[5]
} for data in query]
return make_response(jsonify(data), 200)
Pada kode di atas kita definisikan sebuah fungsi dengan nama get lalu buat koneksi pada database dan juga lakukan query “SELECT * FROM daily_leaderboards;” untuk menampilkan semua data typers yang ada di dalam database. Kemudian buatlah sebuah format single objek yang akan ditampung dalam sebuah array atau list. List tersebut akan berisi objek berupa dictionary yang terdiri dari key yang telah kita definisikan yaitu id, name, wpm, raw dan date. Sedangkan valuenya adalah value yang didapat dari variable data pada looping query ke database. Pada fungsi ini kita akan return list dictionary tersebut dalam format json dan juga menyertakan kode status 200 sebagai tanda request sukses.
Setelah selesai membuat fungsi get yang pertama, kita lanjutkan dengan membuat fungsi get yang kedua, yaitu get_by_id yang akan menampilkan data typer berdasarkan id yang kita sertakan pada saat melakukan request.
def get_by_id(typer_id):
conn = sqlite3.connect("monkey_daily.sqlite")
cur = conn.cursor()
query = cur.execute(
f'''SELECT * FROM daily_leaderboards WHERE
id = {typer_id};'''
)
data = [{
"id" :data[0],
"name" :data[1],
"wpm" :data[2],
"raw" :data[3],
"time" :data[4],
"date" :data[5]
} for data in query]
return make_response(jsonify(data), 200)
Kode di atas mirip dengan kode pada fungsi get sebelumnya, di mana kita membuat koneksi pada database dan juga membuat list objek dictionary yang akan direturn dalam format json beserta kode statusnya. Yang berbeda adalah kita menggunakan parameter dengan tipe data integer pada saat mendefinisikan fungsinya dan juga pada query kita gunakan WHERE clause untuk retrieve data dari database yang memiliki id yang sama dengan value parameter yang kita assign saat request. Jika request berhasil maka kita akan mendapatkan record dengan typer_id yang sesuai dan kode status 200.
Kedua fungsi untuk melakukan retrive data pada database telah selesai kita buat. Sekarang mari kita lanjutkan dengan membuat fungsi untuk request update data. Fungsi update ini juga seringkali disebut sebagai put, dan padanya juga kita menyertakan id dari typer yang akan kita update datanya. Mari tuliskan kode di bawah ini.
def update(typer_id):
name = request.form.get("name")
wpm = request.form.get("wpm")
conn = sqlite3.connect("monkey_daily.sqlite")
cur = conn.cursor()
query= cur.execute(
'''UPDATE daily_leaderboards SET name=?,
wpm=? WHERE id =?;''', (name, wpm, typer_id)
)
conn.commit()
return make_response(jsonify({"result": True}), 200)
Pada fungsi update yang kita definisikan di atas kita membuat variable name dan wpm yang akan menerima value dari data yang kita sertakan saat melakukan request update. Pada flask kita gunakan methode request.form.get() untuk mendapatkan data dari request objek tersebut. Kita juga masih menggunakan paramater typer_id untuk melakukan update recordnya. Pada query database kita gunakan UPDATE statement untuk update record yang telah ada sebelumnya dalam database dengan value yang kita dapatkan dari header saat melakukan request update. Jika request berhasil maka kita akan mendapatkan respon berupa tipe data boolean dengan value True dan kode status 200.
Kita lanjutkan pada fungsi delete di mana fungsi ini kita gunakan untuk menghapus record yang berada di dalam database. Ketikan kode di bawah ini pada kode editor.
def delete(typer_id):
conn = sqlite3.connect("monkey_daily.sqlite")
cur = conn.cursor()
query = cur.execute(
f'''DELETE FROM daily_leaderboards WHERE id
= {typer_id};'''
)
conn.commit()
return make_response(jsonify({"result": True}), 201)
Pada fungsi delete di atas kita tetap menggunakan paramter typer_id sebagai constraint record mana yang ingin kita hapus dari database. Setelah melakukan koneksi pada database, maka kita melakukan query menggunakan DELETE statement dikombinasikan dengan WHERE clause untuk hanya menghapus record typer yang diinginkan. Ketika berhasil melakukan request maka kita akan mendapatkan respon True dengan kode status 200.
Selanjutanya fungsi yang terakhir adalah fungsi post untuk menambah record baru pada database. Mari kita ketikan kode di bawah ini pada kode editor.
def post():
name = request.form.get("name")
wpm = request.form.get("wpm")
raw = request.form.get("raw")
time = request.form.get("time")
date = request.form.get("date")
conn = sqlite3.connect("monkey_daily.sqlite")
cur = conn.cursor()
cur.execute(
'’’INSERT INTO daily_leaderboards (name, wpm, raw,
time, date) VALUES (?, ?, ?, ?, ?)’’’, (name, wpm,
raw, time, date)
)
conn.commit()
return make_response(jsonify({"result": True}), 200)
Pada kode di atas kita membuat lebih banyak variable, yaitu name, wpm, raw, time dan date. Semua variable tersebut akan kita gunakan sebagai wadah untuk menyimpan data yang kita dapatkan dari request objek saat request post dibuat. Kemudian lakukan query menggunakan INSERT INTO statement untuk menambah record baru pada database. Jika record baru telah berhasil dipost maka kita akan mendapatkan respon True dengan kode status 200.
Akhirnya kita telah selesai membuat fungsi yang akan digunakan untuk melakukan operasi CRUD pada database. Pada artikel berikutnya kita akan lanjutkan dengan membuat endpoint menggunakan flask, selamat menantikan.