Apa itu REST? Sedikit bingung [ditutup]

155

Saya berada di bawah asumsi bahwa REST adalah layanan web tetapi tampaknya saya salah dalam memikirkan hal ini - jadi, apa itu REST?

Saya sudah membaca Wikipedia tetapi masih tidak bisa membungkus kepala saya di sekitarnya. Mengapa banyak tempat menyebut API sebagai REST API?

Bill the Lizard
sumber
21
@ John Saunders: Bagaimana ini bisa jadi duplikat? Pria yang satunya lagi tahu apa REST, sedangkan Nathan bingung.
Fake Code Monkey Rashid
Saya merasa yang lain akan menjawab pertanyaannya. Jika tidak ada yang setuju, maka pemungutan suara dekat akan menua. Kami memiliki sekitar sepuluh jawaban untuk pertanyaan ini. Klik saja tag "rest" dan Anda akan melihat semuanya.
John Saunders
1
REST adalah seperangkat aturan untuk membangun layanan web. Jika suatu API dibangun menurut aturan-aturan itu adalah API ISTIRAHAT. Bagaimana saya menjelaskan REST kepada bebek karet saya menjelaskan beberapa aturan itu secara tidak resmi.
User42

Jawaban:

127

REST bukan layanan web spesifik tetapi konsep desain (arsitektur) untuk mengelola informasi keadaan. Makalah mani tentang ini adalah disertasi Roy Thomas Fielding (2000), "Gaya Arsitektur dan Desain Arsitektur Perangkat Lunak Berbasis Jaringan" ( tersedia online dari University of California, Irvine).

Pertama, baca posting Ryan Tomayko Bagaimana saya menjelaskan REST kepada istri saya ; ini adalah titik awal yang bagus. Kemudian baca disertasi aktual Fielding. Itu tidak setinggi itu, juga tidak terlalu panjang (enam bab, 180 halaman)! (Saya tahu Anda anak-anak di sekolah suka pendek).

EDIT: Saya merasa tidak ada gunanya untuk mencoba menjelaskan REST. Ini memiliki banyak konsep seperti skalabilitas, visibilitas (stateless) dll yang perlu dipahami pembaca, dan sumber terbaik untuk memahami mereka adalah disertasi yang sebenarnya. Ini lebih dari POST / DAPATKAN dll.

Anders
sumber
@ Nathan, Percayalah, saya punya masalah yang sama seperti yang Anda lakukan sebelumnya. Baca tesisnya, mungkin ulas beberapa kali secara perlahan, tetapi Anda akan memahami konsepnya, sebenarnya tidak sulit sama sekali. Orang-orang cenderung menjelaskannya dengan buruk.
Anders
Ketika pengembang mencoba menggunakan REST dan mencoba melakukannya hanya pada kode mereka (tanpa merencanakan seluruh sistem dengan REST dalam pikiran), neraka datang :-)
karatedog
@Anders, Mengingat REST itu apa adanya, bagaimana Anda bisa membandingkan REST vs Layanan Web?
Tahanan
1
mungkin bab ini akan cukup daripada membaca seluruh disertasi: ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
andilabs
74

REST adalah pola desain perangkat lunak yang biasanya digunakan untuk aplikasi web. Dalam istilah awam ini berarti bahwa itu adalah ide yang umum digunakan dalam banyak proyek yang berbeda. Itu singkatan dari Transfer Negara Representatif . Ide dasar REST adalah memperlakukan objek di sisi server (seperti pada baris dalam tabel database) sebagai sumber daya yang dapat dibuat atau dihancurkan.

Cara berpikir paling mendasar tentang REST adalah sebagai cara memformat URL aplikasi web Anda. Misalnya, jika sumber daya Anda disebut "posting", maka:

/posts Akan menjadi bagaimana pengguna akan mengakses SEMUA posting, untuk ditampilkan.

/posts/:id Akan menjadi bagaimana pengguna akan mengakses dan melihat posting individu, diambil berdasarkan id unik mereka.

/posts/new Akan menjadi bagaimana Anda akan menampilkan formulir untuk membuat posting baru.

Mengirim permintaan POST /usersakan menjadi bagaimana Anda benar-benar akan membuat posting baru di tingkat basis data.

