REST API with PHP and SQLite // Case Study Android Note App
Tags: rest, php, sqlite, android
Published: 2022-11-24 12:21:13



## Hola!
Dalam tutorial kali ini, kita akan membuat Database yang dapat dihubungkan dengan project Android Studio. Studi kasus saya kali ini adalah aplikasi note.

## PHP
Langkah pertama adalah pembuatan folder project, folder tersebut harus diletakkan di htdocs xampp `C:\xampp\htdocs` folder saya kali ini saya namai NOTEmplate. Lalu buatlah file php, disini saya namai dengan index.php

Di file index.php, buatlah variabel untuk menginisiasi nama file database, lalu dengan PDO kita dapat mengeksekusi pembuatan file database tersebut. Untuk evaluasi error kita dapat menggunakan try & catch, didalam try kita juga akan sekalian menginisiasi pembuatan tabel dengan bahasa SQLite dan PHP

```php
$file_db = "notemplate.db";

try{
    $pdo = new PDO("sqlite:$file_db");
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

    //tabel akun
    $sql_create = "CREATE TABLE IF NOT EXISTS 'akun'(
        'id_akun' INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
        'username' TEXT NOT NULL,
        'password' TEXT NOT NULL)";
    $pdo->exec($sql_create);
    
    //tabel konten
    $sql_create = "CREATE TABLE IF NOT EXISTS 'konten'(
        'id_konten' INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
        'judul' TEXT NOT NULL,
        'konten' TEXT NOT NULL,
        'created_at' DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP)";
    $pdo->exec($sql_create);
}
catch(Throwable $th){
    throw new  PDOException($e->getMessage(),(int)$e->getCode());
}

```
Disini saya membuat 2 tabel, tabel akun dan konten. Tiap tabel akan membutuhkan method agar dapat beroperasi.

**Method** yang saya buat disini adalah :
`GET`     untuk mendapatkan data dari server
`POST`    untuk menginput data baru
`DELETE`  untuk menghapus data

**Additional** : Apabila yang berhubungan dengan aplikasi adalah mesin maka harus ditambahkan `header('Content-Type: application/json');` Secara default aplikasi menggunakan json, namun apabila yang berhubungan adalah manusia, maka dapat dilewati.

```php
//mehtod tabel akun
if($_SERVER['REQUEST_METHOD'] === 'GET'){
    $query = 'SELECT * FROM akun ORDER BY id_akun ASC';
    $stmt = $pdo->prepare($query);
    $stmt->execute();
    $data = $stmt->fetchAll(PDO::FETCH_ASSOC);
    echo json_encode($data);
}
else if($_SERVER['REQUEST_METHOD'] === 'POST'){
    if($_POST['username']!="" && $_POST['password']!="" ){
        $username = $_POST['username'];
        $password = $_POST['password'];
        $query = "INSERT INTO akun (username, password) VALUES (?,?)";
        $stmt = $pdo->prepare($query);
        $res = $stmt->execute([$username, $password]);
        if($res){
            $data = ['username'=>$username, 'password'=>$password];
            echo json_encode($data);
        }else{
            echo json_encode(['error'=>$stmt->errorCode()]);
        }
    }
}
else if($_SERVER['REQUEST_METHOD'] === 'DELETE'){
    if($_GET['id_akun'] != ''){
        $id_akun = $_GET['id_akun'];
        $query = "DELETE FROM akun WHERE id_akun = ?";
        $stmt = $pdo->prepare($query);
        $res = $stmt->execute([$id_akun]);
        if($res){
            $data = ['id_akun'=>$id_akun];
            echo json_encode($data);
        }else{
            echo json_encode(['error'=>$stmt->errorCode()]);
        }
    }
}



// Method tabel konten

    if($_SERVER['REQUEST_METHOD'] === 'GET'){
        $query = 'SELECT * FROM konten ORDER BY created_at DESC';
        $stmt = $pdo->prepare($query);
        $stmt->execute();
        $data = $stmt->fetchAll(PDO::FETCH_ASSOC);
        echo json_encode($data);
    }
    else if($_SERVER['REQUEST_METHOD'] === 'POST'){
        if($_POST['konten']!="" && $_POST['konten']!="" ){
            $judul = $_POST['judul'];
            $konten = $_POST['konten'];
            $query = "INSERT INTO konten (judul, konten) VALUES (?,?)";
            $stmt = $pdo->prepare($query);
            $res = $stmt->execute([$judul, $konten]);
            if($res){
                $data = ['jodul'=>$judul, 'konten'=>$konten];
                echo json_encode($data);
            }else{
                echo json_encode(['error'=>$stmt->errorCode()]);
            }
        }
    }
    else if($_SERVER['REQUEST_METHOD'] === 'DELETE'){
        if($_GET['id_konten'] != ''){
            $id_konten = $_GET['id_konten'];
            $query = "DELETE FROM konten WHERE id_konten = ?";
            $stmt = $pdo->prepare($query);
            $res = $stmt->execute([$id_konten]);
            if($res){
                $data = ['id_konten'=>$id_konten];
                echo json_encode($data);
            }else{
                echo json_encode(['error'=>$stmt->errorCode()]);
            }
        }
    }
```



