Skip to main content

6. Flask RESTful API.html

Flask RESTful API

API singkatan dari Application Programming Interface. API adalah kumpulan aturan dan protokol yang memungkinkan berbagai aplikasi berkomunikasi dan berinteraksi satu sama lain. Dalam konteks pengembangan perangkat lunak, API berfungsi sebagai jembatan antara dua atau lebih aplikasi yang memungkinkan mereka saling berkomunikasi dan bertukar data.

Bayangkan API seperti sebuah restoran yang memiliki daftar menu. Ketika Anda pergi ke restoran, Anda tidak perlu masuk ke dapur dan memasak makanan sendiri. Sebaliknya, Anda memberikan pesanan Anda kepada pelayan, dan pelayan akan memberikan pesanan Anda kepada koki. Koki akan memasak makanan sesuai dengan pesanan Anda dan memberikannya kembali kepada pelayan. Akhirnya, pelayan akan memberikan makanan yang sudah jadi kepada Anda.

Dalam analogi ini, API adalah pelayan restoran yang berfungsi sebagai perantara antara Anda (aplikasi Anda) dan koki (sumber daya eksternal). API memberikan daftar menu (metode dan endpoint) yang dapat Anda gunakan untuk mengakses dan berinteraksi dengan sumber daya eksternal.

Misalnya, Anda memiliki aplikasi cuaca yang ingin menampilkan kondisi cuaca saat ini. Namun, Anda tidak ingin membangun seluruh sistem cuaca dari awal. Alih-alih, Anda menggunakan API cuaca yang disediakan oleh penyedia layanan cuaca. API cuaca ini menyediakan endpoint seperti /weather/current yang memungkinkan Anda mengambil data cuaca saat ini.

Dalam hal ini, Anda sebagai pengembang aplikasi menggunakan API cuaca untuk mengirim permintaan ke endpoint /weather/current melalui HTTP GET. API cuaca mengambil permintaan Anda dan menghubungkan ke sistem cuaca mereka. Sistem cuaca mengambil data cuaca saat ini dan mengirimkannya kembali melalui API cuaca. Akhirnya, API cuaca meneruskan respons tersebut kepada aplikasi Anda.

API memungkinkan Anda mengakses fungsionalitas atau layanan yang telah ada tanpa perlu membangun semuanya dari awal. Sebagai pengembang, Anda dapat menggunakan API untuk mengintegrasikan layanan dari pihak ketiga, seperti cuaca, pembayaran, peta, atau media sosial, ke dalam aplikasi Anda dengan mudah.

Dengan API, Anda dapat berinteraksi dengan sumber daya eksternal, mengambil data, mengirim permintaan, atau bahkan mengirimkan data untuk diproses oleh sistem lain. API membuat komunikasi antara aplikasi menjadi lebih mudah dan efisien, mirip dengan cara Anda memesan makanan melalui pelayan di restoran.

Flask API

Flask-RESTful API adalah ekstensi dari framework Flask yang dirancang khusus untuk memudahkan pembangunan API RESTful menggunakan Flask. Flask-RESTful menyediakan sejumlah alat dan fitur yang memungkinkan pengembang untuk dengan cepat dan mudah membangun API yang efisien dan konsisten.

Dalam Flask-RESTful, Anda dapat menggunakan pendekatan objek-ke-sumber daya untuk mendefinisikan API Anda. Anda membuat kelas yang mewarisi kelas Resource dari Flask-RESTful untuk setiap sumber daya yang ingin Anda sediakan. Setiap metode dalam kelas tersebut mengatur cara menangani permintaan HTTP yang terkait dengan sumber daya tersebut.

Misalnya, jika Anda ingin membuat sumber daya "users", Anda dapat membuat kelas UsersResource yang mewarisi Resource dan menentukan metode GET, POST, PUT, dan DELETE untuk mengatur perilaku API terkait pengguna. Contohnya seperti ini:

