Senin, 20 Mei 2024

Membangun rest api menggunakan flask python dan database mysql

Sebelum memulai koding langkah - langkah yang perlu dipersiapkan anda harus menyiapkan database mysql dan menginstal flask terlebih dahulu, diantara caranya sebagai berikut:

  • Langkah pertama buat database baru bernama flask_restapi sebagai contoh saja kalian bisa membuatnya sesuai kebutuhan dan kemudian buatlah tabel baru bernama users

CREATE TABLE users(

   id INTEGER PRIMARY KEY AUTO_INCREMENT,

   username VARCHAR(50) NOT NULL,

   email VARCHAR(150) NOT NULL,

   pass VARCHAR(200) NOT NULL,

   is_admin BOOLEAN DEFAULT 0,

created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);

  • Langkah kedua Buat folder projek baru dan folde .venv

* untuk windows *

> mkdir myproject
> cd myproject
> py -3 -m venv .venv

* untuk linux *

$ mkdir myproject
$ cd myproject
$ python3 -m venv .venv

  • Langkah ketiga Aktifkan environment
* untuk windows *
.venv\Scripts\activate
* untuk linux *
$ . .venv/bin/activate

  • Dan keempat baru kita install flask
pip install flask

setelah framework flask berhasil terinstal apa yang perlu disiapkan lagi?. Yupss...,
kita harus buat file baru kita beri nama api.py (optional). nama file boleh bebas ya. lihat
struktur projek tampak terlihat seperti gambar di bawah.

Masih ada library yang dibutuhin untk pembuatan kode program rest api menggunakan flask
yaitu perintah yang perlu kita jalanin lewat terminal
pip install flask-mysqldb dan pip install passlib. Barulah memulai untuk membuat kodenya di
file api.py

import MySQLdb.cursors
from flask import Flask, jsonify, request
from flask_mysqldb import MySQL
from passlib.hash import sha256_crypt


app = Flask(__name__)

app.config["MYSQL_HOST"] = "localhost"
app.config["MYSQL_USER"] = "root"
app.config["MYSQL_PASSWORD"] = ""
app.config["MYSQL_DB"] = "flask_restapi"

mysql = MySQL(app)

@app.get('/')
def hello():

    return jsonify([
        {"message": "Hello world...!"}
    ]), 200

@app.post("/api/users")
def create_user():
    data = request.get_json()
    username = data["username"]
    email = data["email"]
    password = sha256_crypt.encrypt(data["password"])
    cursor = mysql.connection.cursor(MySQLdb.cursors.DictCursor)
    cursor.execute("SELECT * FROM users WHERE username =%s", (username,))
    account = cursor.fetchone()
    if(account):
        return jsonify({"error" : "Account already exist"}), 403
    else:
   
        cursor.execute("INSERT INTO users (username, email, pass) VALUES (%s, %s, %s)", (username, email, password))
        mysql.connection.commit()
        cursor.close()
        message = "Created "+username+" successfully"
        return jsonify(
            {"message": message}
        ), 201
   
@app.put("/api/users/<int:id>")
def update_user(id):
    data = request.get_json()
    username = data["username"]
    email = data["email"]
    password = sha256_crypt.encrypt(data["password"])
    cursor = mysql.connection.cursor(MySQLdb.cursors.DictCursor)

    cursor.execute("SELECT * FROM users WHERE id=%s", (id,))
    account = cursor.fetchone()

    if(account):
        cursor.execute("UPDATE users SET username =%s,\
                email =%s, pass=%s WHERE id =%s",\
                (username, email, password, id))
        mysql.connection.commit()
        cursor.close()
        message = "Updated "+username+" successfully"
        return jsonify(
                {"message": message}
            ), 200
    else:
        cursor.close()
        message = "User id "+id+" not found"
        return jsonify(
                {"error": message}
            ), 404
   
@app.delete("/api/users/<int:id>")
def delete_user(id):
    cursor = mysql.connection.cursor(MySQLdb.cursors.DictCursor)
    cursor.execute("SELECT * FROM users WHERE id =%s", (id,))
    account = cursor.fetchone()

    if(account):
        cursor = mysql.connection.cursor(MySQLdb.cursors.DictCursor)
        cursor.execute("DELETE FROM users WHERE id=%s", (id,))
        mysql.connection.commit()
        cursor.close()
        return jsonify({"message": "Delete user data successfully"}), 200
    else:
        return jsonify({"error": "User not found"}), 404


@app.get("/api/users/<int:id>")
def single_user(id):
    cursor = mysql.connection.cursor(MySQLdb.cursors.DictCursor)
    cursor.execute("SELECT * FROM users WHERE id=%s", (id,))
    account = cursor.fetchone()
    cursor.close()

    return jsonify(account), 200

@app.get("/api/users")
def multiple_user():
    cursor = mysql.connection.cursor(MySQLdb.cursors.DictCursor)
    cursor.execute("SELECT * FROM users ORDER BY id DESC")
    accounts = cursor.fetchall()
    cursor.close()
   
    return jsonify(accounts), 200

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





setelah kode program kita coba jalan endpoin tersebut menggunakan postman. program
akan berjalan seperti pada gambar
  • fetch all user
  • single user
  • create user
update user
  • delete user
Oh ya, sampai lupa untuk menjalankan program di server development cukup ketikan perintah
" flask --app api run ". nama aplikasi yang kita jalani kita sesuaikan dengan nama file masing - masing kita buat ya. Selamat mencoba, hepii coding!.











0 komentar:

Posting Komentar

Kastemisasi tampilan terminal linux menjadi keren

Install Oh My Posh langkah pertama anda dapat menginstal Oh My Posh dan Unzip agar dapat mengekstraknya, ketikkan perintah di terminal. sudo...