Haruskah layanan web gaya Netflix atau Twitter menggunakan REST atau SOAP? [Tutup]

145

Saya telah menerapkan dua layanan REST: Twitter dan Netflix. Kedua kali, saya berjuang untuk menemukan penggunaan dan logika yang terlibat dalam keputusan untuk mengekspos layanan ini sebagai REST, bukan SABUN. Saya harap seseorang dapat memahami apa yang saya lewatkan dan menjelaskan mengapa REST digunakan sebagai implementasi layanan untuk layanan seperti ini.

  1. Menerapkan layanan REST membutuhkan waktu yang jauh lebih lama daripada menerapkan layanan SOAP. Alat ada untuk semua bahasa / kerangka / platform modern untuk membaca di WSDL dan kelas dan klien proksi keluaran. Menerapkan layanan REST dilakukan dengan tangan dan - dapatkan ini - dengan membaca dokumentasi. Selain itu, saat menerapkan kedua layanan ini, Anda harus membuat "tebakan" tentang apa yang akan kembali ke pipa karena tidak ada skema nyata atau dokumen referensi.

  2. Mengapa menulis layanan REST yang mengembalikan XML? Satu-satunya perbedaan adalah bahwa dengan REST Anda tidak tahu tipe yang diwakili oleh setiap elemen / atribut - Anda sendiri yang mengimplementasikannya dan berharap suatu hari suatu string tidak menemukan bidang yang Anda pikir selalu int. SOAP mendefinisikan struktur data menggunakan WSDL jadi ini adalah no-brainer.

  3. Saya telah mendengar keluhan bahwa dengan SOAP Anda memiliki "overhead" dari Amplop SOAP. Di zaman sekarang ini, apakah kita benar-benar perlu khawatir tentang beberapa byte?

  4. Saya pernah mendengar argumen bahwa dengan REST Anda bisa memasukkan URL ke browser dan melihat datanya. Tentu, jika layanan REST Anda menggunakan otentikasi sederhana atau tidak ada. Layanan Netflix, misalnya, menggunakan OAuth yang mengharuskan Anda untuk menandatangani sesuatu dan menyandikan hal-hal sebelum Anda bahkan dapat mengirimkan permintaan Anda.

  5. Mengapa kita membutuhkan URL "dapat dibaca" untuk setiap sumber daya? Jika kami menggunakan alat untuk mengimplementasikan layanan, apakah kami benar-benar peduli dengan URL yang sebenarnya?

Josh M.
sumber
5
Anda harus mencatat bahwa REST belum "ditemukan", sudah ada sejak awal HTTP.
Dirk Vollmar
5
Percakapan antara Anda dan Roy Fielding akan sangat menghibur. :)
Gert Grenander
1
Beberapa hal untuk memulai kita. Pertama, kebencian adalah kata yang kuat. Kedua, industri kita dipenuhi dengan lebih dari satu cara untuk melakukan sesuatu. Jadi saya tidak akan masuk ke argumen filosofis untuk keberadaan REST. Sebagai pengembang yang baik , Anda harus terbuka untuk menggunakan teknologi mana pun yang paling baik memecahkan masalah. Untuk beberapa layanan web, itu mungkin REST. Saya menulis lebih banyak, tetapi ini ditutup;)
Jason McCreary
1
@ Jo: Titik diambil. Tetapi bagian dari ironi REST adalah bahwa itu bukan teknologi "baru", itu hanya kata kunci baru untuk sesuatu yang bekerja sejak awal 90-an. Dan @ jsm11482: itulah mengapa pertanyaan ini ditutup sebagai "subyektif dan argumentatif" - karena menarik argumen!
Daniel Pryden
2
Jawaban saya untuk pertanyaan ini ada di sini bit.ly/cAdYAr
Darrel Miller

Jawaban:

193

Kenari di tambang batu bara.

Saya telah menunggu pertanyaan seperti ini selama hampir satu tahun sekarang. Tidak dapat dihindari bahwa hari ini akan datang dan saya yakin kita akan melihat lebih banyak pertanyaan seperti ini dalam beberapa bulan mendatang.

Tanda-tanda peringatan