from flask import Flask
from flask_restful import Api, Resource
app = Flask(__name__)
api = Api(app)
class UsersResource(Resource):
def get(self):
# Logika untuk mengambil daftar pengguna
def post(self):
# Logika untuk menambahkan pengguna baru
def put(self):
# Logika untuk memperbarui pengguna
def delete(self):
# Logika untuk menghapus pengguna
api.add_resource(UsersResource,
'/users')
if __name__ == '__main__':
app.run()

Dalam contoh di atas, kita menginisialisasi aplikasi Flask dan objek Api dari Flask-RESTful. Kemudian, kita membuat kelas UsersResource yang mewarisi Resource dan mendefinisikan metode GET, POST, PUT, dan DELETE untuk mengatur perilaku API terkait pengguna.

Setelah itu, kita menambahkan UsersResource ke API dengan menggunakan metode add_resource . Ini menghubungkan URL /users dengan UsersResource , sehingga API akan menangani permintaan yang dikirim ke URL tersebut.

Ketika aplikasi dijalankan ( app.run() ), Flask akan memulai server dan API Flask-RESTful akan menjadi aktif. Anda dapat mengirimkan permintaan HTTP ke endpoint yang telah ditentukan, seperti GET /users atau POST /users , dan Flask-RESTful akan memanggil metode yang sesuai dalam kelas UsersResource untuk menangani permintaan tersebut.

Flask-RESTful juga menyediakan fitur tambahan seperti pengelolaan marshaling data, validasi input, pengelolaan error, autentikasi, paginasi, dan banyak lagi. Dengan menggunakan Flask-RESTful, Anda dapat dengan mudah mengembangkan API yang kuat dan dapat diandalkan dengan sedikit usaha.

Implementasi

Nah Stupens setelah sedikit belajar tentang apa itu API dan Flask_restful mari kita coba implementasikan kedalam contoh program sederhana CRUD API. Berikut adalah langkah-langkah umum dalam pembuatan

Flask RESTful API:

1. Instalasi

Pastikan Anda telah menginstal Flask dan Flask-RESTful virtual environment Python Anda. Anda dapat menggunakan pip untuk menginstalnya dengan perintah.

pip install flask flask-restful

2. Import Modul

Buat file python baru dalam direktori kerja kamu lalu beri nama app.py setelah itu import modul yang akan digunakan yaitu Flask dan Flask-RESTful dengan menambahkan kode berikut di awal file:

# import library
from flask import Flask, jsonify, make_response, request
from flask_restful import Api, Resource
from flask_sqlalchemy import SQLAlchemy

3. Konfigurasi APP dan Database

# flask app
app = Flask(__name__)
# api app
api = Api(app)
# database config
app.config[
'SQLALCHEMY_DATABASE_URI'] = 'mysql://root:@localhost:3306/mahasiswa'
app.config[
'SQLALCHEMY_TRACK_MODIFICATIONS'] = False
# init db
db = SQLAlchemy(app)

1.    app = Flask(__name__) :
Baris ini membuat instance aplikasi Flask yang disimpan dalam variabel
app . __name__ adalah parameter yang mengidentifikasi nama modul saat ini. Ini memberi tahu Flask di mana letak modul dan file-file terkait lainnya.

2.    api = Api(app) :
Baris ini menginisialisasi objek
Api dari Flask-RESTful menggunakan instance aplikasi Flask (app). Ini menghubungkan objek Api dengan aplikasi Flask yang telah dibuat sebelumnya, sehingga Flask-RESTful dapat berfungsi dalam konteks aplikasi tersebut.

3.     Konfigurasi database:

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:@localhost:3306/mahasiswa' :

Baris ini mengkonfigurasi URI atau URL koneksi ke database MySQL dengan menggunakan alamat localhost , port 3306 , dan nama database mahasiswa . Ini berarti aplikasi akan terhubung ke database MySQL dengan pengguna root dan tidak ada kata sandi.

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False :

Baris ini menonaktifkan fitur pelacakan perubahan dalam SQLAlchemy. Ini adalah konfigurasi opsional dan dapat digunakan untuk menghilangkan pesan peringatan yang muncul.

