DEV Community

Cover image for Tutorial Pembuatan RESTful API - Mockup Coffee
Rizal Pratama
Rizal Pratama

Posted on

Tutorial Pembuatan RESTful API - Mockup Coffee

Hi! everyone,

Pada penulisan artikel kali ini saya akan memberikan tutorial sederhana bagaimana cara membuat sebuah web service menggunakan RESTful API dengan bahasa pemrograman PHP. Bagi Anda yang belum tahu apa itu RESTful API ? Artikel ini sangat cocok bagi kalian yang belum tahu atau belum paham secara jelas mengenai RESTful API. Secara singkat RESTful API ini adalah sebuah web service atau layanan yang memanfaatkan konsep metodologi HTTP sebagai media transfer datanya. Pada RESTful API ini, bentuk data yang digunakan bisa disesuaikan dengan kebutuhan Anda, yang populer biasa digunakan yaitu JSON dan XML. Manfaat dari penggunaan RESTful API yaitu Anda tidak perlu memasang apapun dari sisi client. Itulah penjelasan singkat mengenai RESTful API.

Agar lebih jelas pembahasan mengenai RESTful API, saya akan memberikan contoh studi kasus project akhir saya mengenai "Mockup Coffee".
Image description

Tools yang digunakan dalam pembuatan RESTful API sederhana kali ini yaitu Visual Studio Code, XAMPP, dan POSTMAN.

RESTful API sederhana menggunakan PHP

Lihat script di bawah ini :

<?php

$file_db = "coffee.db";

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

    $sql_create = "CREATE TABLE IF NOT EXISTS 'pesanan' (
                  'id' integer NOT NULL PRIMARY KEY AUTOINCREMENT,
                  'nama' TEXT CHECK (LENGTH(nama) <= 100),
                  'alamat' text NOT NULL,
                  'jumlah_pesanan' integer NOT NULL,
                  'harga' integer NOT NULL,
                  'metode_pembayaran' TEXT CHECK (metode_pembayaran IN ('DANA', 'OVO', 'GOPAY')) NOT NULL DEFAULT 'DANA',
                  'created_at' datetime NOT NULL DEFAULT CURRENT_TIMESTAMP)";
    $pdo->exec($sql_create);
}catch (PDOException $e){
    throw new PDOException($e->getMessage(), (int)$e->getCode());
}

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

/**
 * METHOD REST :
 * 
 * - GET : UNTUK MENDAPATKAN DATA DARI SERVER
 * - POST : UNTUK MENGINPUTKAN DATA BARU
 * - PUT : UNTUK MENGUPDATE DATA YANG SUDAH ADA
 * - DELETE : UNTUK MENGHAPUS DATA
 * 
 */

 if($_SERVER['REQUEST_METHOD'] === 'GET') {
    # UNTUK MENGAKSES DATA DARI SERVER
    $query = 'select * from pesanan order by created_at';
    $stmt = $pdo->prepare($query);
    $stmt->execute();
    $data = $stmt->fetchAll(PDO::FETCH_ASSOC);
    echo json_encode($data);
 } else if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    #UNTUK MENAMBAH DATA BARU DARI SERVER
    $nama = $_POST['nama'];
    $alamat = $_POST['alamat'];
    $jml_pesanan = $_POST['jumlah_pesanan'];
    $harga = $_POST['harga'];
    $method_bayar = $_POST['metode_pembayaran'];
    $query = 'insert into pesanan(nama, alamat, jumlah_pesanan, harga, metode_pembayaran) values (?, ?, ?, ?, ?)';
    $stmt = $pdo->prepare($query);
    $res = $stmt->execute([$nama, $alamat, $jml_pesanan, $harga, $method_bayar]);

    if($res) {
      $data = ['nama'=>$nama, 'alamat'=>$alamat, 'jumlah_pesanan'=>$jml_pesanan, 'harga'=>$harga, 'metode_pembayaran'=>$method_bayar];
      echo json_encode($data);
    } else {
      echo json_encode(['error'=>$stmt->errorCode()]);
    }
 } else if ($_SERVER['REQUEST_METHOD'] === 'DELETE') {
    #UNTUK MENGHAPUS DATA DARI SERVER
    $id = $_GET['id'];
    $query = 'delete from pesanan where id = ? ';
    $stmt = $pdo->prepare($query);
    $res = $stmt->execute([$id]);
    if($res) {
      $data = ['id' => $id];
      echo json_encode($data);
    } else {
      echo json_encode(['error' => $stmt->errorCode()]);
    }
 }
 ?>
Enter fullscreen mode Exit fullscreen mode