Anda benar sekali, butuh waktu lebih lama untuk membangun klien tenang daripada klien SOAP. Toolkit SOAP menghilangkan banyak kode boilerplate dan membuat objek proxy klien tersedia dengan hampir tanpa usaha. Dengan alat seperti Visual Studio dan URL server saya dapat mengakses objek jarak jauh dari kompleksitas arbitrer, secara lokal dalam waktu kurang dari lima menit.

Layanan yang mengembalikan aplikasi / xml dan aplikasi / json sangat mengganggu bagi pengembang klien. Apa yang harus kita lakukan dengan gumpalan data itu?

Untungnya, banyak situs yang menyediakan layanan REST juga menyediakan banyak pustaka klien sehingga kami dapat menggunakan pustaka tersebut untuk mendapatkan akses ke banyak objek yang sangat diketik. Sepertinya agak bodoh. Jika mereka menggunakan SOAP, kita bisa membuat sendiri kode-kode kelas proksi itu.

SABUN overhead, ha. Latensi yang membunuh. Jika orang benar-benar khawatir tentang jumlah kelebihan byte yang terjadi, maka mungkin HTTP bukan pilihan yang tepat. Pernahkah Anda melihat berapa byte yang digunakan oleh header agen-pengguna?

Ya, pernahkah Anda mencoba menggunakan browser web sebagai alat debugging untuk apa pun selain HTML dan javascript. Percayalah padaku itu menyebalkan. Anda hanya dapat menggunakan dua kata kerja, caching terus-menerus menghalangi, penanganan kesalahan menelan begitu banyak informasi, selalu mencari favicon.ico. Tembak aku.

URL yang dapat dibaca. Hanya kata benda, tanpa kata kerja. Ya, itu mudah asalkan kita hanya melakukan operasi CRUD dan kita hanya perlu mengakses hierarki objek dalam satu cara. Sayangnya sebagian besar aplikasi memerlukan sedikit lebih banyak fungsionalitas dari itu.

Bencana yang akan datang

Ada sejumlah besar pengembang yang saat ini mengembangkan aplikasi yang berintegrasi dengan layanan REST yang sedang dalam proses mencapai kesimpulan yang sama dengan yang Anda miliki. Mereka dijanjikan kesederhanaan, fleksibilitas, skalabilitas, evolvabilitas, dan cawan suci penggunaan kembali kebetulan. Ciri-ciri web itu sendiri, bagaimana bisa terjadi kesalahan.

Namun, mereka menemukan bahwa versi sama banyak masalah, tetapi kompiler tidak membantu mendeteksi masalah. Kode klien tulisan tangan sangat sulit untuk dipertahankan karena struktur data berevolusi dan URL dapat di-refactored. Merancang API di sekitar hanya kata benda dan empat kata kerja bisa sangat sulit, terutama dengan fanatik Url RESTful memberi tahu Anda ketika Anda bisa dan tidak bisa menggunakan string kueri.

Pengembang akan mulai bertanya mengapa kita membuang-buang upaya kita untuk mendukung format Json dan format Xml, mengapa tidak hanya memfokuskan upaya kita pada satu dan melakukannya dengan baik?

Bagaimana semuanya menjadi sangat salah

Aku akan memberitahumu apa yang salah. Kami sebagai pengembang membiarkan departemen pemasaran memanfaatkan kelemahan utama kami. Pencarian kekal kami untuk peluru perak membutakan kami terhadap kenyataan apa sebenarnya REST. Di permukaan REST sepertinya begitu mudah dan sederhana. Beri nama sumber daya Anda dengan Url dan gunakan GET, PUT, POST dan DELETE. Sial, kita para pengembang sudah tahu bagaimana melakukan itu, kita telah berurusan dengan basis data selama bertahun-tahun yang memiliki tabel dan kolom serta pernyataan SQL yang memiliki SELECT, INSERT, UPDATE, dan DELETE. Seharusnya sepotong kue.

Ada bagian lain dari REST yang dibahas beberapa orang, seperti deskripsi diri, dan batasan hypermedia, tetapi kendala ini tidak sesederhana identifikasi sumber daya dan antarmuka yang seragam. Tampaknya menambah kompleksitas di mana tujuan yang diinginkan adalah kesederhanaan.