4.    db = SQLAlchemy(app) :
Baris ini membuat instance SQLAlchemy yang terhubung dengan aplikasi Flask yang telah dibuat sebelumnya (
app ). SQLAlchemy adalah toolkit Python yang populer untuk bekerja dengan database relasional. Dengan membuat instance db dari SQLAlchemy dan memberikan app sebagai parameter, kita dapat menggunakan SQLAlchemy untuk berinteraksi dengan database menggunakan ORM (Object-Relational Mapping).

4. Membuat Model

# model
class Mahasiswa(db.Model):
id = db.Column(db.Integer, primary_key=
True)
nama = db.Column(db.String(
50))
nim = db.Column(db.String(
50))
jurusan = db.Column(db.String(
50))
def __init__(self, nama, nim, jurusan):
self.nama = nama
self.nim = nim
self.jurusan = jurusan
def __repr__(self):
return '<Mahasiswa %r>' % self.nama
# create table
db.create_all()

Kode di atas adalah definisi model Mahasiswa dan pembuatan tabel terkait menggunakan SQLAlchemy dalam Flask. Mari kita bahas baris kode tersebut:

1.    class Mahasiswa(db.Model) : Baris ini mendefinisikan kelas Mahasiswa sebagai model yang mewarisi db.Model dari SQLAlchemy. Dengan mewarisi db.Model , kelas Mahasiswa menjadi objek yang dapat dihubungkan dengan tabel di database menggunakan SQLAlchemy.

2.    id = db.Column(db.Integer, primary_key=True) : Baris ini mendefinisikan kolom id sebagai kolom integer yang berfungsi sebagai kunci utama (primary key) dalam tabel Mahasiswa . Dengan menandai primary_key=True , kita menunjukkan bahwa kolom ini adalah kunci utama untuk mengidentifikasi setiap entitas Mahasiswa secara unik.

3.    nama = db.Column(db.String(50)) , nim = db.Column(db.String(50)) , jurusan = db.Column(db.String(50)) : Baris-baris ini mendefinisikan kolom-kolom lain dalam tabel Mahasiswa dengan tipe data String dan panjang maksimum 50 karakter. Setiap kolom ini akan menyimpan informasi nama, nim, dan jurusan mahasiswa.

4.    def __init__(self, nama, nim, jurusan) : Ini adalah metode inisialisasi (constructor) untuk kelas Mahasiswa . Metode ini digunakan untuk membuat instance objek Mahasiswa dengan memberikan nilai awal ke atribut nama , nim , dan jurusan .

5.    def __repr__(self) : Ini adalah metode representasi string yang mendefinisikan representasi cetakan objek Mahasiswa ketika direpresentasikan dalam string. Dalam hal ini, objek Mahasiswa akan diwakili sebagai string yang mencakup nama mahasiswa.

6.    db.create_all() : Baris ini membuat tabel dalam database berdasarkan definisi model yang telah kita buat. Metode create_all() akan membuat tabel Mahasiswa dalam database yang telah dikonfigurasi sebelumnya.

5. Membuat Resource

Buat kelas baru yang mewarisi kelas Resource dari Flask-RESTful untuk setiap sumber daya yang ingin Anda sediakan. Misalnya, jika Anda ingin menyediakan sumber daya "mahasiswa", Anda dapat membuat kelas MahasiswaResource :

# resource
class MahasiswaResource(Resource):
def get(self):
mahasiswa = Mahasiswa.query.all()
return jsonify([{'id': m.id, 'nama': m.nama, 'nim': m.nim, 'jurusan': m.jurusan} for m in mahasiswa])
def post(self):
nama = request.form[
'nama']
nim = request.form[
'nim']
jurusan = request.form[
'jurusan']
mahasiswa = Mahasiswa(nama, nim, jurusan)
db.session.add(mahasiswa)
db.session.commit()
return make_response(jsonify({'status': 'Data berhasil ditambahkan'}), 201)
def put(self,id):
mahasiswa = Mahasiswa.query.filter_by(id=id).first()
nama = request.form[
'nama']
nim = request.form[
'nim']
jurusan = request.form[
'jurusan']
mahasiswa.nama = nama
mahasiswa.nim = nim
mahasiswa.jurusan = jurusan
db.session.commit()
return make_response(jsonify({'status': 'Data berhasil diupdate'}), 201)
def delete(self,id):
mahasiswa = Mahasiswa.query.filter_by(id=id).first()
db.session.delete(mahasiswa)
db.session.commit()
return make_response(jsonify({'status': 'Data berhasil dihapus'}), 201)
# add resource to api
api.add_resource(MahasiswaResource,
'/mahasiswa', '/mahasiswa/<int:id>')