Penjelasan :

  • Pertama kita membuat sebuah file dengan ekstensi PHP dan di dalamnya memuat tag <?php ?> untuk menuliskan script RESTful API yang akan kita buat pada kali ini.

  • Kita membuat sebuah variabel untuk menyimpan file database yang akan kita buat. Berikut contoh script nya : $file_db = "coffee.db";

  • Kemudian kita akan membuat sebuah koneksi ke database menggunakan pengkondisian try and catch. Kode yang terdapat di dalam try{} akan dieksekusi terlebih dahulu, jika terdapat sebuah error...kode catch{} akan menangkap error dari try{} dan akan ditampilkan dalam bentuk sebuah pesan error.
    Berikut contoh script nya :

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

    $sql_create = "CREATE TABLE IF NOT EXISTS 'pesanan' (
                  'id' integer NOT NULL PRIMARY KEY AUTOINCREMENT,
                  'nama' TEXT CHECK (LENGTH(nama) <= 100),
                  'alamat' text NOT NULL,
                  'jumlah_pesanan' integer NOT NULL,
                  'harga' integer NOT NULL,
                  'metode_pembayaran' TEXT CHECK (metode_pembayaran IN ('DANA', 'OVO', 'GOPAY')) NOT NULL DEFAULT 'DANA',
                  'created_at' datetime NOT NULL DEFAULT CURRENT_TIMESTAMP)";
    $pdo->exec($sql_create);
}catch (PDOException $e){
    throw new PDOException($e->getMessage(), (int)$e->getCode());
}
Enter fullscreen mode Exit fullscreen mode
  • $pdo = new PDO("sqlite:$file_db"); Di bagian script ini , PDO merupakan sebuah class yang berfungsi untuk merepresentasikan koneksi antara script PHP dan database server. Di sini kita menggunakan database SQLite.

  • Perhatikan script di bawah !
    Script tersebut digunakan untuk membuat sebuah tabel baru, jika sebelumnya kita belum pernah sama sekali membuat sebuah tabel di dalam database yang telah kita buat.

$sql_create = "CREATE TABLE IF NOT EXISTS 'pesanan' (
                  'id' integer NOT NULL PRIMARY KEY AUTOINCREMENT,
                  'nama' TEXT CHECK (LENGTH(nama) <= 100),
                  'alamat' text NOT NULL,
                  'jumlah_pesanan' integer NOT NULL,
                  'harga' integer NOT NULL,
                  'metode_pembayaran' TEXT CHECK (metode_pembayaran IN ('DANA', 'OVO', 'GOPAY')) NOT NULL DEFAULT 'DANA',
                  'created_at' datetime NOT NULL DEFAULT CURRENT_TIMESTAMP)";
Enter fullscreen mode Exit fullscreen mode
  • Setelah komponen/atribut table tersebut dibuat, kemudian script tersebut akan dieksekusi menggunakan syntax berikut :
    $pdo->exec($sql_create);

  • header('Content-Type: application/json');
    Script diatas berfungsi untuk memberitahu sistem bahwa data yang harus diolah oleh sistem, hanya data berupa json. Data selain json, sistem akan menolaknya dan akan menampilkan pesan error.

  • Di dalam RESTful service terdapat beberapa method yang biasanya digunakan, yaitu :
    GET : UNTUK MENDAPATKAN DATA DARI SERVER
    POST : UNTUK MENGINPUTKAN DATA BARU
    PUT : UNTUK MENGUPDATE DATA YANG SUDAH ADA
    DELETE : UNTUK MENGHAPUS DATA

  • Perhatikan dengan baik-baik script di bawah ini !
    Script dibawah berfungsi untuk menerima request dari sisi client.

 if($_SERVER['REQUEST_METHOD'] === 'GET') {
    # UNTUK MENGAKSES DATA DARI SERVER
    $query = 'select * from pesanan order by created_at';
    $stmt = $pdo->prepare($query);
    $stmt->execute();
    $data = $stmt->fetchAll(PDO::FETCH_ASSOC);
    echo json_encode($data);
 } else if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    #UNTUK MENAMBAH DATA BARU DARI SERVER
    $nama = $_POST['nama'];
    $alamat = $_POST['alamat'];
    $jml_pesanan = $_POST['jumlah_pesanan'];
    $harga = $_POST['harga'];
    $method_bayar = $_POST['metode_pembayaran'];
    $query = 'insert into pesanan(nama, alamat, jumlah_pesanan, harga, metode_pembayaran) values (?, ?, ?, ?, ?)';
    $stmt = $pdo->prepare($query);
    $res = $stmt->execute([$nama, $alamat, $jml_pesanan, $harga, $method_bayar]);

    if($res) {
      $data = ['nama'=>$nama, 'alamat'=>$alamat, 'jumlah_pesanan'=>$jml_pesanan, 'harga'=>$harga, 'metode_pembayaran'=>$method_bayar];
      echo json_encode($data);
    } else {
      echo json_encode(['error'=>$stmt->errorCode()]);
    }
 } else if ($_SERVER['REQUEST_METHOD'] === 'DELETE') {
    #UNTUK MENGHAPUS DATA DARI SERVER
    $id = $_GET['id'];
    $query = 'delete from pesanan where id = ? ';
    $stmt = $pdo->prepare($query);
    $res = $stmt->execute([$id]);
    if($res) {
      $data = ['id' => $id];
      echo json_encode($data);
    } else {
      echo json_encode(['error' => $stmt->errorCode()]);
    }
 }