Versi REST yang dipermudah ini divalidasi dalam budaya pengembang dalam banyak hal. Kerangka kerja server dibuat yang mendorong Identifikasi Sumberdaya dan antarmuka yang seragam, tetapi tidak melakukan apa pun untuk mendukung kendala lainnya. Persyaratan mulai melayang di sekitar membedakan pendekatan, (HI-REST vs LO-REST, REST Perusahaan vs REST Akademik, REST vs RESTful).

Beberapa orang berteriak bahwa jika Anda tidak menerapkan semua kendala itu bukan ISTIRAHAT. Anda tidak akan mendapat manfaatnya. Tidak ada setengah SISA. Namun suara-suara itu dicap sebagai fanatik agama yang kesal karena istilah mereka yang berharga telah dicuri dari ketidakjelasan dan dijadikan arus utama. Orang-orang iri yang mencoba membuat REST terdengar lebih sulit daripada itu.

REST, istilahnya, sudah pasti menjadi mainstream. Hampir setiap properti web utama yang memiliki API mendukung "REST". Twitter dan Netflix adalah dua profil yang sangat tinggi. Yang menakutkan adalah bahwa saya hanya bisa memikirkan satu API publik yang bersifat deskriptif sendiri dan ada beberapa yang benar-benar menerapkan kendala hypermedia. Tentu saja beberapa situs seperti StackOverflow dan Gowalla mendukung tautan dalam tanggapan mereka, tetapi ada lubang besar yang menganga di tautan mereka. StackOverflow API tidak memiliki halaman root. Bayangkan seberapa sukses situs web itu jika tidak ada halaman rumah untuk situs web itu!

Anda disesatkan, saya takut

Jika Anda telah sampai sejauh ini, jawaban singkat untuk pertanyaan Anda adalah API (Netflix dan Twitter) tidak sesuai dengan semua kendala dan oleh karena itu Anda tidak akan mendapatkan manfaat yang seharusnya dibawa oleh REST apis.

Klien REST memang membutuhkan waktu lebih lama untuk membangun daripada klien SABUN tetapi mereka tidak terikat pada satu layanan tertentu, jadi Anda harus dapat menggunakannya kembali di seluruh layanan. Ambil contoh klasik, dari browser web. Berapa banyak layanan yang dapat diakses oleh browser web? Bagaimana dengan Feed Reader? Sekarang, berapa banyak layanan berbeda yang dapat diakses klien Twitter rata-rata? Ya, hanya satu.

Klien REST tidak seharusnya dibangun untuk berinteraksi dengan satu layanan, mereka seharusnya dibuat untuk menangani jenis media tertentu yang dapat dilayani oleh layanan apa pun. Pertanyaan yang jelas untuk itu adalah, bagaimana Anda bisa membangun klien REST untuk layanan yang memberikan aplikasi / json atau aplikasi / xml. Yah, kamu tidak bisa. Itu karena format tersebut sama sekali tidak berguna untuk klien REST. Anda mengatakannya sendiri,

Anda harus membuat "tebakan" tentang apa yang akan kembali ke pipa karena tidak ada skema nyata atau dokumen referensi

Anda sepenuhnya benar untuk layanan seperti Twitter. Namun, kendala deskriptif diri dalam REST mengatakan bahwa header tipe konten HTTP harus menggambarkan dengan tepat konten yang sedang dikirim melintasi kabel. Memberikan aplikasi / json dan application / xml tidak memberi tahu Anda tentang konten.

Ketika datang untuk mempertimbangkan kinerja sistem berbasis REST perlu melihat gambaran yang lebih besar. Berbicara tentang byte amplop seperti berbicara tentang loop unwinding ketika membandingkan quick-sort ke shell-sort. Ada skenario di mana SOAP dapat berkinerja lebih baik, dan ada skenario di mana REST dapat berkinerja lebih baik. Konteks adalah segalanya.

REST mendapatkan banyak keuntungan kinerjanya dengan menjadi sangat fleksibel tentang jenis media apa yang didukungnya dan dengan memiliki dukungan canggih untuk caching. Agar caching berfungsi dengan baik, meskipun hampir semua kendala harus dipatuhi.