Mengirim permintaan PUT /users/:idadalah bagaimana Anda akan memperbarui atribut dari posting yang diberikan, sekali lagi diidentifikasi oleh id unik.

Mengirim permintaan DELETE ke /users/:idbagaimana Anda akan menghapus posting yang diberikan, sekali lagi diidentifikasi oleh id unik.

Seperti yang saya pahami, pola REST terutama dipopulerkan (untuk aplikasi web) oleh kerangka kerja Ruby on Rails, yang memberikan penekanan besar pada rute RESTful. Saya bisa salah tentang itu.

Saya mungkin bukan yang paling memenuhi syarat untuk membicarakannya, tetapi ini adalah bagaimana saya mempelajarinya (khusus untuk pengembangan Rails).

Ketika seseorang merujuk ke "api REST," umumnya yang mereka maksud adalah api yang menggunakan url ISTIRAHAT untuk mengambil data.

maxluzuriaga
sumber
2
Anda beruntung, karena Rails dibangun berdasarkan prinsip REST dan jika Anda menggunakan alat Rails, kode Anda akan TETAP. Namun ada coders di luar sana yang tidak mengerti jack tentang REST, mereka kode apa yang mereka inginkan dan pada akhirnya mereka menggunakan 'pemformatan URL' ini karena itu trendi.
karatedog
8
dimanakah / pengguna telah digunakan dalam jawaban ini, bukankah seharusnya / posting?
Mayuresh Srivastava
@MayureshSrivastava Perhatikan bahwa contoh PUT punya: id dan contoh POST tidak punya: id. Google untuk sisa cerita. (POST: tidak aman, tidak idempoten; PUT: tidak aman, idempoten)
Ajeet Ganga
38

RESTadalah gaya arsitektur dan desain untuk arsitektur perangkat lunak berbasis jaringan.

RESTkonsep disebut sebagai sumber daya. Representasi sumber daya harus tanpa kewarganegaraan. Ini diwakili melalui beberapa jenis media. Beberapa contoh jenis media termasuk XML, JSON, dan RDF. Sumber daya dimanipulasi oleh komponen. Komponen meminta dan memanipulasi sumber daya melalui antarmuka seragam standar. Dalam hal HTTP, antarmuka ini terdiri dari ops HTTP standar GET, misalnya PUT,POST , DELETE.

REST biasanya digunakan lebih HTTP , terutama karena kesederhanaan HTTP dan pemetaan yang sangat alami untuk prinsip RESTful. Namun REST tidak terikat dengan protokol khusus apa pun.

Prinsip REST Fundamental

Komunikasi Client-Server

Arsitektur client-server memiliki pemisahan keprihatinan yang sangat berbeda. Semua aplikasi yang dibangun dengan gaya RESTful juga harus pada prinsipnya client-server.

Tanpa kewarganegaraan

Setiap permintaan klien ke server mensyaratkan bahwa negaranya sepenuhnya terwakili. Server harus dapat sepenuhnya memahami permintaan klien tanpa menggunakan konteks server atau status sesi server apa pun. Oleh karena itu, semua status harus disimpan pada klien. Kami akan membahas perwakilan tanpa negara secara lebih rinci nanti.

Cacheable

Batasan cache dapat digunakan, sehingga memungkinkan data respons untuk ditandai sebagai dapat disimpan atau tidak. Setiap data yang ditandai sebagai dapat disimpan kembali dapat digunakan kembali sebagai respons terhadap permintaan berikutnya yang sama.

Antarmuka Seragam

Semua komponen harus berinteraksi melalui antarmuka seragam tunggal. Karena semua interaksi komponen terjadi melalui antarmuka ini, interaksi dengan berbagai layanan sangat sederhana. Antarmukanya sama! Ini juga berarti bahwa perubahan implementasi dapat dilakukan secara terpisah. Perubahan seperti itu, tidak akan mempengaruhi interaksi komponen mendasar karena antarmuka yang seragam selalu tidak berubah. Salah satu kelemahannya adalah Anda terjebak dengan antarmuka. Jika optimasi dapat diberikan ke layanan tertentu dengan mengubah antarmuka, Anda kurang beruntung karena REST melarang ini. Namun, sisi baiknya, REST dioptimalkan untuk web, karenanya popularitas REST yang luar biasa atas HTTP!

