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".
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()]);
}
}
?>
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());
}
$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)";
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()]);
}
}
- 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()]);
}
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()]);
}
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()]);
}
Bisa diperhatikan di bagian syntax berikut :
$id = $_GET['id'];
$query = 'delete from pesanan where id = ? ';
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()]);
}
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.
- Pilih HTTP Request
- Kemudian masukkan url local pada server XAMPP
- Setelah url local folder kita telah diinputkan di bagian tersebut, kita pilih MENU RESTful service yang kita inginkan.
-
Sekarang saya akan berperan sebagai client, saya akan menjalankan method
$_SERVER['REQUEST_METHOD'] === 'GET'
dan jangan lupa untuk klik di bagian SEND.
Hasil :
-
Kemudian saya akan menginputkan data ke dalam server menggunakan method
$_SERVER['REQUEST_METHOD'] === 'POST'
Pertama, pilih menu RESTful service POST
Kemudian, klik pilihan Body
Setelah masuk ke Body, klik menu form-data
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 (?, ?, ?, ?, ?)';
Kemudian klik SEND, dan berikut hasilnya :
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"
}
]
Data telah berhasil diinputkan ke dalam server !
-
Kemudian saya ingin menghapus data dari server dengan
id = 5
Pertama, pilih menu RESTful service DELETE
Kemudian klik di bagian menu params
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.
Kemudian klik SEND dan kembali ke
method $_SERVER['REQUEST_METHOD'] === 'GET'
untuk melihat data server yang telah dihapus, dan berikut hasilnya :
{
"id": "5"
}
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"
}
]
Data dengan id = 5
telah berhasil dihapus dari server !
Top comments (0)