Poin terakhir Anda tentang url yang dapat dibaca sejauh ini adalah yang paling ironis. Jika Anda benar-benar berkomitmen pada batasan hypermedia, maka setiap URL bisa menjadi GUID dan pengembang klien tidak akan kehilangan apa pun dalam keterbacaan.

Fakta bahwa URI harus buram bagi klien adalah salah satu hal terpenting saat mengembangkan sistem REST. URL yang dapat dibaca nyaman untuk pengembang server dan URL yang terstruktur dengan baik memudahkan kerangka server untuk mengirimkan permintaan, tetapi itu adalah detail implementasi yang seharusnya tidak berdampak pada pengembang yang mengonsumsi API.

API Twitter bahkan tidak dekat dengan RESTful dan itulah sebabnya Anda tidak dapat melihat manfaat apa pun untuk menggunakannya di atas SOAP. Netflix API jauh lebih dekat tetapi penggunaan jenis media generik menunjukkan bahwa kegagalan untuk mematuhi bahkan satu kendala pun dapat memiliki dampak mendalam pada manfaat yang diperoleh dari layanan.

Mungkin itu bukan salah mereka

Saya telah melakukan banyak pembuangan pada penyedia layanan, tetapi butuh dua untuk menari dengan tenang. Suatu layanan dapat mengikuti semua kendala agama dan klien masih dapat dengan mudah membatalkan semua manfaat.

Jika suatu klien membuat kode url untuk mengakses jenis sumber daya tertentu maka itu mencegah server untuk mengubah url tersebut. Segala jenis konstruksi URL berdasarkan pengetahuan implisit tentang bagaimana layanan menyusun url-nya merupakan pelanggaran.

Membuat asumsi tentang jenis representasi apa yang akan dikembalikan dari tautan dapat menimbulkan masalah. Membuat asumsi tentang konten representasi berdasarkan pengetahuan yang tidak secara eksplisit dinyatakan dalam header HTTP pasti akan membuat kopling yang akan menimbulkan rasa sakit di masa depan.

Haruskah mereka menggunakan sabun?

Secara pribadi, saya kira tidak. REST dilakukan dengan benar memungkinkan sistem terdistribusi untuk berkembang dalam jangka panjang. Jika Anda sedang membangun sistem terdistribusi yang memiliki komponen yang dikembangkan oleh orang yang berbeda dan perlu bertahan selama bertahun-tahun, maka REST adalah pilihan yang cukup bagus.

Darrel Miller
sumber
4
Ini mungkin tidak semuanya benar. Amazon memiliki antarmuka SOAP dan REST untuk layanan web mereka, dan 85% penggunaannya adalah antarmuka REST. Terlepas dari semua hype perusahaan atas tumpukan SOAP, ini adalah bukti yang cukup menarik bahwa pengembang menyukai pendekatan REST yang lebih sederhana. SUMBER: oreillynet.com/pub/wlg/3005
Suraj Chandran
3
Tidak, itu hanya bukti kuat bahwa pengembang web menyukai apa yang mereka anggap lebih sederhana, bukan bahwa itu sebenarnya lebih unggul dalam jenis jangka panjang, atau dalam jenis cara yang berorientasi kinerja. Faktanya adalah, alat yang tepat untuk pekerjaan tertentu adalah yang dibutuhkan, bukan "Saya tahu alat ini, jadi semua pekerjaan harus sesuai dengannya."
Kevin Williams
61

SOAP adalah object-oriented , terpencil prosedur panggilan teknologi stack. Ia bekerja dengan membangun abstraksi baru di atas protokol yang ada (HTTP).

REST adalah pendekatan berorientasi dokumen , yang hanya menggunakan fitur protokol yang ada (HTTP). "REST" hanyalah kata kunci - konsepnya adalah ini: Cukup gunakan web seperti yang dirancang untuk bekerja!

