Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Tools

Demystifying REST

by
Read Time:14 minsLanguages:

Indonesian (Bahasa Indonesia) translation by Puuma (you can also view the original English article)

Tidak, ini bukan artikel yang mendorong Anda untuk tidur lebih banyak! Namun, jika itu adalah kecenderungan pertama Anda, maka teks berikut ini dibuat khusus untuk Anda! Itu adalah sebuah kebenaran yang tidak menguntungkan, bahwa prinsip REST sangat kompleks. Seluruh buku telah ditulis tentang hal ini. Saya tidak akan terlalu sombong untuk berasumsi bahwa saya dapat menggabungkan topik rumit seperti itu menjadi beberapa ribu kata.

Yang mengatakan, REST, seperti beberapa teknologi lain, seperti Git dan CSS, adalah salah satu di mana sedikit pemahaman akan membawa Anda jauh. Untuk bergerak secepat mungkin, artikel ini akan kurang fokus pada sejarah dan filosofi di balik REST (serta bagaimana hal itu berbeda dari teknologi lain, seperti SOAP), dan lebih banyak tentang aspek praktis. Bagaimana Anda bisa menerapkan arsitektur REST hari ini?


Apa itu REST?

Tahan sebentar, partner. Sebelum kita dapat melompat ke beberapa contoh kode, pertama-tama kita harus membahas apa yang REST, atau merujuk pada Representational State Transfer.

REST, didefinisikan lebih dari satu dekade yang lalu oleh Roy Fielding dalam disertasi doktornya, menyediakan cara sederhana untuk mengatur interaksi antara sistem, paling sering melalui HTTP dan browser web. Kalau dipikir-pikir, kohesi ini masuk akal: Roy juga salah satu penulis utama HTTP!

Mari kita bahas URI sebentar. URI pada dasarnya merupakan pengidentifikasi untuk sumber. Perhatikan contoh berikut:

Kita bisa menyebutnya sebagai sumber daya. Ketika rute ini dipicu, mengikuti pola REST, semua teman harus diambil, mungkin dari database, dan disajikan.

Tapi, bagaimana mungkin kita menetapkan permintaan hanya untuk satu teman? Bagaimana tentang:

Dapat dibaca, bukan? Itu salah satu komponen kunci untuk arsitektur RESTful. Hal ini memungkinkan untuk struktur URI, yang sama-sama dapat dibaca oleh manusia dan mesin.

Pikirkan sumber sebagai kata benda jamak. Kontak, status, pengguna, foto - semua ini akan menjadi pilihan sempurna.

Sejauh ini, kita memiliki kait untuk mengidentifikasi koleksi, serta elemen tunggal dalam koleksi itu:

Bahkan, Anda akan merasa bahwa dua segmen ini merupakan semua yang seharusnya Anda butuhkan! Kita  kemudian dapat memanfaatkan kekuatan HTTP untuk menunjuk bagaimana server harus menanggapi URI ini. Biar saya jelaskan:

Setiap permintaan HTTP menentukan metode, atau kata kerja, di dalam header. Anda mungkin akrab dengan beberapa di antaranya, seperti GET dan POST. Mungkin contohnya ada dalam urutan. Buka Google Chrome, dan jelajahi ke https://net.tutsplus.com. Selanjutnya, buka Alat Pengembang Chrome (melalui klik kanan), dan lihat tab Jaringan. Anda mungkin perlu merefresh halaman untuk melihat berbagai aset yang telah diambil. Pilih item pertama dalam daftar, dan lihat header.

"developer tools Google Chrome dapat digunakan untuk, antara lain, memeriksa header untuk permintaan yang diberikan."

Tunggu sebentar; meskipun kita tidak menentukannya, metode permintaan, GET, otomatis disetel! Dari ini, kita dapat menyimpulkan (dear Watson) bahwa GET adalah kata kerja default, ketika melihat halaman web.

Untuk setiap URI yang diberikan, kita dapat mereferensikan empat metode permintaan yang berbeda: GET, POST, PUT, dan DELETE.

Pada dasarnya, kata kerja HTTP ini menginstruksikan server apa yang harus dilakukan dengan data yang diidentifikasi oleh URI. Masih bingung? Pasti! Cara mudah untuk menguraikan kata kerja ini adalah dengan membandingkannya dengan akronim CRUD umum, atau Create-Read-Update-Delete.