Enter fullscreen mode Exit fullscreen mode
  • Syntax berikut berfungsi menerima request pesan dari client.

$_SERVER['REQUEST_METHOD'] === 'GET'
$_SERVER['REQUEST_METHOD'] === 'POST'
$_SERVER['REQUEST_METHOD'] === 'DELETE'

  • Query untuk menampilkan data server yang telah diinput client menggunakan $_SERVER['REQUEST_METHOD'] === 'POST'

$query = 'select * from pesanan order by created_at';

Data diurutkan berdasarkan waktu penginputan data yang terkecil.

  • Untuk menginputkan data ke server, client menggunakan method $_SERVER['REQUEST_METHOD'] === 'POST' Berikut adalah script POST :
$nama = $_POST['nama'];
$alamat = $_POST['alamat'];
$jml_pesanan = $_POST['jumlah_pesanan'];
$harga = $_POST['harga'];
$method_bayar = $_POST['metode_pembayaran'];
$query = 'insert into pesanan(nama, alamat, jumlah_pesanan, harga, metode_pembayaran) values (?, ?, ?, ?, ?)';
$stmt = $pdo->prepare($query);
$res = $stmt->execute([$nama, $alamat, $jml_pesanan, $harga, $method_bayar]);

if($res) {
   $data = ['nama'=>$nama, 'alamat'=>$alamat, 'jumlah_pesanan'=>$jml_pesanan, 'harga'=>$harga, 'metode_pembayaran'=>$method_bayar];
   echo json_encode($data);
} else {
   echo json_encode(['error'=>$stmt->errorCode()]);
}
Enter fullscreen mode Exit fullscreen mode

Terdapat suatu pengkondisian di dalam method diatas, perhatikan script berikut :

if($res) {
      $data = ['nama'=>$nama, 'alamat'=>$alamat, 'jumlah_pesanan'=>$jml_pesanan, 'harga'=>$harga, 'metode_pembayaran'=>$method_bayar];
      echo json_encode($data);
    } else {
      echo json_encode(['error'=>$stmt->errorCode()]);
    }
Enter fullscreen mode Exit fullscreen mode

Jika value data yang diinputkan berhasil, maka data tersebut akan dicetak kembali menggunakan syntax :
echo json_encode($data);
Jika terdapat kesalahan dalam pengisian suatu data, maka akan menampilkan pesan error nya dibagian mana menggunakan syntax :
echo json_encode(['error'=>$stmt->errorCode()]);

  • Untuk menghapus data inputan client yang telah masuk di server, client bisa menggunakan $_SERVER['REQUEST_METHOD'] === 'DELETE' Berikut adalah script DELETE :
$id = $_GET['id'];
$query = 'delete from pesanan where id = ? ';
$stmt = $pdo->prepare($query);
$res = $stmt->execute([$id]);
 if($res) {
   $data = ['id' => $id];
   echo json_encode($data);
 } else {
   echo json_encode(['error' => $stmt->errorCode()]);
 }
Enter fullscreen mode Exit fullscreen mode

Bisa diperhatikan di bagian syntax berikut :

$id = $_GET['id'];
$query = 'delete from pesanan where id = ? ';
Enter fullscreen mode Exit fullscreen mode

Di bagian syntax di atas, kita mengambil data id dari server menggunakan method $_GET, lalu dimasukkan ke dalam variable $id.
Kemudian eksekusi syntax : $query = 'delete from pesanan where id = ? ';
dilakukan penghapusan suatu data berdasarkan field id dari server menggunakan syntax query tersebut.
Di dalam $_SERVER['REQUEST_METHOD'] === 'DELETE' terdapat suatu pengkondisian, perhatikan script berikut :