Menanggapi suntingan ke pertanyaan:

  1. "Menerapkan layanan REST membutuhkan waktu yang jauh lebih lama daripada menerapkan layanan SOAP."

    Um, tidak, itu bisa tidak jauh lagi. Dan dalam kasus di mana apa yang Anda coba ambil sudah menjadi dokumen atau file , sebenarnya jauh lebih cepat . Misalnya, spesifikasi OGC untuk WMS (Layanan Pemetaan Web) mendefinisikan versi SOAP dan REST dari protokol, dan ada alasan mengapa hampir tidak ada yang mengimplementasikan versi SOAP - itu karena jika Anda mencoba untuk mendapatkan peta, itu adalah jauh lebih mudah untuk hanya membangun URL dan mengambil byte gambar dari URL itu daripada repot-repot dengan merangkumnya menjadi pesan SOAP. Tapi ya, saya akan setuju bahwa jika tujuan dari layanan web adalah untuk mentransfer beberapa objek yang sangat diketik dalam model objek domain, SOAP lebih cocok untuk penggunaan itu.

  2. "Kenapa menulis layanan REST yang mengembalikan XML?"

    Ya, itu konyol. Tapi itu tergantung pada apa XML itu. Jika ada skema yang jelas untuk suatu tempat, maka tidak ada ambiguitas. Misalnya, Anda dapat menganggap URL WSDL sebagai semacam layanan web RESTful untuk mengambil informasi tentang layanan web. Dalam hal ini, menambahkan overhead permintaan SOAP lain tidak ada gunanya.

    Secara umum, REST menang ketika konten yang sedang ditransfer dapat dianggap sebagai file, sebagai satu kesatuan . SOAP menang ketika konten perlu diperlakukan sebagai objek dengan anggota .

  3. "Aku sudah mendengar keluhan bahwa dengan SOAP kamu memiliki" overhead "dari Amplop SOAP. Di zaman sekarang ini, apakah kita benar-benar perlu khawatir tentang beberapa byte?"

    Iya. Tidak dalam setiap keadaan, tetapi ada situs dengan banyak traffic yang membuat perbedaan. Apakah cukup perbedaan untuk melebihi perbedaan semantik menggunakan SOAP daripada REST? Aku meragukan itu. Jika Anda melakukan protokol remoting objek dan jumlah byte membuat perbedaan, SOAP mungkin bukan alat untuk Anda - mungkin Anda harus menggunakan CORBA atau DCOM sebagai gantinya.

  4. "Saya pernah mendengar argumen bahwa dengan REST Anda bisa memasukkan URL ke browser dan melihat datanya."

    Ya, dan ini adalah argumen besar yang mendukung REST jika masuk akal untuk melihat data di browser . Misalnya, dengan data gambar, ini adalah cara mudah untuk men-debug layanan - cukup tempelkan URL ke bilah alamat browser Anda dan lihat seperti apa gambar itu. Atau jika data yang dikembalikan dalam XML, dan Anda memiliki lembar gaya XML referensi yang menjadikan HTML yang dapat dibaca di browser, maka Anda mendapatkan manfaat dari markup semantik dan visualisasi yang mudah semua dalam satu paket. Tetapi Anda benar, manfaat ini sebagian besar menguap ketika bekerja dengan skema otentikasi yang lebih kompleks. Jika Anda tidak dapat menyandikan semua informasi otentikasi Anda ke dalam setiap permintaan HTTP , maka saya berpendapat bahwa itu tidak dihitung sebagai REST sama sekali.

  5. "Mengapa kita membutuhkan URL yang" dapat dibaca "untuk setiap sumber daya? Jika kita menggunakan alat untuk mengimplementasikan layanan, apakah kita benar-benar peduli dengan URL yang sebenarnya?"

    Yah, itu tergantung. Mengapa kita perlu URL yang dapat dibaca untuk sumber daya apa pun di web? Anda dapat membaca esai Tim Berners-Lee, Cool URIs Don't Change untuk alasannya, tetapi pada dasarnya, selama sumber daya itu mungkin masih berguna di masa depan, URI untuk sumber daya itu harus tetap sama.

    Jelas, untuk sumber daya sementara (seperti tautan "Uang hari ini" dalam esai) tidak perlu, karena kebutuhan untuk referensi sumber daya hilang jika sumber daya yang sesuai hilang. Tetapi untuk sumber daya yang lebih permanen (seperti pertanyaan StackOverflow, misalnya, atau film di IMDB), Anda ingin memiliki URL yang akan berfungsi selamanya. Saat Anda mendesain layanan web, Anda perlu memutuskan apakah sumber daya itu sendiri dapat hidup lebih lama dari layanan Anda, dan jika demikian, maka REST mungkin merupakan cara yang tepat.