Konsep di atas menggambarkan karakteristik REST dan membedakan arsitektur REST dari arsitektur lain seperti layanan web. Penting untuk dicatat bahwa layanan REST adalah layanan web, tetapi layanan web belum tentu merupakan layanan REST.

Lihat posting blog ini di Prinsip - prinsip Desain REST untuk detail lebih lanjut tentang REST dan prinsip-prinsip di atas.

cmd
sumber
15

Itu singkatan dari Representational State Transfer dan itu bisa berarti banyak hal, tetapi biasanya ketika Anda berbicara tentang API dan aplikasi, Anda berbicara tentang REST sebagai cara untuk melakukan layanan web atau mendapatkan program untuk berbicara melalui web.

REST pada dasarnya adalah cara berkomunikasi antar sistem dan melakukan banyak hal yang dirancang untuk dilakukan oleh SOAP. Namun, sementara SOAP secara umum membuat koneksi, mengautentikasi dan kemudian melakukan hal-hal melalui koneksi itu, REST bekerja dengan cara yang hampir sama dengan cara kerja web. . Anda memiliki URL dan ketika Anda meminta URL itu Anda mendapatkan sesuatu kembali. Di sinilah hal-hal mulai membingungkan karena orang menggambarkan web sebagai aplikasi REST terbesar dan sementara ini secara teknis benar itu tidak benar-benar membantu menjelaskan apa itu.

Singkatnya, REST memungkinkan Anda untuk membuat dua aplikasi berbicara melalui Internet menggunakan alat yang mirip dengan apa yang digunakan browser web. Ini jauh lebih sederhana daripada SOAP dan banyak hal yang dilakukan REST adalah, "Hei, segalanya tidak harus begitu rumit."

Layak dibaca:

Menandai
sumber
REST adalah arsitektur yang didasarkan pada batasan, SOAP adalah protokol, semuanya adalah hal yang sangat berbeda. Saya tidak suka ketika orang berbicara tentang SOAP dan REST dalam konsep yang sama, tidak heran orang bingung tentang hal itu.
Anders
@Anders - Dia bilang dia sedang melihat REST API dan mengira itu adalah cara untuk menggunakan layanan Web. Anda dapat menggunakan REST seperti itu dan dalam kapasitas itu banyak yang dicapai oleh SOAP. Dimungkinkan juga untuk berbicara tentang web sebagai aplikasi RESTful terbesar di dunia, tetapi itu tidak benar-benar menjelaskan untuk apa Anda akan menggunakan API REST.
Tandai
Ini sebenarnya menjadi masalah utama saya, melihat REST dan SOAP dalam konsep yang sama. Tampaknya API hanya tenang dalam desain.
Tahanan
4

http://en.wikipedia.org/wiki/Representational_State_Transfer

Ide dasarnya adalah bahwa alih-alih memiliki koneksi yang berkelanjutan ke server, Anda membuat permintaan, mendapatkan beberapa data, menunjukkannya kepada pengguna, tetapi mungkin tidak semuanya, dan kemudian ketika pengguna melakukan sesuatu yang membutuhkan lebih banyak data, atau untuk meneruskan ke server, klien memulai perubahan ke status baru.

Hack Saw
sumber
3
Mungkin hanya saya, tetapi saya suka melihat jawaban yang relevan pada stackoverflow bersama dengan kutipan yang sesuai. Cuma humor saya dan anggap wikipedia jadi pudar. Lalu apa gunanya tautan Anda hmm? :)
Fake Code Monkey Rashid
1
@ Hack Saw: Bukankah itu seharusnya ada dalam jawaban Anda?
Fake Code Monkey Rashid
Saya baru saja memperhatikan fitur edit. :)
Hack Saw
1
@karatedog: REST dapat dicapai dengan HTTP, tetapi bisa dilakukan dengan berbagai metode transfer data.
Hack Saw
1
Ini adalah protokol HTTP yang Anda tulis, REST adalah arsitektur.
karatedog