Menurut Roy Fielding (salah satu penulis utama spesifikasi HTTP) dalam tesis seminalnya, Styles Arsitektur ketika membahas REST , ia menyebutkan:
[E] karena permintaan dari klien ke server harus berisi semua informasi yang diperlukan untuk memahami permintaan tersebut, dan tidak dapat memanfaatkan konteks yang tersimpan di server.
Dengan "konteks tersimpan", ia merujuk ke status aplikasi, misalnya, apa nomor halaman untuk halaman berikutnya vs. status sumber daya, mis. Penyimpanan data, gambar, dll. - yang bisa dibilang merupakan keseluruhan poin dari REST.
Apakah adil untuk mengatakan bahwa sebagian besar upaya pada istirahat murni (dengan ini didefinisikan sebagai implementasi yang sesuai dengan tesis di atas) harus gagal karena ketergantungan mereka pada penyimpanan data sesi di server (persisten atau sebaliknya)?
Konsep sesi adalah umum - khususnya untuk pengembang Web - tetapi apakah itu tenang menurut definisi di atas?
Jawaban:
Saya akan mengatakan ya, keadaan sesi tidak membuat aplikasi TENANG non-TENANG. Contoh sepele, saudara perempuan saya berlangganan Wall Street Journal. Secara teratur dia akan membaca sesuatu di balik paywall dan memutuskan untuk mengirim tautan (melalui klien emailnya sendiri, bukan melalui WSJ) ke teman yang tidak memiliki akun WSJ. Klik, kirim, gagal. Jelas pengalaman saudara perempuan saya di URL itu berbeda dengan pengalaman temannya.
Terkait, tetapi tidak sepenuhnya pada-topik: Saya pada tahap desain awal aplikasi yang dirancang untuk mendukung upaya penelitian yang signifikan di internet (disebut pencarian (pikirkan: bookmark pada steroid dan LSD)). Pemilik pencarian ingin berbagi pandangan tertentu tentang datanya dengan orang lain, tetapi pandangan ini memerlukan kombinasi status UI (mis. Visualisasi data apa yang ditampilkan di panel mana) bersama dengan izin yang sesuai untuk mengakses UI dan data ditampilkan. Ada banyak kondisi tersimpan yang diperlukan bagi penerima untuk mendapatkan tampilan yang diinginkan.
Solusi saya saat ini adalah untuk menyimpan semua UI / ACL / info apapun yang diperlukan untuk pandangan dalam sebuah objek yang terpisah dan mengembalikan URL (mungkin UUID) untuk itu objek. Saya percaya bahwa mengakses objek tampilan dapat dianggap tenang dalam arti bahwa setiap orang yang memilikinya mendapatkan info / pengalaman yang sama.
sumber
Mereka pasti melakukannya! Saat Anda menerapkan REST, tidak boleh ada sesi sisi server, jika tidak, Anda memiliki solusi RPC / REST hibrid.
Klien harus mengirim ke layanan RESTful semua konteks yang diperlukan untuk melayani permintaan, termasuk informasi yang diperlukan untuk mengotentikasi klien, setiap kali permintaan baru dibuat. Server bebas untuk menyimpan informasi untuk membuat pelayanan permintaan berikutnya lebih cepat, tetapi informasi yang di-cache tidak boleh berjumlah sesi sisi server. Dengan kata lain, permintaan itu sendiri harus mengandung informasi yang cukup untuk diproses bahkan dalam keadaan tidak ada cache.
sumber
Mungkin tergantung pada apa yang Anda maksud dengan "data sesi". Apakah itu istilah yang tepat?
Komunikasi yang aman antara dua pihak sering melibatkan server untuk menghasilkan (dan menyimpan) "token akses" terbatas waktu yang harus disediakan klien dengan setiap permintaan sebagai cara otorisasi. Token akses ini sudah saya sebut "data sesi" - disimpan di sisi server, terbatas waktu dan terkait dengan satu klien (biasanya izinnya).
Saya akan sangat terkejut jika operasi semacam ini dilabeli sebagai non-TENANG. OAuth adalah contohnya.
Saya bukan spesialis dan saya tidak terlalu percaya diri di sini; Saya hanya berbagi wawasan saya dengan harapan mereka terbukti bermanfaat.
sumber
Poin terpenting dari REST adalah bahwa URI ke ressource selalu menunjuk ke ressource yang sama. Jadi pengguna dapat membagikan referensi ke sumber daya ini dan semua orang melihat hal yang sama. Ini disebut Representational State Transfer (REST). Jika server terus menyatakan dan memberikan sumber daya yang berbeda untuk URI yang sama, saya akan mengatakan ini bukan SISA murni lagi.
sumber
Sesi pada dasarnya digunakan untuk menambahkan status ke aplikasi stateless dan tenang. Jadi secara formal, ini membuat aplikasi RESTful Anda stateful, namun memiliki status server keep membuat hidup Anda sedikit lebih mudah, karena Anda tidak harus meneruskan semua data bolak-balik pada setiap permintaan / tanggapan.
Sesi, dan lebih umum menyatakan, memungkinkan Anda menghindari ini, dan ini memiliki beberapa manfaat positif dalam kinerja (lebih sedikit transfer data) dan keamanan (lebih sedikit data yang tersedia untuk diubah).
Jadi, meskipun secara resmi melanggar bagian dari definisi REST, itu sangat berguna sehingga jarang melihat aplikasi RESTful yang tidak menggunakan status melalui sesi.
sumber
Apa yang dimaksud Fielding dengan pernyataan itu adalah bahwa server aplikasi hosting REST API tidak mengaitkan keadaan sekitar dengan permintaan oleh semacam mekanisme di balik layar. Pertimbangkan perbedaan antara server aplikasi dan server basis data . Kendala REST adalah bahwa server aplikasi harus stateless . Namun, server aplikasi dapat mendelegasikan permintaan untuk status sumber daya ke server database berdasarkan informasi yang merupakan bagian dari permintaan, seperti kombinasi pengguna / kata sandi di header Otorisasi atau Uri itu sendiri. Bagaimanapun, REST didasarkan pada model klien / server.
sumber