Menggunakan Restful PUT, PATCH dan DELETE di PHP

Menghilangkan Limitasi dalam development API Restful PHP

Posted by Rizal Ardhi Rahmadani on Jun 29, 2020

Mengembangkan arsitektur web API Restful di PHP memang memiliki limitasi yang mana metode PUT dan PATCH tidak dapat menerima data yang dikirimkan dalam body request-nya. Walaupun secara rute, metode PUT dan PATCH dapat digunakan untuk membedakan alur request. Namun data yang tersemat dapat dipastikan tidak terkirim, sehingga data-data seperti id, field yang akan diganti, dan semacamnya pun tidak terbaca. Lalu bagaimana solusinya? 

Photo by Ilya Pavlov on Unsplash

Limitasi ini dapat diatasi dengan menggunakan ekstensi PECL. Terdapat suatu ekstensi bernama apfd yang berfungsi melakukan parsing multipart/form-data, x-www-urlencoded maupun json_post tanpa membedakan jenis metodenya. Kita tahu bahwa selama ini PHP hanya dapat membaca form dari metode GET dan POST. Dengan adanya ekstensi ini, maka data yang dikirim melalui metode PUT dan PATCH pun tetap akan terbaca.

Library apfd : https://pecl.php.net/package/apfd

Environment Ubuntu Server/Linux Server

Instalasi apfd dapat dilakukan dengan sebelumnya mengaktifkan ekstensi pear dalam PHP. Untuk environment ubuntu atau linux server dapat melakukan apt-get install php-pear yang mana secara otomatis melakukan pemasangan ekstensi pear dalam php yang digunakan. 

sudo apt-get install php-pear 
sudo apt-get install php-xml 
sudo apt-get install php-dev

Jika dependency telah terpenuhi, selanjutnya memasang ekstensi apfd. Terdapat dua langkah untuk memasangnya.

Pertama, dengan menggunakan pecl untuk compile dan build apfd.so:

pecl install apfd


undefined

Kedua, dengan menginstall apfd.so ke dalam php.ini menggunakan editor kesukaan Anda:

extension=apfd.so

Perlu dipahami bahwa php.ini terdapat di beberapa tempat seperti apache2, fpm dan cli. Jika Anda menggunakan PHP dalam terminal console / SSH, berarti Anda perlu melakukan edit php.ini yang ada pada folder cli. Sedangkan apache2 dan FPM umumnya digunakan untuk menjalankan web service pada server tersebut. Silahkan cek terlebih dahulu PHP versi berapa yang Anda gunakan, dan PHP pada platform apa yang akan dipasang (cli, apache2 atau fpm), Misalnya, jika environment server memiliki PHP versi 7.4 dengan fitur cli, apache2 dan fpm aktif maka php.ini ada dibeberapa tempat ini: 

/etc/php/7.4/apache2/php.ini 
/etc/php/7.4/cli/php.ini 
/etc/php/7.4/fpm/php.ini

Perhatikan polanya yaitu /etc/php/versi/platform/php.ini . Jika sudah mengetahui target php.ini yang akan dipasang apfd.so kemudian edit saja dengan editor misalnya nano seperti berikut:

sudo nano /etc/php/7.4/apache2/php.ini

cari bagian extension

tambahkan extension=apfd.so

undefined

Simpan kemudian restart apache2 / fpm service. Jika Anda menggunakan cli, Anda hanya perlu menjalankan ulang script yang Anda gunakan.

systemctl restart apache2
systemctl restart php7.4-fpm

Sesuaikan versi php Anda jika ingin merestart FPM.

Pengujian

1. Melihat PHP info

Buatlah suatu file php yang menjalankan perintah: 

echo phpinfo();

Jika instalasi berhasil, akan tampil hasil berikut:


undefined

Lihat bagian Configuration dimana apfd seharusnya tampil disana.

2. Mencobanya dengan Postman

Sebelum itu siapkan terlebih dahulu script untuk melakukan test. Tujuan script ini untuk mengetahui jenis request method dan data yang dikirimkan (baik field key-value dan field yang berupa file attactment).

<?php
header("Content-Type: application/json");
$data = [
    'method' => $_SERVER['REQUEST_METHOD'],
    'data' => $_POST,
    'files' => $_FILES
];
echo json_encode($data, JSON_PRETTY_PRINT);

Kemudian masukkan body request seperti berikut:

undefined


Seharusnya akan muncul hasilnya seperti ini:

undefined


Kesimpulan

Dalam arsitektur Restful API memang terdapat banyak metode yang digunakan untuk routing resource. Tidak hanya GET, POST saja, tapi ada PUT, PATCH, DELETE dan sebagainya. PHP secara default / builtin hanya support dengan metode GET dan POST. Anda tidak perlu melakukan instalasi ekstensi ini jika Anda hanya perlu menggunakan 2 jenis metode GET dan POST. Tetapi alangkah lebih baiknya jika melakukan pengembangan Restful API di PHP untuk memasang ekstensi apfd ini. Agar terciptanya kemudahan dan pengalaman yang lebih baik dalam development Restful API di PHP. Apalagi jika Anda bekerja dalam team dan menggunakan platform yang bervariasi. Tentunya, platform frontend seperti javascript support penggunaan semua metode Restful, sehingga mengharuskan backend developer terutama berbasis PHP untuk mengimbanginya.

Semoga Bermanfaat