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!.











Selasa, 14 Mei 2024

Tutorial belajar membuat rest api sederhana menggunakan PHP native dan database mysql

Langkah  pertama sebelum membuat program jalankan dulu web server anda di local komputer. Web server local saya sudah terpasang otomatis apachenya menggunakan control panel Laragon, jadi si laragon ini sudah bundle yang lengkap di dalamya sudah include database, php, node, bahkan python. Lihat interface control panel laragon kalo sudah jalan seperti gambar di bawah.

Selanjutnya buat folder baru masuk file explorer windows cari tempat penyimpan file instalasi laragon terlebih dahulu misal punya saya di path "C:\laragon\www"  kemudian buat folder baru beri nama " belajar-restapi-php ". Perhatikan struktur foldernya  seperti ini. 

Kode yang ada di file database.php dan user.php yaitu:

<?php

class Database {

    protected $connect;
    protected $stmt;
    protected $user = "root";
    protected $pass = "";

    public function __construct()
    {
        $this->connect = new PDO("mysql:host=localhost;dbname=test_db", $this->user, $this->pass);
    }

    public function query($sql, $data = [])
    {
        $this->stmt = $this->connect->prepare($sql);
        $this->stmt->execute($data);
    }

    public function multipleSet()
    {
        return $this->stmt->fetchAll(PDO::FETCH_OBJ);
    }
   
    public function singleSet()
    {
        return $this->stmt->fetch(PDO::FETCH_OBJ);
    }

    public function createTable()
    {
        $sql = "CREATE TABLE users(
            id INT(11) UNSIGNED 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
        )";
        $this->query($sql);
        echo json_encode(['status' => 200, 'message'=> 'Create table successfully']);
    }
}


<?php
require_once("database.php");

class User extends Database{

    public function findAll()
    {
        $sql = "SELECT * FROM users ORDER BY id DESC";
        $this->query($sql);
        return $this->multipleSet();
       
    }

    public function findById($id)
    {
        $sql = "SELECT * FROM users WHERE id = :id";
        $data = array(
            'id'=> $id
        );
        $this->query($sql, $data);
        return $this->singleSet();

    }

    public function findByUsername($username)
    {
        $sql = "SELECT * FROM users WHERE username = :username";
        $data = array(
            'username'=> $username
        );
        $this->query($sql, $data);
        return $this->singleSet();

    }

    public function create($username, $email, $pass)
    {
        $sql = "INSERT INTO users(username, email, pass) VALUES(:username, :email, :pass)";

        $form_data = array(
            'username' => $username,
            'email' => $email,
            'pass' => password_hash($pass, PASSWORD_BCRYPT)
        );
        $this->query($sql, $form_data);
    }

    public function update($username, $email, $pass, $id)
    {
        $sql = "UPDATE users SET username = :username, email = :email, pass = :pass WHERE id = :id";

        $form_data = array(
            'username' => $username,
            'email' => $email,
            'pass' => password_hash($pass, PASSWORD_BCRYPT),
            'id' => $id
        );
        $this->query($sql, $form_data);
    }

    public function delete($id)
    {
        $sql = "DELETE FROM users WHERE id = :id";
        $data = array(
            'id' => $id
        );

        $this->query($sql, $data);
    }
}


Oh ya jangan lupa siapkan nama database beserta tabelnya sesuai konfigurasi nama class Database di atas yaitu test_db dan nama tabelnya users dulu abaikan yang folder products kita hanya buat crud rest api data user saja . cara membuat tabel user buka heidi sql dari laragon kemudian tombol tab query baru kita masukan syntaknya.

