Contoh Show <?php $file = "test.txt"; if(is_writable($file)) { echo ("$file dapat ditulis"); } else { echo ("$file tidak dapat ditulis"); } ?> // Output : test.txt dapat ditulis Definisi dan PenggunaanFungsi Catatan: Hasil dari fungsi ini di-cache dan gunakan Fungsi Syntax
Nilai Parameter
Detail Teknis
Puji Syukur Penulis panjatkan kepada Tuhan Yang Maha Esa, atas berkat dan karunia-Nya, Modul Praktikum Pemrograman Web - I ini dapat diselesaikan dan sampai kepada para pengguna. Modul ini sangat singkat dan sederhana, hanya membahas masalah dasar-dasar pembuatan web yang meliputi HTML, PHP, Cascading Style Sheet (CSS), Javascript dan juga Database MySQL, yang sangat berhubungan erat dengan mata kuliah Permograman Web II di semester berikutnya. Penulis juga sangat menyadari akan kelemahan dan kekurangan sebagai manusia yang tak pernah luput dari kesilapan dan kekurangan pada penulisan dan pembuatan modul ini, untuk itu dengan berlapang dada penulis dangat mengharapkan saran-saran dan kritik yang sifatnya membangun dan demi kesempurnaan modul ini terlebih dahulu penulis ucapkan terimakasih. Disamping itu modul ini juga tidak akan pernah sampai kepada tangan pembaca tanpa bantuan dan dukungan dari berbagai pihak, oleh karena itu penulis mengucapkan dengan tulus terimakasih yang sebanyak-banyaknya bagi semua pihak. Semoga bantuan dan kerja sama yang diberikan kepada penulis selama ini semoga mendapatkan pahala dari Tuhan Yang Maha Pemurah dan Penyayang, Amin. Sebuah aplikasi web berkomunikasi dengan perangkat lunak client melalui HTTP. HTTP, sebagai protokol yang berbicara menggunakan request dan response menjadikan aplikasi web bergantung kepada siklus ini untuk menghasilkan dokumen yang ingin diakses oleh pengguna. Secara umum, aplikasi web yang akan kita kembangkan harus memiliki satu cara untuk membaca HTTP Request dan mengembalikan HTTP Response ke pengguna. Pada pengembangan web tradisional, kita umumnya menggunakan sebuah web server seperti Apache HTTPD atau nginx sebagai penyalur konten statis seperti HTML, CSS, Javascript, maupun gambar. Untuk menambahkan aplikasi web kita kemudian menggunakan penghubung antar web server dengan program yang dikenal dengan nama CGI (Common Gateway Interface). CGI diimplementasikan pada web server sebagai antarmuka penghubung antara web server dengan program yang akan menghasilkan konten secara dinamis. Program-program CGI biasanya dikembangkan dalam bentuk script, meskipun dapat saja dikembangkan dalam bahasa apapun. Contoh dari bahasa pemrograman dan program yang hidup di dalam CGI adalah PHP. Untuk melihat dengan lebih jelas cara kerja CGI, perhatikan gambar berikut: Cara Kerja CGI dan Web Server Yang dapat kita tarik dari gambar di atas:
Meskipun terdapat banyak pengembangan selanjutnya dari CGI, ilustrasi sederhana di atas merupakan konsep inti ketika awal pengembangan CGI. Umumnya aplikasi web dengan CGI memiliki kelemahan di mana menjalankan script CGI mengharuskan web server untuk membuat sebuah proses baru. Pembuatan proses baru biasanya akan menggunakan banyak waktu dan memori dibandingkan dengan eksekusi script, dan karena setiap pengguna yang terkoneksi akan mengakibatkan hal ini terhadap server performa aplikasi akan menjadi kurang baik. CGI sendiri menyediakan solusi untuk hal tersebut, misalnya FastCGI yang menjalankan aplikasi sebagai bagian dari web server. Bahasa lain juga menyediakan alternatif dari CGI, misalnya Java yang memiliki Servlet. Servlet pada Java merupakan sebuah program yang menambahkan fitur dari server secara langsung. Jadi pada pemrograman dengan Servlet, kita akan memiliki satu web server di dalam program kita, dan pada web server tersebut akan ditambahkan fitur-fitur spesifik aplikasi web kita. Pada pengembangan aplikasi web dalam NodeJS, pendekatan yang kita gunakan lebih dekat (meskipun tidak sama persis) dengan pendekatan Servlet yang digunakan Java. Untuk mengembangkan aplikasi web pada NodeJS kita akan:
Perbedaan utama antara NodeJS dengan Servlet adalah bahwa NodeJS memiliki pendekatan yang lebih low level, di mana kita harus mengaktifkan web server kita sendiri, dan melakukan penanganan URL, Request, dan Response secara manual. Begitupun, terdapat banyak framework yang telah dikembangkan di atas NodeJS yang membantu kita dalam menangani hal tersebut, misalnya ExpressJS.
Pada bagian ini, kita akan membahas pemanggilan web server standar NodeJS, serta bagaimana memproses HTTP Request dan membuat HTTP Response. Penanganan URL dan pemetaan URL ke fungsi akan kita bahas pada bab berikutnya. HTTP Server dengan NodeJS¶Pembuatan sebuah server HTTP dengan NodeJS sangat sederhana. Buat sebuah file dengan nama
Kita dapat menjalankan kode di atas dengan menggunakan perintah: dan ketika berkunjung ke halaman Implementasi Awal Web Server NodeJS Cukup sederhana bukan? Apa yang baru saja kita lakukan? Pada dua baris pertama:
kita melakukan persiapan awal. Variabel Kode Pada bagian berikutnya:
Kita memanggil fungsi
Tiga baris yang ada di dalam fungsi yang kita tuliskan pada intinya membangun HTTP Response secara dinamis. Pembahasan mengenai pembuatan HTTP Response akan kita bahas pada bagian berikutnya. Terakhir, kita kemudian menjalankan server dan mendengarkan port yang disimpan pada variabel
Untuk pengembangan selanjutnya, kita dapat membuat modul tersendiri untuk server, sehingga kedepannya kita dapat menggabungkan server dengan komponen lain yang pada akhirnya akan menghasilkan sebuah framework lengkap. Bagaimana kita dapat meningkatkan modularitas dari kode server ini? Untuk bagian ini, kita terlebih dahulu akan berfokus ke bagaimana membuat server dapat dipanggil oleh modul lain melalui Kita dapat memulai dengan memisahkan fungsi anonim yang dikirimkan ke
Kita kemudian dapat membuat sebuah fungsi baru yang betugas menghidupkan server kita:
Memasukkan fungsi
Kemudian jalankan Lalu masuk ke
Dengan pengetahuan ini, kita dapat menggunakan teknik-teknik perancangan kode umumnya untuk mengembangkan server kita lebih jauh lagi. Tetapi sebelum masuk ke pengembangan lebih dalam, kita akan melihat bagaimana kita dapat memproses request dan response terlebih dahulu. HTTP Request¶Pada bagian sebelumnya kita telah
melihat bagaimana sebuah HTTP Request dihasilkan dari
Ketiga property ini memiliki kegunaan masing-masing yang sangat dapat membantu kita dalam pengembangan aplikasi web. Akses dari masing-masing property dapat langsung dilakukan dari objek yang diberikan oleh
Jika kita menjalankan kode di atas dan mengunjungi halaman pada
Seperti yang kita lihat dari isi
Sebelum masuk lebih jauh, kita akan melihat terlebih dahulu tentang pertukaran data dalam HTTP - secara lebih spesifik bagaimana data dikirimkan dalam HTTP. Pembacaan Data dari HTTP Request¶Data dikirimkan dalam HTTP Request dalam dua cara, tergantung dari method yang dikirimkan:
Pada prakteknya terdapat satu cara lagi untuk mengirimkan data, yaitu melalui cookie, tetapi penggunaan cookie tidak akan terlalu efektif karena cookie dirancang untuk menyimpan data status pengguna. Sekarang mari kita lihat bagaimana cara untuk membaca data pada URL maupun entity body. Pembacaan Data pada URL¶Pembacaan data yang dikirimkan melalui URL biasanya dilakukan untuk request dengan method <scheme>://<user>:<password>@<host>:<port>/<path>?<query>#<fragment> Apa makna dari setiap bagian dari URL di atas? Mari lihat dari tabel di bawah.
Misalnya jika diterapkan pada browser: https://bert::8080/data/rahasia?id=scp-0682&access=O5#desc Bagian utama yang akan kita gunakan untuk membaca data pada method
Misalkan pada URL contoh di atas, terdapat dua buah data yang dikirimkan melalui URL, yaitu:
Untuk pembacaan nilai
Fungsi yang akan kita gunakan untuk membaca nilai
Seperti yang dapat dilihat pada keluaran objek diatas, property yang ingin kita akses adalah
Sehingga jika kita ingin melanjutkan kode di atas dengan mencoba langsung mengambil query kita dapat melakukan pemanggilan terhadap parameternya langsung:
Dengan menggunakan fungsi Pembacaan Data dalam Entity Body¶Beberapa method lain di luar
Dari kode di atas kita dapat melihat bagaimana mengambil data dari entity body cukup mudah. Untuk request seperti PUT /data/1234 HTTP/1.1 [berbagai header] <appointmentRequest> <patient id = "jsmith"/> </appointmentRequest> yang jika kita ambil datanya menggunakan metode di atas maka variabel Untuk request
Kedua format kode di atas dapat diproses dengan menggunakan beberapa modul yang sudah ada. Pembaca lebih disarankan menggunakan modul yang telah tersedia karena pembacaan format data sesuai dengan spesifikasi RFC merupakan hal yang cukup panjang untuk dilakukan dan dibahas pada tulisan ini. (Perlu dicatat bahwa kesulitan pembahasan terjadi karena panjangnya spesifikasi, bukan sulit atau kompleks). Untuk
Mari kita lihat bagaimana kita dapat menggunakan POST /data/mahasiswa HTTP/1.1 [berbagai header] nama=Budi+Hartono&semester=6&jurusan=Teknik+Informatika dapat kita proses dengan kode berikut:
akan memberikan kita keluaran sebuah objek javascript seperti berikut:
Konten yang dikirimkan dengan format POST /data/mahasiswa HTTP/1.1 [berbagai header] Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW ----WebKitFormBoundary7MA4YWxkTrZu0gW Content-Disposition: form-data; name="nama" Budi Hartono ----WebKitFormBoundary7MA4YWxkTrZu0gW Content-Disposition: form-data; name="semester" 6 ----WebKitFormBoundary7MA4YWxkTrZu0gW Content-Disposition: form-data; name="jurusan" Teknik Informatika ----WebKitFormBoundary7MA4YWxkTrZu0gW Karena format ini menggunakan penyimpanan yang cukup panjang (terutama jika melibatkan file), maka kita tidak dapat membaca data ini secara langsung. Kita dapat menggunakan berbagai pustaka yang sudah ada untuk melakukan
pembacaan data ini, misalnya node-multiparty. Untuk menggunakan dan kemudian dapat menggunakannya seperti berikut:
yang jika dijalankan akan menghasilkan:
Pembahasan mendetail tentang penggunaan Sampai di sini kita telah melihat bagaimana HTTP Request disimpan oleh NodeJS, serta bagaimana membaca data yang dikirimkan oleh HTTP Request. Sebelum melihat bagaimana membuat HTTP Request secara dinamis, kita akan mempelajari tentang HTTP Response terlebih dahulu pada bagian berikutnya. HTTP Response¶Di bagian sebelumnya kita telah melihat bagaimana membaca dan menangani HTTP Request dari server NodeJS. Sekarang kita akan melihat bagaimana membangun HTTP Response yang diberikan oleh server NodeJS. HTTP Response yang diberikan oleh server NodeJS merupakan objek bertipe Secara sederhana, untuk menuliskan data dengan
Pada sebuah kode server sederhana, penulisan respon akan dilakukan seperti berikut:
Sebagai tambahan untuk HTTP,
Penggunaan semua fungsi-fungsi yang dijelaskan di atas cukup
gamblang. Misalnya, untuk
Daftar dari HTTP Header sendiri dapat ditemukan pada berbagai sumber, misalnya: RFC 2616, Wikipedia, dan Lampiran C (masih dalam pengembangan). Perlu diingat juga bahwa HTTP Header harus selalu ditulis sebelum entity body dituliskan, karena
Misalnya, kita dapat menggunakan modul
Seperti yang dapat dilihat pada kode di atas, penulisan HTTP Response cukup gamblang dan sederhana. Selanjutnya, kita akan melihat pembuatan sebuah HTTP Client dengan NodeJS, yang akan memerlukan kebalikan dari server NodeJS, yaitu pembuatan HTTP Request secara dinamis dan pembacaan HTTP Response. HTTP Client¶Selain menyediakan fasilitas untuk membuat server HTTP lengkap dengan pembacaan HTTP Request dan pembuatan HTTP Response, NodeJS juga menyediakan fasilitas untuk membuat sebuah HTTP Client. Fitur-fitur yang diberikan untuk HTTP Client pada NodeJS berfokus pada pembuatan HTTP Request dan pembacaan HTTP Response, kebalikan dari yang dilakukan oleh HTTP Server. HTTP Client sendiri memiliki sangat banyak kegunaan, misalnya untuk mengambil data dari server lain untuk diproses lebih lanjut dari sisi server. Ketika mengembangkan aplikasi dari sisi client, kegunaan HTTP Client tentunya sudah tidak perlu dipertanyakan lagi. Aplikasi modern umumnya akan selalu berhubungan dengan server dalam bentuk apapun, dari HTTP sampai ke protokol buatan sendiri. Fungsi utama yang kita
gunakan untuk HTTP Client pada NodeJS yaitu
Objek yang dapat kita masukkan ke dalam
Catatan terakhir, fungsi Sekarang mari kita lihat contoh penggunaan fungsi
Kode di atas terlihat cukup sederhana dan gamblang. Satu-satunya hal yang perlu dicatat adalah bahwa pada akhir request, kita harus memanggil
Dari contoh kode di atas, kita dapat melihat bagaimana kita memanggil Untuk menangani error pada pengiriman request,
misalnya jika koneksi terputus atau terdapat pelanggaran protokol HTTP, kita dapat mendengarkan event
Fitur lain dari HTTP Client pada NodeJS yaitu fungsi yang membantu kita dalam membuat request
Penggunaan dari
Contoh di atas mengakhiri pembahasan kita mengenai HTTP Client dengan NodeJS. Penutup¶Sampai pada bagian ini kita telah melihat bagaimana NodeJS berinteraksi dengan HTTP, baik sebagai HTTP Server maupun sebagai HTTP Client. Kita belum dapat membangun aplikasi web yang terlalu kompleks dengan apa yang kita pelajari sejauh ini, tetapi kita telah dapat berkomunikasi dengan berbagai HTTP Client maupun Server secara singkat. Meskipun abstraksi yang digunakan belum terlalu mendalam, pada bagian selanjutnya, yaitu routing, kita akan mempelajari lebih lanjut tentang URL, pembangunan URL dinamis, dan abstraksi (framework) aplikasi web secara lebih lanjut. |