Kita telah menetapkan bahwa GET adalah metode permintaan default, tetapi Anda juga pasti akrab dengan POST. Pernahkah Anda membuat formulir HTML yang, ketika diserahkan, POST data ke server Anda? Nah, ketika formulir itu dikirim, metode permintaan yang digunakan adalah POST, bukan GET. Dengan demikian, untuk, katakanlah, tambahkan status baru ke tabel tweets dalam database Anda, formulir harus POST ke /tweets, daripada sesuatu di sepanjang baris /tweets/addNewTweet.php.

Bahkan, dead-ringer untuk aplikasi non-RESTful adalah mencari kata kerja di URI. Metode permintaan HTTP harus menentukan bagaimana server harus berinteraksi dengan URI, bukan kumpulan file PHP yang tidak berarti!

Semua hal berikut ini menunjukkan URI yang tidak RESTful (dan dirancang buruk).

Untuk menyalurkan diri saya yang lebih muda, huek! Jangan lakukan ini. Namun, ini menimbulkan pertanyaan: apa yang akan menjadi URI yang benar untuk menyajikan formulir kepada pengguna, untuk tujuan menambahkan atau mengedit sumber?

Dalam situasi ini, masuk akal untuk menambahkan dua URI lagi.

Jalur pertama, /friends/new, harus menyajikan formulir kepada pengguna untuk menambahkan teman baru. Setelah pengiriman formulir, permintaan POST harus digunakan, karena kita menambahkan teman baru.

Untuk yang kedua, /friends/joe/edit, formulir ini harus digunakan untuk mengedit catatan yang ada dalam database kami. Saat memperbarui sumber daya, permintaan PUT sesuai.

Ingin tahu bagaimana membuat permintaan PUT dari bentuk HTML? Tetap disini.


Kata Kerja

Sebelum kita melangkah maju dengan beberapa contoh kode konkret, mari kita memantapkan apa yang diwakili oleh masing-masing kata kerja ini.

GET

Seperti yang disebutkan sebelumnya, GET adalah metode permintaan HTTP yang paling kita kenal: kata kerja default. Satu peringatan, atau praktik terbaik, ketika menyangkut permintaan GET, adalah bahwa mereka harus selalu diperlakukan sebagai aman dan idempoten. Dengan kata lain, permintaan GET harus "hanya-baca".

Penting untuk dicatat bahwa, sebagai insinyur, Anda bebas melakukan apa pun yang Anda inginkan, ketika rute ini dipicu. Tidak ada yang melarang Anda untuk memodifikasi data di server, ketika permintaan GET dipicu. Itu hanya praktik terbaik untuk tidak melakukannya.

Metode yang aman mengacu pada metode yang tidak akan pernah mengubah sumber daya. Istilah, idempoten, mengacu pada metode yang akan mencapai hasil yang sama, terlepas dari berapa kali diminta. GET, PUT, dan DELETE jenis permintaan adalah idempoten - yaitu, jika Anda mengikuti aturan.

POST

Metode permintaan kedua yang mungkin Anda kenal adalah POST. Hari-hari ini, jenis ini paling sering digunakan untuk menentukan kapan data baru harus ditambahkan ke sumber daya. Misalnya, ketika menambahkan teman baru, metode POST akan menjadi pilihan yang tepat.

PUT

Secara tradisional, permintaan PUT harus digunakan, ketika Anda perlu membuat atau memperbarui sumber daya. Namun, mungkin hasil dari konvensi Ruby on Rails, di sebagian besar aplikasi web modern, PUT digunakan secara eksklusif untuk memperbarui sumber daya.

Mari kita bayangkan bahwa kita perlu memperbarui usia teman kita, Joe. Setelah memperbarui informasinya, melalui formulir, metode permintaan yang benar adalah, PUT.

DELETE

Seperti yang Anda duga, DELETE harus digunakan, ketika Anda perlu menghapus sumber daya yang diidentifikasi oleh URI tertentu.

Jika kami tidak lagi berteman dengan Susan, mengikuti prinsip REST, dia dapat dihancurkan, melalui permintaan DELETE.

Setelah dijalankan, semua data yang terkait dengan Susan harus dihapus dari database.


Implementasi

Semua teori ini luar biasa, tetapi, pada akhirnya, tidak ada gunanya, jika kiita tidak memahami cara menerapkan arsitektur ini ke proyek. Ada beberapa cara. Di bagian berikut, kita akan menggunakan kerangka kerja PHP Slim yang populer untuk mengatur perutean yang diperlukan, namun, Anda pasti akan menemukan bahwa sebagian besar kerangka kerja saat ini menyertakan beberapa bentuk dari integrasi RESTful, termasuk Ruby on Rails dan Laravel.

Untuk menggunakan Slim, langkah pertama adalah menginstalnya melalui Composer.