Sebagai catatan, ya, saya telah mengembangkan halaman web sejak jauh sebelum NetFlix atau Twitter ada. Dan tidak, saya belum memiliki kebutuhan atau peluang untuk mengimplementasikan klien ke NetFlix atau layanan Twitter. Tetapi bahkan jika layanan mereka sangat sulit untuk dikerjakan, itu tidak berarti bahwa teknologi yang mereka implementasikan di atas adalah buruk - hanya saja kedua implementasi itu buruk.

Untuk membuat cerita panjang pendek: REST dan SOAP hanyalah alat . Mereka masing-masing memiliki kekuatan dan kelemahan. Jika satu-satunya alat yang Anda miliki adalah palu, maka setiap masalah terlihat seperti paku. Jadi, kenali kedua alat ini, dan pelajari cara menggunakannya dengan benar, lalu pilih alat yang tepat untuk setiap pekerjaan.

Daniel Pryden
sumber
11
Perlu diingat bahwa SOAP tidak terbatas pada HTTP, karenanya abstraksi tambahan. Pesan gaya SOAP dapat digunakan pada banyak protokol, dan karenanya memiliki jangkauan yang lebih luas daripada REST. Saya pikir itu adalah fakta sederhana bahwa banyak pendukung REST hard-core terkadang gagal mengenali. REST memiliki tempatnya, tetapi demikian juga sabun.
jrista
4
@jrista: Poin bagus. Bukannya ada yang salah dengan sabun, seperti tidak ada yang salah dengan palu, selama masalah Anda benar-benar paku. Sebaliknya, pertanyaan ini sepertinya mengatakan: "Saya benci obeng! Mengapa palu tidak cukup baik untuk semua orang? Meyakinkan saya bahwa obeng harus ada!" - yang, ketika dimasukkan ke dalam konteks itu, diungkapkan untuk absurditas itu.
Daniel Pryden
2
REST adalah gaya arsitektur. Anda dapat melakukan layanan RESTful dengan SOAP, jika Anda benar-benar menginginkannya. Saya pikir celaan utama komunitas REST terhadap SOAP wrt HTTP adalah bahwa SOAP berpikir HTTP adalah protokol transport, sedangkan itu adalah protokol transfer.
Bruno
@Aniel: Sepenuhnya setuju tentang pertanyaan di atas ... pertanyaan mengerikan, dan tentang sebagai contoh ideal "subjektif dan argumentatif" karena mendapat, dan tentu saja tidak mungkin lebih masuk akal. : PI akan membuat satu perbedaan tentang SABUN namun ... Saya pikir itu cocok dengan tagihan "pisau tentara swiss" jauh lebih baik daripada "palu". ; P
jrista
3
@Daniel Sheesh! Tidak bermaksud menyinggung siapa pun. Ini adalah penyelidikan yang jujur ​​karena saya tidak berpikir REST adalah pendekatan yang tepat untuk layanan dan layanan seperti ini. Tolong jangan hapus pertanyaan saya pada pandangan pertama. Saya pikir tidak apa-apa bahwa itu "argumentatif" karena dalam kenyataannya, saya mengajukan argumen. Saya hanya meminta bantahan. Mengatakan bahwa REST "menggunakan web seperti yang dirancang untuk bekerja," bagi saya terdengar seperti "kembali pada hari saya sebelum semua Twitters dan Facebook ..." Anda tidak memberikan informasi yang menjelaskan mengapa REST cocok untuk jenis ini layanan. Mau menguraikan?
Josh M.
17

Pertanyaan yang jujur ​​layak mendapat jawaban yang jujur. Tetapi pertama-tama, mengapa Anda menggunakan teks pertanyaan ini sebagai jawaban untuk pertanyaan lain jika Anda tidak menganggapnya retoris?