if($res) {
  $data = ['id' => $id];
  echo json_encode($data);
} else {
  echo json_encode(['error' => $stmt->errorCode()]);
}
Enter fullscreen mode Exit fullscreen mode

Jika value data field id yang diinputkan oleh client terdapat di dalam suatu server, maka data tersebut akan dihapus dari server dan dicetak keterangan penghapusan data menggunakan syntax :
echo json_encode($data);
Jika id yang diinputkan oleh client tidak terdapat di dalam server, maka akan menampilkan pesan error nya menggunakan syntax :
echo json_encode(['error'=>$stmt->errorCode()]);

  • Kemudian tahap selanjutnya, buka aplikasi POSTMAN untuk melakukan konfigurasi pengecekan data apakah script PHP yang telah kita buat sebelumnya telah berfungsi dengan baik atau tidak.

  • Setelah masuk di aplikasi POSTMAN, klik di bagian new.

Image description

  • Pilih HTTP Request

Image description

  • Kemudian masukkan url local pada server XAMPP

Image description

  • Setelah url local folder kita telah diinputkan di bagian tersebut, kita pilih MENU RESTful service yang kita inginkan.

Image description

  • Sekarang saya akan berperan sebagai client, saya akan menjalankan method $_SERVER['REQUEST_METHOD'] === 'GET' dan jangan lupa untuk klik di bagian SEND.

Image description

Hasil :

Image description

  • Kemudian saya akan menginputkan data ke dalam server menggunakan method $_SERVER['REQUEST_METHOD'] === 'POST'

Pertama, pilih menu RESTful service POST

Image description

Kemudian, klik pilihan Body

Image description

Setelah masuk ke Body, klik menu form-data

Image description

Kemudian masukkan Key dan Value pada field atau atribut sesuai dengan script PHP berikut :

$query = 'insert into pesanan(nama, alamat, jumlah_pesanan, harga, metode_pembayaran) values (?, ?, ?, ?, ?)';
Enter fullscreen mode Exit fullscreen mode

Image description

Kemudian klik SEND, dan berikut hasilnya :

Image description

Lakukan pengisian sebanyak data yang ingin kalian masukan, disini saya akan menginputkan 3 data dan saya tampilkan menggunakan $_SERVER['REQUEST_METHOD'] === 'GET' berikut hasilnya :

[
    {
        "id": "4",
        "nama": "Rizal Pratama",
        "alamat": "Perum Dewi Sartika",
        "jumlah_pesanan": "2",
        "harga": "25000",
        "metode_pembayaran": "DANA",
        "created_at": "2022-11-22 15:06:55"
    },
    {
        "id": "5",
        "nama": "Farah Faradilla",
        "alamat": "Jalan Medan Merdeka Blok H",
        "jumlah_pesanan": "4",
        "harga": "20000",
        "metode_pembayaran": "OVO",
        "created_at": "2022-11-22 15:09:52"
    },
    {
        "id": "6",
        "nama": "Aisyah Humairoh",
        "alamat": "Jalan Kelud Utara Blok G",
        "jumlah_pesanan": "5",
        "harga": "25000",
        "metode_pembayaran": "GOPAY",
        "created_at": "2022-11-22 15:10:44"
    }
]
Enter fullscreen mode Exit fullscreen mode

Data telah berhasil diinputkan ke dalam server !

  • Kemudian saya ingin menghapus data dari server dengan id = 5 Pertama, pilih menu RESTful service DELETE

Image description

Kemudian klik di bagian menu params

Image description

Setelah itu masukkan Key dan Value field atau atribut id pada kolom tersebut, karena saya ingin menghapus data dengan id = 5 maka value yang saya masukkan bernilai 5.

Image description

Kemudian klik SEND dan kembali ke
method $_SERVER['REQUEST_METHOD'] === 'GET' untuk melihat data server yang telah dihapus, dan berikut hasilnya :

{
    "id": "5"
}
Enter fullscreen mode Exit fullscreen mode

Hasil :

[
    {
        "id": "4",
        "nama": "Rizal Pratama",
        "alamat": "Perum Dewi Sartika",
        "jumlah_pesanan": "2",
        "harga": "25000",
        "metode_pembayaran": "DANA",
        "created_at": "2022-11-22 15:06:55"
    },
    {
        "id": "6",
        "nama": "Aisyah Humairoh",
        "alamat": "Jalan Kelud Utara Blok G",
        "jumlah_pesanan": "5",
        "harga": "25000",
        "metode_pembayaran": "GOPAY",
        "created_at": "2022-11-22 15:10:44"
    }
]
Enter fullscreen mode Exit fullscreen mode

Data dengan id = 5 telah berhasil dihapus dari server !

Top comments (0)