“Komposer adalah alat untuk manajemen ketergantungan dalam PHP. Hal ini memungkinkan Anda untuk menyatakan pustaka dependen yang dibutuhkan proyek Anda dan itu akan menginstalnya dalam proyek Anda untuk Anda.

Tunggu, Anda tidak akrab dengan Composer? Hentikan apa yang Anda lakukan sekarang dan rencanakan. Komposer memungkinkan kita untuk memanfaatkan komunitas PHP, dengan menentukan dan menginstal paket yang dibutuhkan oleh aplikasi. Tidak ada lagi menciptakan kembali roda!

Memasang Komposer secara global hanya membutuhkan dua perintah cepat.

Itu dia! Anda sekarang memiliki akses ke perintah composer.

Langkah selanjutnya adalah menentukan Slim sebagai paket yang diperlukan untuk aplikasi Anda. Ini dapat dilakukan, melalui composer.json file di dalam akar proyek Anda.

Dengan persyaratan ini, kita hanya perlu menjalankan composer install untuk mengunduh dependensi yang diperlukan. Mudah!

Berkat beberapa baris kode - dan komunitas PHP - kita sekarang memiliki cara yang elegan untuk mendaftarkan rute. Berikut contoh sederhana, yang dapat Anda tempatkan dalam index.php.

Ingat: semua fungsi ini gratis!

“Slim adalah framework mikro PHP yang membantu Anda dengan cepat menulis aplikasi web dan API yang sederhana namun kuat.

Mari sekarang siapkan rute sumber daya yang diperlukan. Kita akan memilih pernyataan echo sederhana untuk menggambarkan jenis tindakan apa yang harus dilakukan dalam aplikasi dunia nyata.

Saat menggunakan Slim, kita dapat menentukan metode permintaan yang ingin ditanggapi, menggunakan $app->VERB. Karena itu, untuk delete teman, Joe, kita akan mendengarkan permintaan penghapusan ke /friends/joe, seperti:


Rute Pengujian

Jika Anda menyukai saya, pemikiran Anda berikutnya mungkin berkaitan dengan cara Anda menguji metode PUT dan DELETE. Seperti yang Anda ketahui, sebagian besar browser hanya memberikan dukungan untuk GET dan POST. Memanfaatkan dua metode permintaan lainnya membutuhkan sedikit tipuan, yang akan ditinjau segera.

Sampai saat itu, cara yang paling mudah digunakan untuk membuat permintaan khusus adalah melalui ekstensi Google Chrome, yang disebut Advanced Rest Client. Setelah terinstal, Anda dapat dengan mudah menentukan URI, serta metode permintaan yang diinginkan.

“Ekstensi REST Klien Lanjutan menyediakan mekanisme yang mudah untuk menguji URI.

cURL

Jika Anda merasa nyaman di baris perintah, sebaiknya Anda menggunakan kekuatan cURL untuk menguji rute ini.

tanda X memungkinkan Anda menentukan metode permintaan yang harus digunakan. Harap perhatikan bahwa, di cuplikan sebelumnya, kita sedang eksplisit; tanda X tidak diperlukan untuk permintaan GET, karena ini adalah default.

Berikut contoh untuk menguji beberapa rute. Perlu diingat bahwa kami menggunakan pernyataan echo sederhana untuk menggambarkan tindakan yang harus dilakukan.

Memodifikasi data di server pasti akan membutuhkan data baru (kemungkinan diperoleh dari formulir). Saat menggunakan cURL, pasangan kunci-nilai dapat ditentukan, menggunakan tanda -d, seperti:

Perintah ini dapat dibagi menjadi tiga bagian:

  1. Apa itu URI?
  2. Metode permintaan apa yang harus digunakan?
  3. Data apa yang harus diteruskan ke server?

Dengan menggunakan bahasa pilihan sisi server Anda (dalam kasus kita, PHP), Anda dapat mengambil data POST ini dengan cara yang sama seperti biasanya:

Dukungan Browser

Oke, kita memahami cara menentukan metode permintaan dari baris perintah, tetapi bagaimana melakukan hal yang sama dari formulir HTML? Sayangnya, kita tidak dapat mengandalkan:

Crop browser kita saat ini tidak menyediakan dukungan asli untuk jenis permintaan ini. Solusi yang paling umum adalah menerapkan sedikit tipuan, melalui input tersembunyi. Menggunakan kerangka kerja Slim, inilah cara kita memperbarui teman.

Perhatikan bahwa, secara teknis, metode permintaan masih diatur ke POST. Namun, di balik layar, Slim akan membaca nilai masukan yang disembunyikan, dan melanjutkan sesuai, tergantung pada kata kerja yang ditentukan.