Bagaimanapun:

  1. "Ada alat untuk semua bahasa / kerangka / platform modern untuk membaca dalam WSDL dan output kelas proxy dan klien. Menerapkan layanan REST dilakukan dengan tangan dengan membaca dokumentasi. "

    Sama seperti vendor browser telah membaca dan membaca kembali spesifikasi HTML 4.01 atas dan ke bawah untuk mencoba menerapkan pengalaman browsing yang konsisten. Sudahkah Anda merenungkan fakta bahwa browser diciptakan jauh sebelum internet banking dan stackoverflow, namun, Anda dapat menggunakan browser untuk melakukan hal-hal tersebut. Ini dimungkinkan karena satu-satunya alasan semua orang setuju untuk menggunakan HTML (dan format terkait seperti CSS, JS, JPEG dll).

    Blogging sebenarnya bukan yang baru, dan seseorang datang dengan AtomPub, yang memungkinkan perangkat lunak blog untuk mengakses dan memperbarui posting di blog, seperti halnya browser web dapat mengakses halaman web mana pun. Itu cukup rapi, dan berfungsi karena kendala TETAP yang diberlakukan oleh protokol.

    Tetapi untuk Twitter dan Netflix, tidak ada kesepakatan universal bahwa "semua microblog yang ada akan menggunakan aplikasi tipe media / tweet", terutama karena microblogging sangat baru. Mungkin dalam beberapa tahun mendatang beberapa layanan microblogging menggunakan API yang sama sehingga Twitter, Facebook, Identica dan dapat beroperasi. Tidak ada API mereka yang ada di dekat RESTful, betapapun mereka mengklaim, jadi saya tidak berharap itu terjadi segera.

    " Lebih jauh lagi, saat mengimplementasikan kedua layanan ini, Anda harus membuat" tebakan "tentang apa yang akan kembali ke pipa karena tidak ada skema nyata atau dokumen referensi. "

    Anda telah memukul paku di kepala. REST adalah semua tentang didistribusikan dan hypermedia, dan itu cukup meringkasnya. Browser melihat apa yang didapat dari permintaan dan menunjukkannya kepada pengguna. Halaman HTML biasanya memunculkan lebih banyak permintaan GET, misalnya CSS, skrip, dan gambar. Gambar biasanya hanya ditampilkan di layar, JavaScript dieksekusi, dan sebagainya. Setiap kali, browser melakukan apa yang dilakukannya karena menemukan tautan dalam tag <img>atau <style>dan jenis media responsnya adalah image/jpegatau text/css.

    Jika Twitter membuat API berbasis hypermedia, ia mungkin akan selalu kembali application/tweetsetiap kali Anda mengikuti tautan ke tweet, tetapi klien seharusnya tidak pernah menganggapnya, dan selalu memeriksa apa yang didapatnya sebelum bertindak atasnya.

  2. " Kenapa menulis layanan REST yang mengembalikan XML? "

    Ini semua bermuara pada jenis media. Seperti HTML, jika Anda melihat elemen yang tidak tahu arti sebenarnya, spesifikasi HTML memerintahkan Anda untuk mengabaikannya, dan memproses "badan" dari tag jika memiliki elemen. Demikian juga, spesifikasi atom menginstruksikan Anda untuk mengabaikan elemen yang tidak dikenal dan markup asing (dari ruang nama yang berbeda) dan tidak memproses tubuh (IIRC).

    Merancang tipe media untuk domain masalah umum (seperti pada tipe media HTML untuk domain masalah teks kaya ) sangat sulit. Membuat jenis media untuk domain masalah yang sangat sempit mungkin jauh lebih mudah (seperti tweet). Tapi itu selalu ide yang baik untuk merancang untuk diperpanjang dan menentukan bagaimana klien (dan server) seharusnya bereaksi ketika mereka melihat elemen atau item data yang tidak cocok dengan spesifikasi. JPEG, misalnya memiliki tipe catatan khusus Aplikasi (misalnya APP1) yang digunakan untuk memuat semua jenis data meta.

  3. " Aku sudah mendengar keluhan bahwa dengan SOAP kamu memiliki" overhead "dari Amplop SOAP. Di zaman sekarang ini, apakah kita benar-benar perlu khawatir tentang beberapa byte? "

    Tidak, kami tidak. REST adalah benar-benar tidak tentang menjadi efisien melalui kawat, itu benar-benar perdagangan efisiensi kawat efisiensi SISA berasal dari kemungkinan caching diaktifkan oleh semua kendala lainnya. Disertasi Fielding catatan: trade-off, meskipun, adalah bahwa degradasi seragam antarmuka efisiensi, karena informasi ditransfer dalam bentuk standar daripada yang khusus untuk kebutuhan aplikasi. Antarmuka REST dirancang untuk menjadi efisien untuk transfer data hypermedia berbutir besar, mengoptimalkan untuk kasus umum Web, tetapi menghasilkan antarmuka yang tidak optimal untuk bentuk lain dari interaksi arsitektur. Saya tidak berpikir bahwa overhead hitungan byte SOAP Envelope adalah masalah yang valid.

  4. " Saya pernah mendengar argumen bahwa dengan REST Anda bisa memasukkan URL ke browser dan melihat datanya. "

    Ya, itu juga argumen yang tidak valid. Tidak berfungsi seperti itu. Bahkan jika itu berhasil, API REST yang paling sempit di luar sana menggunakan jenis media yang tidak diketahui oleh browser dan masih tidak akan berfungsi.

    Tetapi ada lebih banyak kemungkinan daripada peramban untuk menguji API berbasis HTTP, seperti utilitas baris perintah atau ekstensi peramban yang memungkinkan Anda untuk mengontrol hampir semua aspek permintaan HTTP, memeriksa tajuk tanggapan dan menemukan tautan untuk Anda ikuti. Namun demikian, ini tidak semudah menghasilkan stub WSDL dan membuat program tiga baris untuk memanggil fungsi.

  5. " Mengapa kita membutuhkan URL yang" dapat dibaca "untuk setiap sumber daya? Jika kita menggunakan alat untuk mengimplementasikan layanan, apakah kita benar-benar peduli dengan URL yang sebenarnya? "

    Jika Anda melihat bagaimana web bekerja, saya cukup yakin bahwa manusia pada umumnya senang bahwa URI untuk halaman wikipedia terlihat seperti ini, http://en.wikipedia.org/wiki/Stack_overflowbukan http://en.wikipedia.org/wiki/?oldid=376349090. Tetapi sebenarnya tidak penting untuk REST. Hal penting untuk mencoba mendapatkan yang benar adalah memilih untuk menempatkan data yang relevan di URI yang tidak mungkin berubah. Anda mungkin berpikir bahwa ID basis data tidak akan pernah berubah, tetapi apa yang terjadi ketika dua set data perlu digabungkan? Semua kunci utama Anda berubah. Judul halaman (Stack_overflow) tidak akan berubah.

