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
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
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:
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:
Seharusnya akan muncul hasilnya seperti ini:
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