1.    MahasiswaResource adalah kelas yang berfungsi sebagai sumber daya (resource) untuk entitas "Mahasiswa" dalam Flask RESTful API.

2.    Metode get(self) digunakan untuk mengambil semua data mahasiswa dari database dan mengembalikannya dalam format JSON.

3.    Metode post(self) digunakan untuk menambahkan data mahasiswa baru ke database berdasarkan informasi yang diterima melalui formulir permintaan.

4.    Metode put(self, id) digunakan untuk memperbarui data mahasiswa dalam database berdasarkan ID yang diberikan.

5.    Metode delete(self, id) digunakan untuk menghapus data mahasiswa dari database berdasarkan ID yang diberikan.

6.    api.add_resource(MahasiswaResource, '/mahasiswa', '/mahasiswa/<int:id>') menambahkan kelas MahasiswaResource sebagai sumber daya ke objek API Flask-RESTful.

a.    Rute /mahasiswa digunakan untuk mengakses endpoint yang mengambil semua data mahasiswa dan menambahkan data baru.

b.    Rute /mahasiswa/<int:id> digunakan untuk mengakses endpoint yang memperbarui dan menghapus data mahasiswa berdasarkan ID.


6. Jalankan Aplikasi

jalankan aplikasi Flask dengan menambahkan kode berikut di akhir file:

# run app
if __name__ == '__main__':
app.run(debug=
True)

Sekarang kalian dapat menjalankan file Python tersebut, dan Flask RESTful API akan tersedia di URL yang ditentukan. Misalnya, jika kalian menjalankan aplikasi pada server lokal, API akan dapat diakses melalui http://localhost:5000/users . kalian dapat menggunakan perangkat lunak pengujian API seperti Postman untuk menguji dan berinteraksi dengan endpoint yang telah Anda definisikan.

Nah stupens kita sudah berhasil membuat RESTful API menggunakan flask sekarang mari kita uji aplikasi yang kita buat menggunakan postman untuk mengirim request


 

Hore Stupenss! kamu telah belajar flask RESTful API dengan menggunakan flask_restful, semoga materi yang disampaikan dapat dipahami ya, jika ada kesulitan silahkan bertanya ya,

jangan lupa untuk mengerjakan quiz dan di bawah juga ada referensi yang dapat kamu gunakan untuk mendalami materi! Semangat belajar Stupenss.

 

 

 

 

 

Quiz

1. Flask-RESTful adalah ekstensi dari framework Flask yang digunakan untuk membangun _______.

2. Manfaat menggunakan Flask-RESTful dalam pengembangan API antara lain adanya fitur _______ yang mempermudah pengelolaan sumber daya.

3. Metode HTTP GET dalam Flask-RESTful digunakan untuk _______ data dari server.

4. Untuk mengambil parameter dari URL dalam Flask-RESTful, kita menggunakan tanda _______ dalam definisi rute.

5. Flask-RESTful menyediakan fungsi _______ yang memungkinkan validasi data masukan sebelum diproses.

 

 

 

Referensi

https://realpython.com/flask-connexion-rest-api/

https://www.analyticsvidhya.com/blog/2022/01/rest-api-with-python-and-flask/ https://www.geeksforgeeks.org/python-build-a-rest-api-using-flask/ https://flask-restful.readthedocs.io/en/latest/

https://pythonbasics.org/flask-rest-api/

https://auth0.com/blog/developing-restful-apis-with-python-and-flask/

Flask RESTful API 8

Last modified: Monday, 7 August 2023, 10:11 AM