Maaf atas tanggapan yang panjang, tapi saya yakin pertanyaan ini valid, dan belum pernah ditanggapi sebelumnya di SO. Saya yakin Darrel Miller akan menambahkan jawabannya begitu dia kembali juga.

Edit: pemformatan

mogsie
sumber
7

Martin Fowler memiliki posting di Richardson Maturity Model yang melakukan pekerjaan dengan baik menjelaskan perbedaan antara SOAP dan REST.

Caleb Powell
sumber
Artikel ini melakukan pekerjaan yang baik menjelaskan REST; tetapi sabun hanya disebutkan sekali saja. Tidak ada perbandingan yang dibuat antara keduanya.
jaco0646
3

WSDL dan protokol level dokumen lainnya berlebihan. Protokol HTTP mendukung serangkaian operasi yang lebih kaya selain hanya melayani dokumen dan mengirimkan formulir.

Pendukung REST tidak nyaman dengan redundansi itu.

SM.
sumber
Itu tidak memberi tahu saya mengapa saya harus menggunakan REST untuk jenis layanan ini. Bagi saya, itu tidak cocok. Mengatakan "protokol HTTP mendukung serangkaian operasi yang lebih kaya selain hanya melayani dokumen dan mengirimkan formulir" tidak berarti kita harus benar-benar MENGGUNAKAN mereka jika ada sesuatu yang lebih baik!
Josh M.
Poin tersirat yang saya sampaikan adalah bahwa REST ramping. Ia bekerja di tingkat protokol (HTTP).
BC.