Difference between revisions of "Membuat dan mengonsumsi API sederhana dengan PHP"

From OnnoWiki
Jump to navigation Jump to search
(Created page with "Berikut adalah modul "Membuat dan Mengonsumsi API Sederhana dengan PHP" sebagai bagian dari mata kuliah Pemrograman Web, dengan fokus pada pengantar RESTful API menggunakan Ub...")
 
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
Berikut adalah modul "Membuat dan Mengonsumsi API Sederhana dengan PHP" sebagai bagian dari mata kuliah Pemrograman Web, dengan fokus pada pengantar RESTful API menggunakan Ubuntu 24.04. Modul ini mencakup langkah-langkah praktis dan contoh implementasi tanpa menggunakan alat dari Microsoft.
+
==Tujuan Pembelajaran==
 +
* Memahami konsep dasar REST API.
 +
* Membangun API sederhana dengan PHP (tanpa framework).
 +
* Mengonsumsi (mengakses) API menggunakan PHP dan tools seperti `curl`.
 +
* Menjalankan API di server lokal Ubuntu 24.04 (menggunakan Apache).
  
## Pendahuluan
+
==Persiapan Lingkungan==
  
RESTful API (Representational State Transfer) adalah arsitektur yang memungkinkan komunikasi antara klien dan server melalui protokol HTTP. Dalam modul ini, kita akan membahas cara membuat API sederhana menggunakan PHP dan MySQL, serta bagaimana mengonsumsi API tersebut.
+
'''1. Install Apache, PHP, dan cURL'''
  
## 1. Persiapan Lingkungan
+
sudo apt update
 +
sudo apt install apache2 php libapache2-mod-php php-curl
  
### 1.1. Instalasi Apache, MySQL, dan PHP
+
'''2. Buat Folder Project'''
  
Pastikan sistem Ubuntu 24.04 Anda telah terinstal Apache, MySQL, dan PHP (LAMP stack). Jika belum, Anda dapat menginstalnya dengan perintah berikut:
+
sudo mkdir -p /var/www/html/simple-api
 +
sudo chown -R $USER:$USER /var/www/html/simple-api
 +
cd /var/www/html/simple-api
  
```bash
 
sudo apt update
 
sudo apt install apache2 mysql-server php libapache2-mod-php php-mysql -y
 
```
 
 
  
Setelah instalasi, amankan MySQL dengan menjalankan:
+
==Bagian 1: Membuat API Sederhana==
  
```bash
+
'''1.1 Struktur Direktori'''
sudo mysql_secure_installation
 
```
 
 
  
### 1.2. Konfigurasi Direktori Proyek
+
simple-api/
 +
├── api.php
 +
└── data.json
  
Buat direktori untuk proyek Anda di direktori root web server:
+
'''1.2 Isi `data.json`'''
  
```bash
+
<pre>
sudo mkdir /var/www/html/restful-api
+
[
sudo chown -R $USER:$USER /var/www/html/restful-api
+
    {"id": 1, "name": "Alice"},
```
+
    {"id": 2, "name": "Bob"},
+
    {"id": 3, "name": "Charlie"}
 +
]
 +
</pre>
  
## 2. Membuat Database dan Tabel
+
'''1.3 Isi `api.php`'''
  
### 2.1. Membuat Database
+
<pre>
 +
<?php
 +
header('Content-Type: application/json');
 +
 +
$data = json_decode(file_get_contents('data.json'), true);
 +
 +
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
 +
    if (isset($_GET['id'])) {
 +
        $id = intval($_GET['id']);
 +
        foreach ($data as $item) {
 +
            if ($item['id'] === $id) {
 +
                echo json_encode($item);
 +
                exit;
 +
            }
 +
        }
 +
        echo json_encode(["error" => "Data not found"]);
 +
    } else {
 +
        echo json_encode($data);
 +
    }
 +
} else {
 +
    echo json_encode(["error" => "Method not supported"]);
 +
}
 +
</pre>
  
