BERITA PROGRAMMING Mengenal API dan REST API serta contoh dalam program Flask

Mengenal API dan REST API serta contoh dalam program Flask

Oleh Galih Bestantya Putratama | Rabu, 10 Maret 2021

Mengenal API dan REST API serta contoh dalam program Flask

Kali ini kita akan mencoba mempelajari tentang apa itu API serta REST API serta contoh penggunaan dalam bahasa pemprograman python dengan Flask.

Yuk, ikuti program inovatif MAGANG ONLINE untuk berbagai bidang seperti animasi, coding, 3D, illustrasi, musik dan bisnis hanya di GAMELAB.ID!

Ciptakan lingkungan belajar yang lebih MENYENANGKAN dengan GAME-BASED LEARNING!

Daftar Isi Artikel

Mari mengenal API lebih dengan penjelasan di artikel ini. Simak baik-baik ya.

Apa itu API?

Menurut Wikipedia API (Application Programming Interface) adalah Antarmuka pemrograman aplikasi adalah penerjemah komunikasi antara klien dengan server untuk menyederhanakan implementasi dan perbaikan software. Bisa diartikan juga sebagai sekumpulan perintah, fungsi, serta protokol yang dapat digunakan oleh programmer saat membangun perangkat lunak untuk sistem operasi tertentu. [https://id.wikipedia.org/wiki/Antarmuka_pemrograman_aplikasi]

Gambar API (Niagahoster)

 

Apa itu REST?

REST (REpresentational State Transfer) merupakan gaya arsitektural perangkat lunak yang di dalamnya mendefinisikan aturan-aturan untuk membuat web service [https://en.wikipedia.org/wiki/Representational_state_transfer]

REST ini berbentuk JSON object data. Yang dapat mempermudah client untuk melakukan parsing data dan tergolong lebih ringan.

HTTP Method

Hypertext Transfer Protocol adalah sebuah jalan atau cara komunikasi dapat terjalin antara client dengan server.

Dalam HTTP Method REST yang sering digunakan atara lain:

  • GET : Biasanya fungsi ini digunakan untuk perintah menampilkan data.
  • POST: Fungsi ini biasanya digunakan untuk perintah dalam menambahkan data.
  • PUT: Fungsi ini biasanya digunakan untuk perintah edit data
  • DELETE: Fungsi ini biasanya digunakan untuk perintah dalam menghapus data.

Selain dari beberapa method diatas masih ada juga method lainnya (PATCH, OPTIONS, dll). selengkapnya Anda bisa lihat [https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods]. 

 

Kita akan coba sederhanakan bahasanya tentang REST API , jadi API disini berperan sebagai perantara untuk ngobrol dengan server, jadi untuk akses data di sebuah server dilakukan tidak secara direct melainkan melalui API ini, sedangkan REST ini sebagai aturan-aturan  / perintah apa saja yang diberbolehkan untuk dilakukan oleh client melalui protokol http.

Kita akan jelaskan juga dengan perumpamaan, API bisa diibaratkan seorang waiters pada sebuah cafe, REST adalah sebuah menu-menu di kafe tersebut. Jadi client (customer) request kepada wiaters (HTTP Method) berdasarkan menu yang sudah ditentukan tersebut, waiters melihat sesuai dengan menukah atau tidak permintaan tersebut yang mana setelah itu akan diteruskan untuk melakukan proses order didapur (Request) yang kemudian akan dikembalikan ke customer lagi (sebagai response).

 

Contoh Program

Sebelum kita akan mencoba membuat service API ini, kita pastikan software pendukung telah terinstall pada perangkat komputer anda. Software yang kita akan gunakan pada tutorial kali ini adalah :

Editor                    : Visual Studio Code.

Software             : Python, Postman, Mysql.

OS                          : Windows 10.

Anda dapat menggunakan Editor atau OS lain sesuai dengan yang anda kehendaki. 

Langsung saja kita mulai untuk membuat service API sederhana dengan flask.

Pertama kita akan coba membuat sebuah file dengan nama app.py kemudian ketikan perintah kemudian jalankan perintah di terminal "python app.py" :

Kemudian kita coba cek di postman dan pastikan program sudah berjalan dengan benar.postman_hello 

Bilamana anda mendapatkan error pada bagian ini kemungkinan anda belum mengingstall flask pada module python anda. jalankan perintah dibawah ini.

pip install flask

Pada tahapan pertama ini kita sendang menggunakan method GET untuk menampilkan data dari API, Setelahnya kita akan mencoba dengan mengubah dengan bentuk JSON format. 

Mari kita modifikasi kode kita seperti ini

 

Pada bagian ini kita coba membuat data dummy list dengan nama data. Sehingga setelah dijalan akan seperti ini. 

Pada pengertian return make_response(jsonify({'data': data}), 200) memiliki arti melakukan pengembalian data / response dengan format json dengan status code 200 (yang berarti data sukse / oke). disini kita dapat mengganti dengan status code lainnya seperti 400, 500, 404 dll [lihat detail], ini merupakan sebuah kode yang dapat dipahami oleh sebuah sistem pada http protokol. 

Setelah sukses sampai bagian ini selanjutnya kita akan mencoba ke inti pembicaraan kita kali ini :). 

Routes merupakan sebuah endpoint yang akan kita panggil melalui client service. bilamana kita melihat dikodingan pertama kita menulis seperti ini.

@app.route('/', methods=['GET']) 

Artinya kita memanggil root direktori atau alamat web pada root domain dan hanya mengizinkan method GET, jadi bila mana pada endpoint ini ada method selain GET maka akan di tolak. Contoh lain:

 @app.route('/karyawan', methods=['GET','POST','PUT','DELETE']) 

Artinya endpoint domain/karyawan hanya menerima method GET, POST, PUT dan DELETE, selain itu maka akan ditolak. 

if request.method=='GET'

Pada kodingan diatas menjelaskan jika ada request yang tipe methodnya GET maka tampilkan data. sehingga bilamana kita jalankan program diatas maka akan mendapatkan hasil yang berbeda-beda setiap methodnya. Jika kita memasukkan method selain yang telah didefinisikan pada kodingan diatas, sebagai contoh kami akan mencoba dengan method PATCH, maka akan menghasilkan tampilan seperti ini. Method not allowed.

Setelah kita berhasil sampai sini sekarang kita akan mencoba dengan mengkoneksikannya ke mysql database. 

Pertama-tama buat dahulu database , table dan isi dengan beberapa sample data. Pada contoh kali ini saya membuat database dengan nama karyawan dengan nama table data_karyawan. Lihat gambar dibawah ini

create database

 

create table

 

Tambahkan beberapa data didalamnya, sehingga menjadi seperti tampilan ini.

Setelah kita membuat database selanjutnya kita akan membuat file baru dengan nama database.py sebagai config DBnya dan model.py sebagai class untuk memanggil fungsi-fungsi koneksi ke databse yang kita butuhkan. 

databasepy (1)

database.py

Pada file ini kita menggunakan mysql connector sebagai modul koneksi ke mysql. install terlebih dahulu dengan cara 

pip install mysql-connector-python

Setelah itu anda melanjutkan proses ini. Kita hanya membuat 2 function untuk GET data dan Execute data (UPDATE, DELETE ataupun INSERT)

modelpy

model.py

Kemudian pada file ini kita import konfigurasi database.py tadi kedalam model.py.

Setelah anda selesai membuat ini kembali ke app.py dan lakukan modifikasi seperti berikut ini.

Pertama jangan lupa panggil model yang sudah kita buat tadi.

Setelah itu pada bagian @app.routes karyawan kita modifikasi seperti tampilan dibawah ini. 

 

Disini kami akan menjelaskan point penting mengenai alur program yang kita telah kita buat sebelumnya. 

dt = Data()

merupakan inisialisasi memanggil kelas pada model yang telah kita buat sebelumnya. 

 

if request.method == 'GET':
            id_ = request.args.get("id")
            if id_:
                query = "SELECT * FROM data_karyawan where id = %s "
                values = (id_,)
            else:
                query = "SELECT * FROM data_karyawan"
            data = dt.get_data(query, values)

Kemudian pada syntax ini memiliki arti jika request GET maka jalankan perintah tampilkan semua data karyawan , namun bilamana terdapat param get id  (mis: /karyawan?id=1) maka akan menampilkan data yang hanya id tersebut.

 

elif request.method == 'POST':
            datainput = request.json
            nama = datainput['nama']
            pekerjaan = datainput['pekerjaan']
            usia = datainput['usia']

            query = "INSERT INTO data_karyawan (nama, pekerjaan, usia) values (%s,%s,%s) "
            values = (nama, pekerjaan, usia,)
            dt.insert_data(query, values)  
            data = [{
                'pesan': 'berhasil menambah data' 
            }]

Pada syntax diatas jika method POST maka terima data request yang bentuknya adalah JSON kemudian simpan kedalam database, dan tampilkan sebuah pesan bila berhasil dengan kalimat "berhasil menambah data" dalam bentuk json.

elif request.method == 'PUT':
            query = "UPDATE data_karyawan SET id = %s "
            datainput = request.json
            id_ = datainput['id']
            values += (id_,)

            if 'nama' in datainput:
                nama = datainput['nama']
                values += (nama, )
                query += ", nama = %s"
            if 'pekerjaan' in datainput:    
                pekerjaan = datainput['pekerjaan']
                values += (pekerjaan, )
                query += ", pekerjaan = %s"
            if 'usia' in datainput:        
                usia = datainput['usia']
                values += (usia, )
                query += ", usia = %s"

            query += " where id = %s "
            values += (id_,)
            dt.insert_data(query, values)  
            data = [{
                'pesan': 'berhasil mengubah data' 
            }]

Pada syntax diatas adalah menjelaskan bilamana request merupakan PUT maka terima request dalam bentuk JSON , serta cek bilamana field mana saja yang mengalami perubahan / update.  Jadi sifat body json object untuk "nama", "pekerjaan" dan "usia" adalah opsional, sedangkan untuk "id" adalah mandatory. Setelah berhasil melakukan update maka tampilkan pesan "berhasil mengubah data" dalam bentuk JSON. 

else:
            query = "DELETE FROM data_karyawan where id = %s "
            id_ = request.args.get("id")
            values = (id_,)
            dt.insert_data(query, values)      
            data = [{
                'pesan': 'berhasil menghapus data' 
            }]     

Selain itu maka lakukan eksekusi hapus data dengan mengambil params argumen id sebagai acuan id karyawan yang akan dihapus. Setelah berhasil meghapus data maka tampilkan pesan "berhasil menghapus data" dalam bentuk JSON juga. 

Setelah semua selesai maka jalankan program pada postman.

Pertama kita coba untuk menjalankan POST untuk karyawan.

Kita lihat data GET setelah menambahkan data.

Dari sini dapat terlihat id = 4 dengan nama Andika , pekerjaan HR dengan usia 29 tahun sudah muncul. 

Selanjutnya kita coba untuk mengubah data dengan id 4

Disini kita dapat melihat setelah proses PUT atau update id = 4 telah berubah.

Setelah itu kita akan mencoba menghapus data dengan id = 3

Nah dari kita dapat melihat proses delete juga sudah berhasil. Data karyawan dengan id = 3 sudah tidak ada. 

 

Baca Juga : Perbedaan Web Application dan Website, Emang Beda?

Kesimpulan

Dari sini kita setidaknya dapat mengetahui tentang konsep REST API dengan gambaran contoh seperti diatas bahwa perantara komunikasi server dengan client over http kurang sperti ini. Tentu saja program ini belum sepenuhnya sempurna, sebab dalam kenyataannya anda harus menambahkan authentication seperti JWT atau lainnya, backdoor protection atau vulnerable attack lainnya, SQL Injection dan masih banyak lagi yang harus kalian tambahkan. Namun bila dibilang apakah sudah bisa ngobrol antara client dengan server dengan contoh seperti ini? Jawabannya bisa. Anda tinggal mengupload di server anda baik lokal maupun public. 

Kamu ingin belajar lebih dalam mengenai REST API atau ilmu pemrograman lainnya? Yuk ikuti Kelas Koding di Gamelab! Lihat berbagai kelasnya di sini dan pilih kelas favoritmu ya! 

 

 


Galih Bestantya Putratama

Galih Bestantya Putratama

Rabu, 10 Maret 2021

ARTIKEL TERKAIT

Magang lebih mudah dan bisa dilakukan dari mana saja dengan Program Magang Online Gamelab. Magang Bersertifikat, plus Pelatihan!

DAFTAR MAGANG

ARTIKEL POPULER

KATEGORI