CREATE TABLE users(
            id INT(11) UNSIGNED 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 terakhir buat file baru diberi nama index.php di folder api/users dan isi kodenya seperti terlihat pada gambar di bawah.
















<?php
require_once('../user.php');

header("Content-Type: application/json");

$method = $_SERVER["REQUEST_METHOD"];

switch($method) {

    case 'GET':
     
        $user = new User();
        if(!empty($_GET['id'])){
            $id = $_GET['id'];
            $data = array(
                'status'=> 200,
                'user'=> $user->findById($id)
            );
        } else {
            $data = array(
                'status'=> 200,
                'users'=> $user->findAll()
            );
        }
       
        echo json_encode($data);
        break;
    case 'POST':
        $post = json_decode(file_get_contents('php://input'), true);
        $username = $post['username'];
        $email = $post['email'];
        $pass = $post['pass'];

        $user = new User();
        $row = $user->findByUsername($username);
        if($row){
            $data = array(
                'status' => 203,
                'message' => "$username found"
            );

        } else {
            $user->create($username, $email, $pass);
            $data = array(
                'status' => 201,
                'message' => 'Created successfully'
            );
        }
       
   
        echo json_encode($data);
       
        break;
    case 'PUT':

        $input = json_decode(file_get_contents('php://input'), true);
        $id = $input['id'];
        $username = $input['username'];
        $email = $input['email'];
        $pass = $input['pass'];
   
        $user = new User();
        $user->update($username, $email, $pass, $id);
        $data = array(
            'status' => 200,
            'message' => 'Updated successfully'
        );
   
        echo json_encode($data);
        break;
    case 'DELETE':
       
        $id = $_GET['id'];
        $user = new User();
        $user->delete($id);
        $data = array(
            'status' => 200,
            'message' => 'Deleted successfully'
        );
       
        echo json_encode($data);
        break;
    default:
        http_response_code(405);
        echo json_encode(['error' => 'Method not allowed']);
        break;
}



 

Untuk menguji api bisa jalan atau tidak bisa buka menggunakan postman. Bagi yang belum mengistalnya silahkan download dulu di situs resminya https://www.postman.com/downloads/.  di api yang saya buat ada 5 Endpoin user seperti menampilkan semua data user, single user, create user baru, update user dan delete user.
  • CREATE USER




  • UPDATE USER


  • DELETE USER


  • FETCH ALL USERS


  • SINGLE USER

Baik cukup sampai di sini belajar membuat simple crud rest api menggunakan php nativenya. Semoga artikel ini bermanfaat bagi kalian yang ingin mencobanya, silahkan kalian explore sendiri untuk pembuatan endpoint lainnya. Terima kasih, Happy Coding!👌

Senin, 13 Mei 2024

Apa itu RESTful API?

Sebelum membedah apa yang dimaksud dengan RESTful API?. Alangkah baiknya kita mengenal dahulu tentang API (application programming interface) itu seperti apa. API merupakan penghubung atau jembatan dari berbagai aplikasi yang berbeda untuk dapat berkomunikasi satu sama lain. Jadi gambaran API sederhananya seperti ini, guys.

















Dari gambar di atas API sendiri diibaratkan sebagai waitress atau pelayan yang bertugas mengantar makanan atau minuman sesuai pesanan si customer. Nah si customer itu bisa diartikan sebagai aplikasinya baik dalam bentuk mobile, web ataupun desktop. Sedangkan si cheff sendiri sebagai server yang dimana di dalamnya bisa berupa database, web server, docker, dll. Kenapa kegunaan API itu sangatlah penting, bukan?. Coba kita bayangkan jikalau aplikasi - aplikasi yang kita bangun tanpa intregasi secara multi platform pastinya akan kesulitan dalam pertukaran antar data - data yang dibutuhkan. Sekarang kita sudah tahu tentang apa itu API / application programming interface di dalam sistem kemudian kita bahas pengertian restfull api. Restful api merupakan salah satu bagian dari arsitektur API dan masih banyak lagi contoh pertukaran suatu data yang tergolong di dalam arsitektur API diantaranya SOAP API, GRAPHQL API, dan COMPOSITE API

Kali ini kita hanya fokus di RESTful API saja. REST singkatan dari representational state tranfer, adalah gaya arsitektur tertentu untuk mendesain API. Singkatnya, RESTful API adalah jenis API yang mengikuti seperangkat aturan desain yang membuat pertukaran data antara aplikasi menjadi lebih mudah dan efisien. Mari kita lihat lebih dekat bagaimana cara kerjanya:
  • Menggunakan HTTP: RESTful API bergantung pada protokol HTTP yang sama yang digunakan web browser untuk berkomunikasi dengan server web. Ini berarti RESTful API dapat memanfaatkan infrastruktur yang ada, membuatnya mudah diterapkan dan diintegrasikan.
  • Stateless: RESTful API bersifat stateless, artinya server tidak menyimpan informasi tentang sesi pengguna individual di antara permintaan. Setiap permintaan HTTP harus menyertakan semua informasi yang diperlukan untuk diproses secara mandiri.
  • Sumber Daya Berbasis URL: RESTful API berinteraksi dengan data melalui "sumber daya" yang diidentifikasi oleh URL. Misalnya, API untuk aplikasi todo list mungkin memiliki sumber daya yang mewakili daftar tugas itu sendiri (/tasks) dan sumber daya lain yang mewakili tugas individual.
  • Verb HTTP: RESTful API menggunakan verb HTTP tertentu (seperti GET, POST, PUT, dan DELETE) untuk melakukan operasi pada sumber daya.
    • GET: digunakan untuk mengambil data dari sumber daya.
    • POST: digunakan untuk membuat sumber daya baru.
    • PUT: digunakan untuk memperbarui sumber daya yang ada.
    • DELETE: digunakan untuk menghapus sumber daya.

Dengan mengikuti aturan ini, RESTful API menjadi mudah dipahami dan digunakan oleh developer. Ini membuat pengembangan aplikasi terintegrasi menjadi lebih efisien dan memungkinkan berbagai aplikasi untuk bertukar data dengan lancar. ☝

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...