Anda pasti akan menemukan bahwa sebagian besar kerangka kerja mengikuti pola yang sama untuk menentukan jenis permintaan.

Di bagian ini, kita meninjau tetapi satu implementasi kerangka kerja dari perutean sumber daya. Namun, seperti yang Anda temukan, hal yang sama mungkin terjadi di sebagian besar kerangka kerja hari ini. Misalnya, jika Anda seorang pengrajin Laravel, maka Anda mungkin menggunakan sintaks berikut (seperti versi 4):

Metode sumber daya yang nyaman ini menetapkan bahwa kami ingin menghasilkan rute yang diperlukan untuk sumber friends, dan membuat FriendsController bertanggung jawab untuk menangani logika untuk masing-masing rute ini.


Implementasi Manual

Jika Anda ingin memilih keluar dari kerangka kerja, Anda masih dapat menerapkan fungsi ini sendiri. Sayangnya, menulis sistem perutean yang diperlukan dari awal adalah di luar cakupan tutorial ini, namun, inilah beberapa kiat untuk memulainya.

Pertama, pertanyaan yang paling penting: bagaimana kita menentukan kata kerja terkait untuk permintaan tertentu? Jika bekerja sama, buat file PHP baru, dan tambahkan:

Jika Anda menjalankan halaman ini di browser, hasilnya harus GET. Luar biasa! Sekarang, kita memiliki sarana yang diperlukan untuk mendeteksi metode permintaan, dan melanjutkan, sesuai kebutuhan.

Cuplikan berikut ini sangat sederhana, dan akan membutuhkan struktur yang lebih baik untuk proyek Anda, tetapi dapat digunakan sebagai titik awal.


Pengujian

Ada berbagai paket, yang membuat proses penulisan tes integrasi sesederhana mungkin. Namun, mari kita tetap sederhana dan gunakan pustaka cURL bawaan (libcurl) PHP untuk menguji beberapa rute ini.

Langkah pertama adalah menginisialisasi cURL, dan menentukan URI yang diinginkan. Dalam kasus, kita akan terus menguji sumber friends.

Selanjutnya, kecuali kita menguji metode permintaan GET default, kita perlu menentukan jenis permintaan.

Secara default, output ini akan segera di-echo. Untuk mengembalikan output ke variabel, daripada menampilkannya secara langsung, kita dapat menggunakan pengaturan CURLOPT_RETURNTRANSFER.

Itu harus melakukannya! Kita hanya perlu mengeksekusi permintaan, dan mengambil hasilnya.

PHPUnit

Mari tambahkan ini ke tes PHPUnit - lagi, membuatnya relatif sederhana, agar mudah dibaca. Kita hanya akan memastikan bahwa setiap rute mengembalikan 200 status kode yang benar, menandakan bahwa permintaan telah berhasil diselesaikan. Untuk mengeringkan, kita akan mengaburkan fungsi cURL ke metodenya sendiri, request().

Dengan asumsi bahwa Anda telah menginstal PHPUnit, jalankan phpunit friendsTest.php. Jika berhasil, Anda harus melihat hijau! Jangan ragu untuk terlibat dalam tarian kemenangan pribadi.

Untuk mengambil langkah selangkah lebih jauh, masuk akal untuk mengabstraksikan metode request itu ke kelas dasar yang dapat diperluas oleh pengujian Anda. Atau, lebih baik lagi, biarkan alat pihak ketiga yang sangat teruji (dan fungsional) menangani kerja keras. Anda mungkin mempertimbangkan Goutte, yang dapat diinstal melalui Composer.

Setelah ter-instal (composer install), kita dapat mengabaikan penerapan cURL manual dari sebelumnya, dan alih-alih memanfaatkan API bersih Goutte, seperti yang ditunjukkan di bawah ini:

Anda tidak akan menjadi orang pertama yang menganggap tes semacam itu terlalu berlebihan; namun, saya jamin itu, segera setelah salah satu dari pengujian ini gagal menyelamatkan Anda dari kesalahan konyol, Anda akan langsung mengenali kegunaannya.


Pembelajaran Lebih Lanjut

Untuk melanjutkan pendidikan Anda, panduan terbaik untuk belajar REST datang dari orang-orang di Apigee. Presentasi mereka, "Teach a Dog to Rest," mengumpulkan banyak pengetahuan menjadi hanya dua puluh menit. Ini diperlukan untuk melihat semua pemula.

“Apigee menawarkan salah satu perkenalan yang paling ramah pengguna untuk REST di web.

Terima kasih sudah membaca!

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.