Masuk ke MySQL dan buat database baru:
+
'''1.4 Akses API via Browser'''
 +
* Semua data: [http://localhost/simple-api/api.php](http://localhost/simple-api/api.php)
 +
* Data berdasarkan ID: [http://localhost/simple-api/api.php?id=2](http://localhost/simple-api/api.php?id=2)
  
```bash
 
mysql -u root -p
 
```
 
 
  
Setelah masuk ke prompt MySQL, jalankan:
+
==Bagian 2: Mengonsumsi API dengan PHP==
  
```sql
+
'''2.1 File: `consume.php`'''
CREATE DATABASE db_api;
 
USE db_api;
 
```
 
 
  
### 2.2. Membuat Tabel
+
<pre>
 +
<?php
 +
function getData($url) {
 +
    $ch = curl_init();
 +
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 +
    curl_setopt($ch, CURLOPT_URL, $url);
 +
    $result = curl_exec($ch);
 +
    curl_close($ch);
 +
    return json_decode($result, true);
 +
}
 +
 +
$apiUrl = "http://localhost/simple-api/api.php";
 +
$data = getData($apiUrl);
 +
 +
echo "<h2>Daftar User</h2><ul>";
 +
foreach ($data as $user) {
 +
    echo "<li>{$user['id']} - {$user['name']}</li>";
 +
}
 +
echo "</ul>";
 +
</pre>
  
Buat tabel `products` dengan struktur berikut:
+
'''2.2 Jalankan di browser'''
 +
* Simpan di `/var/www/html/simple-api/consume.php`
 +
* Akses di browser: [http://localhost/simple-api/consume.php](http://localhost/simple-api/consume.php)
  
```sql
 
CREATE TABLE products (
 
    id INT AUTO_INCREMENT PRIMARY KEY,
 
    name VARCHAR(100) NOT NULL,
 
    description TEXT,
 
    price DECIMAL(10, 2) NOT NULL,
 
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
 
);
 
```
 
 
  
## 3. Membuat API dengan PHP
+
==Bonus: Uji Coba dengan Terminal==
  
### 3.1. Struktur Proyek
+
curl http://localhost/simple-api/api.php
 +
curl http://localhost/simple-api/api.php?id=2
  
Atur struktur direktori proyek Anda sebagai berikut:
+
==Kesimpulan==
 +
* Kamu telah berhasil membuat API sederhana menggunakan file JSON.
 +
* API ini hanya mendukung method `GET`.
 +
* Kamu juga telah belajar cara mengambil data API menggunakan PHP (`curl`).
  
```
+
Coba membuat versi POST, PUT, DELETE :) ...
  
restful-api/
+
==Pranala Menarik==
├── api
 
│  ├── config
 
│  │  └── Database.php
 
│  ├── objects
 
│  │  └── Product.php
 
│  ├── product
 
│  │  ├── create.php
 
│  │  ├── delete.php
 
│  │  ├── read.php
 
│  │  ├── read_one.php
 
│  │  └── update.php
 
│  └── index.php
 
└── .htaccess
 
```
 
 
  
### 3.2. Konfigurasi Database
+
* [[Web Programming]]
 
 
Buat file `Database.php` di direktori `api/config` dengan isi berikut:
 
 
 
```php
 
<?php
 
class Database {
 
    private $host = "localhost";
 
    private $db_name = "db_api";
 
    private $username = "root";
 
    private $password = "";
 
    public $conn;
 
 
 
    public function getConnection() {
 
        $this->conn = null;
 
        try {
 
            $this->conn = new PDO("mysql:host=" . $this->host . ";dbname=" . $this->db_name, $this->username, $this->password);
 
            $this->conn->exec("set names utf8");
 
        } catch (PDOException $exception) {
 
            echo "Koneksi error: " . $exception->getMessage();
 
        }
 
        return $this->conn;
 
    }
 
}
 
?>
 
```
 
 
 
 
### 3.3. Membuat Model Produk
 
 
 
Buat file `Product.php` di direktori `api/objects` dengan isi berikut:
 
 
 
```php
 
<?php
 
class Product {
 
    private $conn;
 
    private $table_name = "products";
 
 
 
    public $id;
 
    public $name;
 
    public $description;
 
    public $price;
 
    public $created_at;
 
 
 
    public function __construct($db) {
 
        $this->conn = $db;
 
    }
 
 
 
    function read() {
 
        $query = "SELECT id, name, description, price, created_at FROM " . $this->table_name . " ORDER BY created_at DESC";
 
        $stmt = $this->conn->prepare($query);
 
        $stmt->execute();
 
        return $stmt;
 
    }
 
 
 
    function create() {
 
        $query = "INSERT INTO " . $this->table_name . " SET name=:name, description=:description, price=:price";
 
        $stmt = $this->conn->prepare($query);
 
 
 
        $this->name = htmlspecialchars(strip_tags($this->name));
 
        $this->description = htmlspecialchars(strip_tags($this->description));
 
        $this->price = htmlspecialchars(strip_tags($this->price));
 
 
 
        $stmt->bindParam(":name", $this->name);
 
        $stmt->bindParam(":description", $this->description);
 
        $stmt->bindParam(":price", $this->price);
 
 
 
        if ($stmt->execute()) {
 
            return true;
 
        }
 
        return false;
 
    }
 
 
 
    function readOne() {
 
        $query = "SELECT id, name, description, price, created_at FROM " . $this->table_name . " WHERE id = ? LIMIT 0,1";
 
        $stmt = $this->conn->prepare($query);
 
        $stmt->bindParam(1, $this->id);
 
        $stmt->execute();
 
 
 
        $row = $stmt->fetch(PDO::FETCH_ASSOC);
 
        if ($row) {
 
            $this->name = $row['name'];
 
            $this->description = $row['description'];
 
            $this->price = $row['price'];
 
            $this->created_at = $row['created_at'];
 
            return true;
 
        }
 
        return false;
 
    }
 
 
 
    function update() {
 
        $query = "UPDATE " . $this->table_name . " SET name = :name, description = :description, price = :price WHERE id = :id";
 
        $stmt = $this->conn->prepare($query);
 
 
 
        $this->name = htmlspecialchars(strip_tags($this->name));
 
        $this->description = htmlspecialchars(strip_tags($this->description));
 
        $this->price = htmlspecialchars(strip_tags($this->price));
 
        $this->
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Melanjutkan modul sebelumnya tentang "Membuat dan Mengonsumsi API Sederhana dengan PHP" pada mata kuliah Pemrograman Web, berikut adalah langkah-langkah tambahan untuk melengkapi implementasi RESTful API dengan operasi **Update** dan **Delete**, serta cara mengonsumsi API tersebut menggunakan PHP di lingkungan Ubuntu 24.04.
 
 
 
## 4. Menambahkan Operasi Update dan Delete pada API
 
 
 
### 4.1. Endpoint Update (PUT)
 
 
 
Buat file `update.php` di direktori `api/product` dengan isi berikut:
 
 
 
 
 
```php
 
<?php
 
// Header yang diperlukan
 
header("Access-Control-Allow-Origin: *");
 
header("Content-Type: application/json; charset=UTF-8");
 
header("Access-Control-Allow-Methods: PUT");
 
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
 
 
 
// Sertakan file yang diperlukan
 
include_once '../config/Database.php';
 
include_once '../objects/Product.php';
 
 
 
// Dapatkan koneksi database
 
$database = new Database();
 
$db = $database->getConnection();
 
 
 
// Persiapkan objek produk
 
$product = new Product($db);
 
 
 
// Dapatkan data yang dikirim
 
$data = json_decode(file_get_contents("php://input"));
 
 
 
// Pastikan data yang diperlukan tersedia
 
if (!empty($data->id) && (!empty($data->name) || !empty($data->description) || !empty($data->price))) {
 
    // Set ID produk yang akan diperbarui
 
    $product->id = $data->id;
 
 
 
    // Set properti produk berdasarkan data yang tersedia
 
    if (!empty($data->name)) {
 
        $product->name = $data->name;
 
    }
 
    if (!empty($data->description)) {
 
        $product->description = $data->description;
 
    }
 
    if (!empty($data->price)) {
 
        $product->price = $data->price;
 
    }
 
 
 
    // Perbarui produk
 
    if ($product->update()) {
 
        // Set respons kode 200 - OK
 
        http_response_code(200);
 
        echo json_encode(array("message" => "Produk berhasil diperbarui."));
 
    } else {
 
        // Set respons kode 503 - Service Unavailable
 
        http_response_code(503);
 
        echo json_encode(array("message" => "Gagal memperbarui produk."));
 
    }
 
} else {
 
    // Set respons kode 400 - Bad Request
 
    http_response_code(400);
 
    echo json_encode(array("message" => "Data tidak lengkap."));
 
}
 
?>
 
```
 
 
 
 
**Penjelasan:**
 
 
 
- **Header HTTP:** Menentukan bahwa metode yang diizinkan adalah PUT dan mengatur tipe konten sebagai JSON.
 
- **Membaca Input:** Mengambil data JSON yang dikirim oleh klien.
 
- **Validasi Data:** Memastikan bahwa ID produk dan setidaknya satu atribut lainnya disertakan dalam permintaan.
 
- **Memperbarui Produk:** Memanggil metode `update()` pada objek produk untuk memperbarui data di database.
 
 
 
### 4.2. Endpoint Delete (DELETE)
 
 
 
Buat file `delete.php` di direktori `api/product` dengan isi berikut:
 
 
 
 
 
```php
 
<?php
 
// Header yang diperlukan
 
header("Access-Control-Allow-Origin: *");
 
header("Content-Type: application/json; charset=UTF-8");
 
header("Access-Control-Allow-Methods: DELETE");
 
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
 
 
 
// Sertakan file yang diperlukan
 
include_once '../config/Database.php';
 
include_once '../objects/Product.php';
 
 
 
// Dapatkan koneksi database
 
$database = new Database();
 
$db = $database->getConnection();
 
 
 
// Persiapkan objek produk
 
$product = new Product($db);
 
 
 
// Dapatkan ID produk yang akan dihapus
 
$data = json_decode(file_get_contents("php://input"));
 
 
 
// Pastikan ID produk tersedia
 
if (!empty($data->id)) {
 
    // Set ID produk yang akan dihapus
 
    $product->id = $data->id;
 
 
 
    // Hapus produk
 
    if ($product->delete()) {
 
        // Set respons kode 200 - OK
 
        http_response_code(200);
 
        echo json_encode(array("message" => "Produk berhasil dihapus."));
 
    } else {
 
        // Set respons kode 503 - Service Unavailable
 
        http_response_code(503);
 
        echo json_encode(array("message" => "Gagal menghapus produk."));
 
    }
 
} else {
 
    // Set respons kode 400 - Bad Request
 
    http_response_code(400);
 
    echo json_encode(array("message" => "ID produk tidak ditemukan."));
 
}
 
?>
 
```
 
 
 
 
**Penjelasan:**
 
 
 
- **Header HTTP:** Menentukan bahwa metode yang diizinkan adalah DELETE dan mengatur tipe konten sebagai JSON.
 
- **Membaca Input:** Mengambil data JSON yang dikirim oleh klien.
 
- **Validasi Data:** Memastikan bahwa ID produk disertakan dalam permintaan.
 
- **Menghapus Produk:** Memanggil metode `delete()` pada objek produk untuk menghapus data dari database.
 
 
 
## 5. Mengonsumsi RESTful API Menggunakan PHP
 
 
 
Untuk mengonsumsi RESTful API yang telah dibuat, kita dapat menggunakan ekstensi cURL di PHP. Berikut adalah contoh bagaimana melakukan operasi **GET**, **POST**, **PUT**, dan **DELETE** menggunakan cURL.
 
 
 
### 5.1. Konfigurasi cURL
 
 
 
Buat file `api_client.php` dengan fungsi berikut untuk memanggil API:
 
 
 
 
 
```php
 
<?php
 
function callAPI($method, $url, $data = false) {
 
    $curl = curl_init();
 
 
 
    switch (strtoupper($method)) {
 
        case "POST":
 
            curl_setopt($curl, CURLOPT_POST, 1);
 
            if ($data)
 
                curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
 
            break;
 
        case "PUT":
 
            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
 
            if ($data)
 
                curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
 
            break;
 
        case "DELETE":
 
            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "DELETE");
 
            if ($data)
 
                curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
 
            break;
 
        default: // GET
 
            if ($data)
 
                $url = sprintf("%s?%s", $url, http_build_query($data));
 
    }
 
 
 
    // Opsi umum
 
    curl_setopt($curl, CURLOPT_URL, $url);
 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
 
    curl_setopt($curl, CURLOPT_HTTPHEADER, array(
 
        'Content-Type: application/json',
 
    ));
 
 
 
    $result
 

Latest revision as of 11:40, 7 April 2025

Tujuan Pembelajaran

  • Memahami konsep dasar REST API.
  • Membangun API sederhana dengan PHP (tanpa framework).
  • Mengonsumsi (mengakses) API menggunakan PHP dan tools seperti `curl`.
  • Menjalankan API di server lokal Ubuntu 24.04 (menggunakan Apache).

Persiapan Lingkungan

1. Install Apache, PHP, dan cURL

sudo apt update
sudo apt install apache2 php libapache2-mod-php php-curl

2. Buat Folder Project

sudo mkdir -p /var/www/html/simple-api
sudo chown -R $USER:$USER /var/www/html/simple-api
cd /var/www/html/simple-api


Bagian 1: Membuat API Sederhana

1.1 Struktur Direktori

simple-api/
├── api.php
└── data.json

1.2 Isi `data.json`

 [
     {"id": 1, "name": "Alice"},
     {"id": 2, "name": "Bob"},
     {"id": 3, "name": "Charlie"}
 ]

1.3 Isi `api.php`

 <?php
 header('Content-Type: application/json');
 
 $data = json_decode(file_get_contents('data.json'), true);
 
 if ($_SERVER['REQUEST_METHOD'] === 'GET') {
     if (isset($_GET['id'])) {
         $id = intval($_GET['id']);
         foreach ($data as $item) {
             if ($item['id'] === $id) {
                 echo json_encode($item);
                 exit;
             }
         }
         echo json_encode(["error" => "Data not found"]);
     } else {
         echo json_encode($data);
     }
 } else {
     echo json_encode(["error" => "Method not supported"]);
 }

1.4 Akses API via Browser


Bagian 2: Mengonsumsi API dengan PHP

2.1 File: `consume.php`

 <?php
 function getData($url) {
     $ch = curl_init();
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
     curl_setopt($ch, CURLOPT_URL, $url);
     $result = curl_exec($ch);
     curl_close($ch);
     return json_decode($result, true);
 }
 
 $apiUrl = "http://localhost/simple-api/api.php";
 $data = getData($apiUrl);
 
 echo "<h2>Daftar User</h2><ul>";
 foreach ($data as $user) {
     echo "<li>{$user['id']} - {$user['name']}</li>";
 }
 echo "</ul>";

2.2 Jalankan di browser


Bonus: Uji Coba dengan Terminal

curl http://localhost/simple-api/api.php
curl http://localhost/simple-api/api.php?id=2

Kesimpulan

  • Kamu telah berhasil membuat API sederhana menggunakan file JSON.
  • API ini hanya mendukung method `GET`.
  • Kamu juga telah belajar cara mengambil data API menggunakan PHP (`curl`).

Coba membuat versi POST, PUT, DELETE :) ...

Pranala Menarik