Tutorial PHP Web
JSON
Materi ini memiliki 1 buah lampiran. Namun Anda tidak dapat mengakses lampiran karena belum terdaftar di kursus ini. Klik disini untuk mendaftar.
Pada video sebelumnya kita menyimpan data object menggunakan fungsi serialize bawaan PHP. Pada video ini, kita akan membahas mengenai format lain yang bisa kita gunakan untuk menyimpan data, yaitu JSON atau JavaScript Object Notation.
JSON adalah format yang bisa kita gunakan untuk saling berbagi data. Nantinya kalau kita membuat web API, dimana kita membuka komunikasi dengan sistem diluar web kita, maka kita bisa menggunakan JSON sebagai format data yang kita kirim maupun kita terima.
Mengapa menggunakan JSON? Karena JSON mudah untuk dibaca dan ditulis oleh manusia. Selain itu JSON juga mudah untuk di-parsing oleh komputer. Oleh karena itu datanya menjadi gampang untuk digunakan oleh sistem lain, walaupun sistemnya dibuat menggunakan bahasa pemograman selain JavaScript. Ada banyak bahasa pemograman yang mendukung format data JSON, seperti C, C++, C#, Java, Python dan termasuk PHP.
Berikut di sebelah kiri adalah contoh kode PHP dari kelas Register yang kita buat pada video sebelumnya, untuk menyimpan data registrasi. Misalkan kita menyimpan data email ‘admin@gmail.com’ dengan password ‘rahasia’. Kita bisa dengan mudah mengubah format object PHP $register menjadi JSON, hanya dengan satu perintah json_encode. Kita mendapatkan data yang sama, namun dengan format JSON di sebelah kanan.
Data disimpan dalam bentuk object, sehingga menggunakan simbol kurung kurawal. Setelah itu kita bisa menemukan datanya dalam bentuk pasangan key value. Misalkan “email”: “admin@gmail.com”. Ini adalah format JSON.
Walaupun kita bisa dengan mudah menggunakan format JSON di bahasa pemograman PHP, namun ada beberapa keterbatasan yang perlu kita ingat. Yang pertama adalah JSON hanya melakukan encode terhadap property yang bersifat public. Sedangkan property yang bersifat private dan protected tidak ikut di-encode Yang kedua, setelah data JSON kita decode, maka data berubah ke kelas stdClass. Bukan kembali ke kelas awal seperti unserialize.
Kita coba praktek. Kita buka kembali source code dari video sebelumnya. Kita buka file form.php. Kita lihat ke bagian untuk menyimpan data ke file, yaitu function file_put_contents. Disini kita masih menggunakan format data dari fungsi serialize bawaan PHP. Kita mau menggantinya menjadi JSON. Kita copy paste dahulu kode baris ini ya. Kita komentari kode lama. Kemudian di kode baru, kita ganti serialize menjadi json_encode.
Selanjutnya kita buka file display.php. Kita copy paste juga kode untuk membaca data dari file. Kita komentari kode lama. Kemudian pada kode baru, kita ganti unserialize menjadi json_decode.
Kita coba jalankan mulai dari form.php di browser. Kita masukkan email admin@gmail.com dan password rahasia123. Setelah kita mengirim data, maka kita di-redirect ke file display.php dimana kita menampilkan kembali data yang diisi pada form barusan. Email dan password-nya sudah cocok ya.
Sekarang kita kembali ke Visual Studio Code. Kita buka file register.dat. Sekarang kita mendapatkan data yang menggunakan format JSON. Kalau dibandingkan dengan data sebelumnya, format yang sekarang jauh lebih sederhana ya.
Kita kembali ke display.php. Perhatikan pada saat kita memanggil json_decode. Variable $register ini bisa kembali menjadi object yang memiliki property email dan password. Perhatikan pada bagian HTML, kita menampilkan data dengan cara menggunakan property $register->email, dan property $register->password.
Untuk melihat lebih detail, kita coba var_dump nilai dari variable $register ya. Setelah itu kita panggil exit agar kode selanjutnya tidak dijalankan lagi. Kita coba jalankan menggunakan terminal. Kita panggil php display.php. Perhatikan hasilnya variable $register menjadi sebuah object yang memiliki property email dan password. Namun perhatikan bahwa object $register dibuat menggunakan stdClass, bukan dari kelas Register yang digunakan untuk encode.
Nah, disini ada beberapa kelemahan dari format JSON. Kelemahan pertama adalah JSON hanya menyimpan nilai dari property yang bersifat public. Artinya property yang bersifat private dan protected tidak turut di-encode. Kelemahan kedua, pada saat kita melakukan decode, maka object dibuat dari kelas stdClass. Bukan dari kelas asalnya. Apabila kelas asalnya memiliki method, maka method tersebut sudah tidak bisa diakses.
Untuk melihat kelamahannya, kita akan melakukan modifikasi sedikit pada kelas Register ya. Kita buka kodenya. Pertama kita tambahkan dahulu private property dengan tipe data string, namanya $secret dengan nilai default ‘Secret Key’.
Kita simpan. Kita hapus file register.dat. Kemudian kita jalankan kembali form.php dari browser. Kita isi email admin@gmail.com dan password rahasia123. Perhatikan pada display.php. Object yang dibuat hanya memiliki property email dan password saja. Tidak memiliki property secret.
Kita ubah file form.php dan display.php. Misalkan kita kembali menggunakan serialize. Kita hapus file register.dat. Dan kita jalankan ulang form.php dari browser. Kita isi email admin@gmail.com dan password rahasia123. Kita lihat hasilnya. Kita mendapatkan object yang dibuat dari kelas Register. Dan object memiliki 3 buah property yaitu email, password dan secret. Kalau kita buka file register.dat. Format datanya lebih rumit dari JSON ya. Karena disini ada banyak angka yang menunjukkan jumlah huruf pada data. Namun disini kita bisa melihat bahwa property secret tetap disimpan sebagai data.
Kita lanjutkan ke kelemahan kedua ya. Sebagai contoh kita buka lagi kelas Register. Kita tambahkan satu buah method sayHello tanpa parameter dan mengembalikan void. Di dalamnya kita echo saja “Hello World\n”.
Kita kembali ke file display.php. Sebelum exit, kita panggil method $register->sayHello(). Kita jalankan saja melalui terminal ya. Disini kita bisa melihat bahwa method sayHello dijalankan dan menghasilkan kalimat Hello World. Method ini bisa dipanggil karena object register dibuat dari kelas Register.
Kita ganti kembali format data dari serialize menjadi json. Kita jalankan kembali form.php dan masukkan data email admin@gmail.com dan password rahasia123. Nah, pada file display.php kita mendapatkan fatal error dimana PHP tidak bisa memanggil method sayHello. Atau kalau mau lebih jelas, kita jalankan lagi melalui terminal ya. Disini kelihatan bahwa object register dibuat dari kelas stdClass. Sedangkan kelas stdClass tidak memiliki method sayHello, sehingga pemanggilan method tersebut menyebabkan fatal error. Jadi ini adalah kelemahan dari format data JSON.
Pertanyaan berikutnya, kapan kita menggunakan Serialize dan kapan kita menggunakan JSON? Kita bisa menggunakan Serialize untuk komunikasi data internal, selagi di dalam sistem kita sendiri. Yang paling penting disini adalah mesti kita sendiri yang melakukan serialize datanya. Hal ini disebabkan karena fungsi unserialize sangat rentan terhadap error apabila kita menggunakan data yang tidak sesuai.
Sedangkan JSON bisa digunakan untuk komunikasi dengan sistem luar, sebagai contoh apabila kita menyediakan API yang boleh diakses oleh pengguna diluar sistem kita. Dalam hal ini, sering kali data yang menggunakan JSON-nya berasal dari sistem luar. Disini kita lebih cocok menggunakan JSON karena fungsi json_decode lebih bisa bertoleransi terhadap error pada data. Tentunya setelah melakukan decode, kita harus melakukan validasi lagi terhadap data yang diberikan oleh pengguna sebelum kita menggunakan data tersebut.
Dengan menggunakan fasilitas tanya jawab, maka Anda bisa bertanya dan akan dijawab langsung oleh instruktur kursus.
Anda belum terdaftar pada kursus ini sehingga tidak bisa mengajukan pertanyaan.