## POSTMAN
Untuk mengoperasikan method method diatas kita tidak bisa menggunakan browser biasa, kita perlu menggunakan aplikasi khusus yaitu **Postman** . Sebelum kita masuk ke postman, kita aktifkan dulu apache di dalam Xampp. 

![Activate Apache on Xampp](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dazh6wffe1n4jux928kn.png)

Buka postman, dan buat tab baru. Dalam url kita isikan `localhost/(folder dalam htdocs)/(nama folder php)/` itu untuk default, jika anda memodifikasi port, maka masukkan juga portnya. `localhost:(port)/.../...` untuk url saya disini `localhost/NOTEmplate/index.php`.

**GET** => pilih GET di sebelah kiri url, lalu send.

![Method GET](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kgvqebhfsghzg07mupmg.png)

Bisa dilihat dibagian bawah, output menghasilkan 2 bracket kosong, untuk dua tabel.

File database seharusnya terbuat setelah anda menekan send, file dapat dilihat di folder htdocs, penamaannya juga seharusnya sesuai dengan inisiasi variabel file_db di index.php yang sudah kita buat.

![Database File](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u3knxqpx2d93eu10yxrg.png)

**POST** => pilih POST di sebelah kiri url, lalu kita harus mengisikan kolom dan valuenya terlebih dahulu, caranya dengan memilih Body(ada dibawah url) lalu form-data(ada dibawah body). 

![Method POST](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/976l8ddl8oknfymth6go.png)

Bisa dilihat dibagian bawah, hasil nya sudah masuk. Kita bisa melihat seluruh isi tabel dengan get.

![Method GET](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5yrf0xikrrczqcisjtfu.png)

Jika anda ingin mengisikan salah satu tabel saja, sebenarnya bisa, tetapi akan ada warning, namun itu tidak masalah data akan tetap masuk.

![Method POST](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/raz3purhpuymqj7j3jg1.png)

![Method GET](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mylzttp6xcdglps4tpfn.png)

**DELETE** => pilih DELETE di sebelah kiri url, lalu kita harus mengisikan id dari data yang akan di hapus, caranya dengan memilih Params(ada dibawah url). Isikan nama id dari tabel mana yang akan dihapus, disini saya akan menghapus dari tabel konten, lalu isikan id dari data mana yang akan dihapus, disini saya akan menghapus konten dengan id 2.

![Method DELETE](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z91huxobgbr7cbrmg5rv.png)

Akan ada warning, karena kita tidak mengisikan kolom id_akun, namun tidak masalah. Data akan tetap terhapus. Jika ingin melihat data yang tersisa bisa menggunakan method get.

![Method GET](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9puqvhju0pi723uoyntc.png)

Anda juga dapat mengecek menggunakan sqliteonline.com, dengan cara upload file database(yang ada di folder htdocs xampp), gunakan command `SELECT `untuk melihat data.

![Check on sqliteonline](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wotvokdht3fwvrdirvt4.png)

## THANKS
Terima kasih atas perhatiannya, feel free to ask on comment. Good luck ☺;